<?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>138093</bug_id>
          
          <creation_ts>2014-10-27 07:23:18 -0700</creation_ts>
          <short_desc>[GTK] Move RedirectedXCompositeWindow from platform to WebKit2 layer</short_desc>
          <delta_ts>2014-11-12 04:13:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1044237</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-27 07:23:18 -0700</bug_when>
    <thetext>It&apos;s only used by WebKitWebViewBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044238</commentid>
    <comment_count>1</comment_count>
      <attachid>240480</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-27 07:28:35 -0700</bug_when>
    <thetext>Created attachment 240480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044239</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-27 07:30:26 -0700</bug_when>
    <thetext>Attachment 240480 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:434:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044301</commentid>
    <comment_count>3</comment_count>
      <attachid>240480</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-10-27 12:45:26 -0700</bug_when>
    <thetext>Comment on attachment 240480
Patch

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

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:-189
&gt; -    if (m_needsContext == CreateGLContext) {
&gt; -        context()-&gt;waitNative();
&gt; -        // This swap is based on code in Chromium. It tries to work-around a bug in the Intel drivers
&gt; -        // where a swap is necessary to ensure the front and back buffers are properly resized.
&gt; -        if (context() == GLContext::getCurrent())
&gt; -            context()-&gt;swapBuffers();
&gt; -    }
&gt; -

I&apos;m not sure that it is appropriate to remove this workaround in this patch. Please move the file and then make separate changes (like the cool anonymous function) in separate patches. I&apos;m worried about introducing hidden regressions.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:-75
&gt; -#if USE(TEXTURE_MAPPER_GL) &amp;&amp; PLATFORM(X11)
&gt; -#include &lt;WebCore/RedirectedXCompositeWindow.h&gt;
&gt; -#endif

I think we need to maintain at least PLATFORM(X11) here to deal with Wayland.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044438</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-28 00:29:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 240480 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240480&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:-189
&gt; &gt; -    if (m_needsContext == CreateGLContext) {
&gt; &gt; -        context()-&gt;waitNative();
&gt; &gt; -        // This swap is based on code in Chromium. It tries to work-around a bug in the Intel drivers
&gt; &gt; -        // where a swap is necessary to ensure the front and back buffers are properly resized.
&gt; &gt; -        if (context() == GLContext::getCurrent())
&gt; &gt; -            context()-&gt;swapBuffers();
&gt; &gt; -    }
&gt; &gt; -
&gt; 
&gt; I&apos;m not sure that it is appropriate to remove this workaround in this patch.

That&apos;s dead code, since the CreateGLContext mode is not used at all.

&gt; Please move the file and then make separate changes (like the cool anonymous
&gt; function) in separate patches. I&apos;m worried about introducing hidden
&gt; regressions.

I can make a diff of the file.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:-75
&gt; &gt; -#if USE(TEXTURE_MAPPER_GL) &amp;&amp; PLATFORM(X11)
&gt; &gt; -#include &lt;WebCore/RedirectedXCompositeWindow.h&gt;
&gt; &gt; -#endif
&gt; 
&gt; I think we need to maintain at least PLATFORM(X11) here to deal with Wayland.

It&apos;s done in the header already, we usually try to avoid #ifdefs around header includes, by adding the ifdefs in the headers, in this case, the header was already protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044480</commentid>
    <comment_count>5</comment_count>
      <attachid>240541</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-28 08:44:02 -0700</bug_when>
    <thetext>Created attachment 240541
Updated patch explaining all the cleanups in the changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044481</commentid>
    <comment_count>6</comment_count>
      <attachid>240542</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-28 08:44:40 -0700</bug_when>
    <thetext>Created attachment 240542
Cleanup diffs to make it easier to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044483</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-28 08:45:59 -0700</bug_when>
    <thetext>Attachment 240541 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:434:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044945</commentid>
    <comment_count>8</comment_count>
      <attachid>240542</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-10-29 18:39:47 -0700</bug_when>
    <thetext>Comment on attachment 240542
Cleanup diffs to make it easier to review

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

I like the reorganization overall and think it&apos;s an improvement, but there are some issues I have with the new design.

&gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:143
&gt; -    Display* display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
&gt; +    ASSERT(supportsXDamageAndXComposite(display));

I think it&apos;s a bug to put this into an ASSERT. This means that this check is only run for debug builds and will crash when run on an XServer that does not support these extensions. Instead we should fail gracefully in this case.

&gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:223
&gt;      if (!m_needsNewPixmapAfterResize &amp;&amp; m_surface)
&gt; -        return m_surface.get();
&gt; +        return;

One issue here is that you can no longer detect a failure to create the surface after a resize. I think that the old design handled this case better and this can now hide subtle failures.

&gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:267
&gt; +void RedirectedXCompositeWindow::draw(cairo_t* cr)
&gt;  {
&gt; -    if (m_damageNotifyCallback)
&gt; -        m_damageNotifyCallback(m_damageNotifyData);
&gt; +    prepareSurfaceForDrawing();
&gt; +    if (!m_surface)
&gt; +        return;
&gt; +
&gt; +    cairo_set_source_surface(cr, m_surface.get(), 0, 0);
&gt; +    cairo_fill(cr);
&gt;  }

It&apos;s a bit odd to move the drawing operation here, and I greatly preferred it exterior to the class. Let the user of the interface decide how to use the surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044993</commentid>
    <comment_count>9</comment_count>
      <attachid>240542</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-30 00:26:02 -0700</bug_when>
    <thetext>Comment on attachment 240542
Cleanup diffs to make it easier to review

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

&gt;&gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:143
&gt;&gt; +    ASSERT(supportsXDamageAndXComposite(display));
&gt; 
&gt; I think it&apos;s a bug to put this into an ASSERT. This means that this check is only run for debug builds and will crash when run on an XServer that does not support these extensions. Instead we should fail gracefully in this case.

No, it&apos;s not. The thing is that previously we had the constructor private, and you could only create the object using the create factory method. Now we are removing the factory methods in WebKit in favor of using std::make_unqiue, but in this particular case, the factory method is required, because it calls supportsXDamageAndXComposite() to return NULL in case xserver doesn&apos;t support the required extensions. I still moved to use std::unique_ptr and std::make_unique, but keeping the factory method to check the xserver extensions. But std::make_unique requires the constructor to be public, so this assert is a way to make sure that the caller has used the factory method to create the object. I can remove the ASSERT here, and make the constructor private again, by not using make_unique and returning a std::unique_ptr&lt;RedirectedXCompositeWindow&gt;(new RedirectedXCompositeWindow()); directly.

&gt;&gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:267
&gt;&gt;  }
&gt; 
&gt; It&apos;s a bit odd to move the drawing operation here, and I greatly preferred it exterior to the class. Let the user of the interface decide how to use the surface.

Ok. I made this to simplify the caller code, but it&apos;s also true that it may only fit in the current caller code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045009</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-30 04:07:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 240542 [details]
&gt; Cleanup diffs to make it easier to review
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240542&amp;action=review
&gt; 
&gt; I like the reorganization overall and think it&apos;s an improvement, but there
&gt; are some issues I have with the new design.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:143
&gt; &gt; -    Display* display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
&gt; &gt; +    ASSERT(supportsXDamageAndXComposite(display));
&gt; 
&gt; I think it&apos;s a bug to put this into an ASSERT. This means that this check is
&gt; only run for debug builds and will crash when run on an XServer that does
&gt; not support these extensions. Instead we should fail gracefully in this case.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.cpp:223
&gt; &gt;      if (!m_needsNewPixmapAfterResize &amp;&amp; m_surface)
&gt; &gt; -        return m_surface.get();
&gt; &gt; +        return;
&gt; 
&gt; One issue here is that you can no longer detect a failure to create the
&gt; surface after a resize. I think that the old design handled this case better
&gt; and this can now hide subtle failures.

Note that current code, doesn&apos;t event check the returned value is not NULL before using it :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045010</commentid>
    <comment_count>11</comment_count>
      <attachid>240665</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-30 04:13:33 -0700</bug_when>
    <thetext>Created attachment 240665
Updated patch according to review comments

Changes:

  - Removed the confusing ASSERT in the constructor by leaving the constructor private to ensure the object can only be created by the factory method that already checks if xserver extensions are supported.
  - Moved the draw code back to the web view.
  - Renamed prepareSurfaceForDrawing as just surface() that returns the surface and made it public again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045011</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 04:16:08 -0700</bug_when>
    <thetext>Attachment 240665 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:434:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048134</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-12 04:13:23 -0800</bug_when>
    <thetext>Committed r176016: &lt;http://trac.webkit.org/changeset/176016&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240480</attachid>
            <date>2014-10-27 07:28:35 -0700</date>
            <delta_ts>2014-10-28 08:44:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-redirected-xcomposite-window.diff</filename>
            <type>text/plain</type>
            <size>33239</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmNkMjY3Li4xNjE5ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYg
QEAKIDIwMTQtMTAtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIE1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZnJvbSBw
bGF0Zm9ybSB0byBXZWJLaXQyIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKworMjAxNC0xMC0yNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gUmVtb3ZlIEdESyBk
ZXBlbmRlbmN5IGZyb20gU2hhcmVkVGltZXJHdGsKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODA5MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IGNmOTUzMWYuLjEwYzljNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yMzMs
NyArMjMzLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9Q
bGF0Zm9ybVNjcmVlbkd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50
R3RrLmNwcAotICAgIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAK
ICAgICBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3Rr
L1NvdW5kR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNTQ0Zi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgotCi0jaWYgVVNFKE9QRU5HTCkg
JiYgUExBVEZPUk0oWDExKQotCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5o
PgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KLSNpbmNsdWRlIDxjYWlyby14
bGliLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPFdpbmRvdywgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cqPiBXaW5kb3dIYXNoTWFwOwotc3RhdGljIFdpbmRvd0hhc2hNYXAmIGdldFdpbmRvd0hhc2hN
YXAoKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFw
LCB3aW5kb3dIYXNoTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Ci19Ci0KLXN0
YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVy
WERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCosIHZvaWQqKQotewot
ICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKLSAg
ICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQot
ICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAgIFhEYW1hZ2VOb3RpZnlF
dmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+
KHhFdmVudCk7Ci0gICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hh
c2hNYXAoKTsKLSAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5m
aW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7Ci0gICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICBpLT52YWx1
ZS0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgWERhbWFnZVN1YnRyYWN0KEdES19E
SVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+
ZGFtYWdlLCBOb25lLCBOb25lKTsKLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Ci19Ci0K
LXN0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQotewotICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9u
cyA9IGZhbHNlOwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gaGFzRXh0
ZW5zaW9uczsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGludCBlcnJvckJhc2U7
Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCkpOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXks
ICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaW50IGV2ZW50QmFzZTsKLSAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihk
aXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCi0gICAg
aW50IG1ham9yLCBtaW5vcjsKLSAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZt
YWpvciwgJm1pbm9yKTsKLSAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNY
RGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKLX0KLQotUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUm
IHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCi0gICAgOiBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX3BhcmVudFdpbmRvdygwKQotICAgICwgbV9waXht
YXAoMCkKLSAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKLSAgICAsIG1fc3VyZmFj
ZSgwKQotICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQotICAgICwgbV9k
YW1hZ2UoMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKLSAgICAsIG1fZGFtYWdl
Tm90aWZ5RGF0YSgwKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElT
UExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBTY3JlZW4qIHNjcmVlbiA9IERl
ZmF1bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJhc2VkIG9u
IGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3Bv
cnRfc3VyZmFjZV9saW51eC5jYwotICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJp
YnV0ZXM7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7Ci0g
ICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCi0gICAgICAgIFJvb3RX
aW5kb3dPZlNjcmVlbihzY3JlZW4pLAotICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAx
LCAwLCAxLCAxLAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAg
SW5wdXRPdXRwdXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBDV092ZXJyaWRl
UmVkaXJlY3QsCi0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2luZG93KGRp
c3BsYXksIG1fcGFyZW50V2luZG93KTsKLQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFz
ayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9y
ZWRpcmVjdCA9IEZhbHNlOwotICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRw
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93
aW5kb3cpOwotCi0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAg
IGdka193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+
KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93
aW5kb3csIHRoaXMpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgWEV2ZW50IGV2ZW50Owot
ICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1h
c2ssICZldmVudCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVu
dC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKLSAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0
TWFudWFsKTsKLSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3cs
IFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFTU0VSVChtX2RhbWFnZSk7
Ci0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOwotCi0g
ICAgZ2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7Ci0gICAgaWYgKGdldFdpbmRv
d0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigw
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDAp
OwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNw
bGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdl
KTsKLSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgWERlc3Ryb3lX
aW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOwotICAgIGNsZWFudXBQaXhtYXBBbmRQaXht
YXBTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElT
UExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBYUmVzaXplV2lu
ZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0g
ICAgWEZsdXNoKGRpc3BsYXkpOwotCi0gICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdM
Q29udGV4dCkgewotICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKLSAgICAgICAgLy8g
VGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmst
YXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCi0gICAgICAgIC8vIHdoZXJlIGEgc3dh
cCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBw
cm9wZXJseSByZXNpemVkLgotICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0
Q3VycmVudCgpKQotICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOwotICAgIH0K
LQotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0g
dHJ1ZTsKLX0KLQotR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4
dCgpCi17Ci0gICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7Ci0K
LSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotCi0g
ICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNv
bnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQotewotICAgIGlmICghbV9w
aXhtYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3Vy
ZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7Ci0gICAgbV9waXht
YXAgPSAwOwotICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCog
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRn
ZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBt
X3N1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci0KLSAgICBtX25lZWRz
TmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRo
YXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRl
ciBhcyB0aGUgdGFyZ2V0Ci0gICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4g
YmUgMTAweCBzbG93ZXIuCi0gICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0gICAgUGl4bWFw
IG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXks
IG1fd2luZG93KTsKLSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAgICBjbGVhbnVwUGl4bWFw
QW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBYV2lu
ZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlmICghWEdldFdpbmRvd0F0dHJp
YnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgewot
ICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICBYRnJlZVBp
eG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gTnZpZGlh
IGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBh
c3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucwotICAgIC8vIG9mIGEgc2Vjb25k
IGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGlj
aCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCi0gICAgLy8gcGl4bWFwIHdpbmRvdy1i
YWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJv
dW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKLSAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBv
bmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAgICBpZiAobV9zdXJmYWNlKSB7Ci0gICAg
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNl
LmdldCgpKSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAx
KTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOwotICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOwotICAgIG1fc3VyZmFjZSA9IG5l
d1N1cmZhY2U7Ci0KLSAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQotewotICAg
IGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxi
YWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShPUEVOR0wpICYmIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODE5MDguLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2Fs
aWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3df
aAotI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotCi0jaWYgVVNFKE9QRU5H
TCkgJiYgUExBVEZPUk0oWDExKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLXR5cGVkZWYgdW5zaWduZWQg
bG9uZyBQaXhtYXA7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwotdHlwZWRlZiB1bnNp
Z25lZCBsb25nIERhbWFnZTsKLXR5cGVkZWYgdm9pZCAoKkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2
b2lkKik7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cgewotcHVibGljOgotICAgIGVudW0gR0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xD
b250ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4dCB9OwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4
dE5lZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7Ci0gICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coKTsKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXpl
OyB9Ci0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKLSAgICBHTENv
bnRleHQqIGNvbnRleHQoKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldp
ZGdldChHdGtXaWRnZXQqKTsKLSAgICBXaW5kb3cgd2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRv
dzsgfQotICAgIHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0KLSAgICB2b2lkIHNl
dERhbWFnZU5vdGlmeUNhbGxiYWNrKERhbWFnZU5vdGlmeUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lk
KiBkYXRhKQotICAgIHsKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjayA9IGNhbGxiYWNr
OwotICAgICAgICBtX2RhbWFnZU5vdGlmeURhdGEgPSBkYXRhOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0
TmVlZGVkKTsKLSAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0KLSAg
ICBJbnRTaXplIG1fc2l6ZTsKLSAgICBXaW5kb3cgbV93aW5kb3c7Ci0gICAgV2luZG93IG1fcGFy
ZW50V2luZG93OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHTENvbnRleHROZWVkZWQgbV9u
ZWVkc0NvbnRleHQ7Ci0gICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250ZXh0OwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBib29sIG1fbmVlZHNOZXdQaXhtYXBB
ZnRlclJlc2l6ZTsKLQotICAgIERhbWFnZSBtX2RhbWFnZTsKLSAgICBEYW1hZ2VOb3RpZnlDYWxs
YmFjayBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrOwotICAgIHZvaWQqIG1fZGFtYWdlTm90aWZ5RGF0
YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShPUEVOR0wp
ICYmIFBMQVRGT1JNKFgxMSkKLQotI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCAzZTY2N2U2Li5kMTg0NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzggQEAKKzIwMTQtMTAtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZnJv
bSBwbGF0Zm9ybSB0byBXZWJLaXQyIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJdCdzIG9ubHkgdXNlZCBieSBXZWJLaXRXZWJWaWV3QmFzZS4g
VGhlIGNvZGUgaGFzIGFsc28gYmVlbgorICAgICAgICBjbGVhbmVkIHVwIGFuZCBkZWFkIGNvZGUg
dGhhdCB3YXMgb25seSB1c2VkIGJ5IFdlYktpdDEgaGFzIGJlZW4KKyAgICAgICAgcmVtb3ZlZC4K
KworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29u
c3RydWN0ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdSZXN1bHRzKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZSk6
CisgICAgICAgIChyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdy5jcHAuCisgICAgICAgIChXZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6WERhbWFnZU5v
dGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjphZGQpOgorICAgICAg
ICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OlhE
YW1hZ2VOb3RpZmllcjo6ZmlsdGVyWERhbWFnZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6WERh
bWFnZU5vdGlmaWVyOjpmaWx0ZXJYRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojp4RGFtYWdlTm90
aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKToK
KyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnByZXBhcmVTdXJmYWNl
Rm9yRHJhd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpkcmF3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3cuaC4KKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c6OndpbmRvd0lEKToKKwogMjAxNC0xMC0yNCAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGlPUyBidWlsZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCA5MDNlOWZhLi5mYjM3MzIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtMjUzLDYgKzI1Myw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFVJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3BwCiAgICAgVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9k
RmlsdGVyLmNwcAorICAgIFVJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
Y3BwCiAgICAgVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKICAgICBVSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRHdGsuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVBy
b3h5R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGM2MzgwMzYuLmFlYmRlN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKICNpbmNsdWRlICJW
aWV3U3RhdGUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRG
YWN0b3J5LmgiCkBAIC03MCwxMCArNzEsNiBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHkuaCIKICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFU
Rk9STShYMTEpCi0jaW5jbHVkZSA8V2ViQ29yZS9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
PgotI2VuZGlmCi0KIC8vIGd0a193aWRnZXRfZ2V0X3NjYWxlX2ZhY3RvcigpIGFwcGVhcmVkIGlu
IEdUSyAzLjEwLCBidXQgd2UgYWxzbyBuZWVkCiAvLyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBjYWly
byBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgY2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX3NjYWxlCiAj
ZGVmaW5lIEhBVkVfR1RLX1NDQUxFX0ZBQ1RPUiBIQVZFX0NBSVJPX1NVUkZBQ0VfU0VUX0RFVklD
RV9TQ0FMRSAmJiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMCwgMCkKQEAgLTg0LDEwICs4MSw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdHlwZWRlZiBIYXNoTWFwPEd0a1dpZGdldCosIElu
dFJlY3Q+IFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcDsKIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJf
dCwgR1VuaXF1ZVB0cjxHZGtFdmVudD4+IFRvdWNoRXZlbnRzTWFwOwogCi0jaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCi12b2lkIHJlZGlyZWN0ZWRXaW5kb3dEYW1h
Z2VkQ2FsbGJhY2sodm9pZCogZGF0YSk7Ci0jZW5kaWYKLQogc3RydWN0IF9XZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUgewogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBjaGlsZHJlbjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7CkBAIC0xMzIsNyAr
MTI1LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogI2VuZGlmCiAKICNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKLSAgICBPd25QdHI8UmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiByZWRpcmVjdGVkV2luZG93OwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNDM3LDExICs0MzAsOCBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIEdka0Rpc3Bs
YXkqIGRpc3BsYXkgPSBnZGtfZGlzcGxheV9tYW5hZ2VyX2dldF9kZWZhdWx0X2Rpc3BsYXkoZ2Rr
X2Rpc3BsYXlfbWFuYWdlcl9nZXQoKSk7Ci0gICAgaWYgKEdES19JU19YMTFfRElTUExBWShkaXNw
bGF5KSkgewotICAgICAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93ID0gUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c6OmNyZWF0ZShJbnRTaXplKDEsIDEpLCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6RG9Ob3RDcmVhdGVHTENvbnRleHQpOwotICAgICAgICBpZiAocHJpdi0+cmVkaXJlY3Rl
ZFdpbmRvdykKLSAgICAgICAgICAgIHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPnNldERhbWFnZU5v
dGlmeUNhbGxiYWNrKHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2ssIG9iamVjdCk7Ci0g
ICAgfQorICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpCisgICAgICAgIHByaXYt
PnJlZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKEdE
S19ESVNQTEFZX1hESVNQTEFZKGRpc3BsYXkpLCBJbnRTaXplKDEsIDEpLCBbdmlld1dpZGdldF0g
eyBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcodmlld1dpZGdldCk7IH0pOwogI2VuZGlmCiAKICAgICBw
cml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9IDA7CkBAIC00NTYsMTQgKzQ0NiwxMiBAQCBzdGF0
aWMgYm9vbCB3ZWJraXRXZWJWaWV3UmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMo
V2ViS2l0V2ViVmlld0Jhc2UqCiAjaWYgUExBVEZPUk0oWDExKQogICAgIC8vIFRvIGF2b2lkIGZs
YXNoZXMgd2hlbiBpbml0aWFsaXppbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIHRoZSBm
aXJzdAogICAgIC8vIHRpbWUsIHdlIHdhaXQgdW50aWwgd2Uga25vdyB0aGVyZSdzIGEgZnJhbWUg
cmVhZHkgYmVmb3JlIHJlbmRlcmluZy4KLSAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRXaW5kb3cp
CisgICAgaWYgKCF3ZWJWaWV3QmFzZS0+cHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBjbGlwUmVjdC0+eCwgY2xp
cFJlY3QtPnksIGNsaXBSZWN0LT53aWR0aCwgY2xpcFJlY3QtPmhlaWdodCk7Ci0gICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlID0gcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+Y2Fpcm9TdXJmYWNl
Rm9yV2lkZ2V0KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKLSAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIHdl
YlZpZXdCYXNlLT5wcml2LT5yZWRpcmVjdGVkV2luZG93LT5kcmF3KGNyKTsKKwogICAgIHJldHVy
biB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDY1LDcgKzEwNTMsNyBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlld0Jhc2UsIFdlYkNvbgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQ
TEFURk9STShYMTEpCiAgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCi0gICAgICAgIHBy
aXYtPnBhZ2VQcm94eS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dpbmRvd0lkKHByaXYtPnJl
ZGlyZWN0ZWRXaW5kb3ctPndpbmRvd0lkKCkpOworICAgICAgICBwcml2LT5wYWdlUHJveHktPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZChwcml2LT5yZWRpcmVjdGVkV2luZG93LT53
aW5kb3dJRCgpKTsKICNlbmRpZgogCiAjaWYgSEFWRShHVEtfU0NBTEVfRkFDVE9SKQpAQCAtMTE4
MiwxMyArMTE3MCw2IEBAIEdka0V2ZW50KiB3ZWJraXRXZWJWaWV3QmFzZVRha2VDb250ZXh0TWVu
dUV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3CiAgICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdCYXNlLT5wcml2LT5jb250ZXh0TWVudUV2ZW50LnJlbGVhc2UoKTsKIH0KIAotI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQotdm9pZCByZWRpcmVjdGVk
V2luZG93RGFtYWdlZENhbGxiYWNrKHZvaWQqIGRhdGEpCi17Ci0gICAgZ3RrX3dpZGdldF9xdWV1
ZV9kcmF3KEdUS19XSURHRVQoZGF0YSkpOwotfQotI2VuZGlmCi0KIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VTZXRGb2N1cyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGJvb2wgZm9jdXNl
ZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+
cHJpdjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDYzYWJhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyLDIwMTQgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
IgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCisKKyNpbmNs
dWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lv
bnMvWGRhbWFnZS5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rr
eC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBYRGFtYWdl
Tm90aWZpZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFhEYW1hZ2VOb3RpZmllcik7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBzX2Rh
bWFnZUV2ZW50QmFzZTsKKworICAgIFhEYW1hZ2VOb3RpZmllcigpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgYWRkKFdpbmRvdyB3aW5kb3csIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBub3RpZnlG
dW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmIChtX25vdGlmeUZ1bmN0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIobnVsbHB0ciwgcmVpbnRlcnByZXRf
Y2FzdDxHZGtGaWx0ZXJGdW5jPigmZmlsdGVyWERhbWFnZUV2ZW50KSwgdGhpcyk7CisgICAgICAg
IG1fbm90aWZ5RnVuY3Rpb25zLmFkZCh3aW5kb3csIFdURjo6bW92ZShub3RpZnlGdW5jdGlvbikp
OworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlKFdpbmRvdyB3aW5kb3cpCisgICAgeworICAgICAg
ICBtX25vdGlmeUZ1bmN0aW9ucy5yZW1vdmUod2luZG93KTsKKyAgICAgICAgaWYgKG1fbm90aWZ5
RnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRl
cihudWxscHRyLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdl
RXZlbnQpLCB0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEdka0ZpbHRlclJl
dHVybiBmaWx0ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBldmVudCwgR2RrRXZlbnQqLCBYRGFt
YWdlTm90aWZpZXIqIG5vdGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vdGlmaWVyLT5m
aWx0ZXJYRXZlbnQoc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9CisKKyAgICBH
ZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWEV2ZW50KFhFdmVudCogZXZlbnQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoZXZlbnQtPnR5cGUgIT0gc19kYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90
aWZ5KQorICAgICAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICAgICAg
WERhbWFnZU5vdGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFn
ZU5vdGlmeUV2ZW50Kj4oZXZlbnQpOworICAgICAgICBpZiAoY29uc3QgYXV0byYgbm90aWZ5RnVu
Y3Rpb24gPSBtX25vdGlmeUZ1bmN0aW9ucy5nZXQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKSkgewor
ICAgICAgICAgICAgbm90aWZ5RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIFhEYW1hZ2VTdWJ0cmFj
dChldmVudC0+eGFueS5kaXNwbGF5LCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsK
KyAgICAgICAgICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworICAgIH0KKworICAgIEhhc2hNYXA8V2lu
ZG93LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fbm90aWZ5RnVuY3Rpb25zOworfTsKKworaW50
IFhEYW1hZ2VOb3RpZmllcjo6c19kYW1hZ2VFdmVudEJhc2UgPSAwOworCitzdGF0aWMgWERhbWFn
ZU5vdGlmaWVyJiB4RGFtYWdlTm90aWZpZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxYRGFtYWdlTm90aWZpZXI+IG5vdGlmaWVyOworICAgIHJldHVybiBub3RpZmllcjsKK30KKwor
c3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZShEaXNwbGF5KiBkaXNwbGF5
KQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJv
b2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm4gaGFzRXh0ZW5zaW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAg
IGludCBlcnJvckJhc2U7CisgICAgaWYgKCFYRGFtYWdlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwg
JlhEYW1hZ2VOb3RpZmllcjo6c19kYW1hZ2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZXZlbnRCYXNlOworICAgIGlmICghWENvbXBvc2l0
ZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZldmVudEJhc2UsICZlcnJvckJhc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBuZWVkIHRvIHN1cHBvcnQgWENvbXBvc2l0ZSB2
ZXJzaW9uIDAuMi4KKyAgICBpbnQgbWFqb3IsIG1pbm9yOworICAgIFhDb21wb3NpdGVRdWVyeVZl
cnNpb24oZGlzcGxheSwgJm1ham9yLCAmbWlub3IpOworICAgIGlmIChtYWpvciA8IDAgfHwgKCFt
YWpvciAmJiBtaW5vciA8IDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYXNFeHRl
bnNpb25zID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3Jl
YXRlKERpc3BsYXkqIGRpc3BsYXksIGNvbnN0IEludFNpemUmIHNpemUsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBkYW1hZ2VOb3RpZnkpCit7CisgICAgcmV0dXJuIHN1cHBvcnRzWERhbWFnZUFuZFhD
b21wb3NpdGUoZGlzcGxheSkgPyBzdGQ6Om1ha2VfdW5pcXVlPFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93PihkaXNwbGF5LCBzaXplLCBkYW1hZ2VOb3RpZnkpIDogbnVsbHB0cjsKK30KKworUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KERpc3Bs
YXkqIGRpc3BsYXksIGNvbnN0IEludFNpemUmIHNpemUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBk
YW1hZ2VOb3RpZnkpCisgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fc2l6ZShzaXpl
KQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1fcGFyZW50V2luZG93KDApCisgICAgLCBtX3Bp
eG1hcCgwKQorICAgICwgbV9kYW1hZ2UoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZShmYWxzZSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZShk
aXNwbGF5KSk7CisgICAgU2NyZWVuKiBzY3JlZW4gPSBEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5KGRp
c3BsYXkpOworCisgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2RlIGZyb20gQ2hyb21pdW06IHNy
Yy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1cmZhY2VfbGludXguY2MKKyAg
ICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIHdpbmRvd0F0dHJp
YnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBUcnVlOworICAgIG1fcGFyZW50V2luZG93ID0gWENy
ZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAgICBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVuKSwK
KyAgICAgICAgV2lkdGhPZlNjcmVlbihzY3JlZW4pICsgMSwgMCwgMSwgMSwKKyAgICAgICAgMCwK
KyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgIElucHV0T3V0cHV0LAorICAgICAgICBD
b3B5RnJvbVBhcmVudCwKKyAgICAgICAgQ1dPdmVycmlkZVJlZGlyZWN0LAorICAgICAgICAmd2lu
ZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7
CisKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBTdHJ1Y3R1cmVOb3RpZnlNYXNr
OworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBGYWxzZTsKKyAgICBt
X3dpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKKyAgICAgICAgbV9wYXJlbnRXaW5kb3cs
CisgICAgICAgIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgMCwK
KyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgIElucHV0T3V0cHV0LAorICAgICAgICBD
b3B5RnJvbVBhcmVudCwKKyAgICAgICAgQ1dFdmVudE1hc2ssCisgICAgICAgICZ3aW5kb3dBdHRy
aWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKKworICAgIHhEYW1h
Z2VOb3RpZmllcigpLmFkZChtX3dpbmRvdywgV1RGOjptb3ZlKGRhbWFnZU5vdGlmeSkpOworCisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50IGV2ZW50OworICAgICAgICBYV2luZG93RXZl
bnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAg
ICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBt
X3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlz
cGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKKyAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5k
b3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBtX2Rh
bWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhEYW1hZ2VSZXBvcnROb25F
bXB0eSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coKQoreworICAgIEFTU0VSVChtX2Rpc3BsYXkpOworICAgIEFTU0VSVChtX2Rh
bWFnZSk7CisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cp
OworCisgICAgeERhbWFnZU5vdGlmaWVyKCkucmVtb3ZlKG1fd2luZG93KTsKKworICAgIFhEYW1h
Z2VEZXN0cm95KG1fZGlzcGxheSwgbV9kYW1hZ2UpOworICAgIFhEZXN0cm95V2luZG93KG1fZGlz
cGxheSwgbV93aW5kb3cpOworICAgIFhEZXN0cm95V2luZG93KG1fZGlzcGxheSwgbV9wYXJlbnRX
aW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Cit9CisKK3ZvaWQg
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIFhSZXNpemVXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKKyAgICBYRmx1c2gobV9kaXNwbGF5KTsKKworICAgIG1fc2l6ZSA9IHNp
emU7CisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1ZTsKK30KKwordm9pZCBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2Uo
KQoreworICAgIGlmICghbV9waXhtYXApCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4
bWFwKG1fZGlzcGxheSwgbV9waXhtYXApOworICAgIG1fcGl4bWFwID0gMDsKKyAgICBtX3N1cmZh
Y2UgPSBudWxscHRyOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpwcmVw
YXJlU3VyZmFjZUZvckRyYXdpbmcoKQoreworICAgIGlmICghbV9uZWVkc05ld1BpeG1hcEFmdGVy
UmVzaXplICYmIG1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc05ld1Bp
eG1hcEFmdGVyUmVzaXplID0gZmFsc2U7CisKKyAgICBQaXhtYXAgbmV3UGl4bWFwID0gWENvbXBv
c2l0ZU5hbWVXaW5kb3dQaXhtYXAobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgaWYgKCFuZXdQ
aXhtYXApIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0
ZXM7CisgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhtX2Rpc3BsYXksIG1fd2luZG93LCAm
d2luZG93QXR0cmlidXRlcykpIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKKyAgICAgICAgWEZyZWVQaXhtYXAobV9kaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBuZXdQaXht
YXAsIHdpbmRvd0F0dHJpYnV0ZXMudmlzdWFsLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKSk7CisKKyAgICAvLyBOdmlkaWEgZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVk
aXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFzeW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rp
b25zCisgICAgLy8gb2YgYSBzZWNvbmQgYWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNv
bnRpbnVvdXMgcmVzaXppbmcgKHdoaWNoIGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMK
KyAgICAvLyBwaXhtYXAgd2luZG93LWJhY2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5p
bml0aWFsaXplZC4gVG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAorICAg
IC8vIHBpeG1hcCB0byB0aGUgbmV3IG9uZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgorICAg
IGlmIChtX3N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2IoY3IuZ2V0KCksIDEsIDEsIDEpOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7
CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdl
dCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgIH0KKworICAg
IGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgbV9waXhtYXAgPSBuZXdQaXht
YXA7CisgICAgbV9zdXJmYWNlID0gbmV3U3VyZmFjZTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6ZHJhdyhjYWlyb190KiBjcikKK3sKKyAgICBwcmVwYXJlU3VyZmFjZUZv
ckRyYXdpbmcoKTsKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAg
IGNhaXJvX2ZpbGwoY3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNmN2ZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
X2gKKyNkZWZpbmUgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKKworI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRT
aXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgorCit0eXBlZGVmIHN0cnVj
dCBfWERpc3BsYXkgRGlzcGxheTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBEYW1hZ2U7Cit0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93PiBjcmVhdGUoRGlzcGxheSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gZGFtYWdlTm90aWZ5KTsKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyhEaXNwbGF5KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBkYW1hZ2VOb3RpZnkpOworICAgIH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygp
OworCisgICAgV2luZG93IHdpbmRvd0lEKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0KKyAg
ICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lk
IGRyYXcoY2Fpcm9fdCopOworCitwcml2YXRlOgorICAgIHZvaWQgcHJlcGFyZVN1cmZhY2VGb3JE
cmF3aW5nKCk7CisgICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworCisg
ICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAg
IFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4bWFw
IG1fcGl4bWFwOworICAgIERhbWFnZSBtX2RhbWFnZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX3N1cmZhY2U7CisgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkgJiYgUExBVEZPUk0oWDExKQorCisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaAo=
</data>
<flag name="review"
          id="265260"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240541</attachid>
            <date>2014-10-28 08:44:02 -0700</date>
            <delta_ts>2014-10-30 04:13:33 -0700</delta_ts>
            <desc>Updated patch explaining all the cleanups in the changelog</desc>
            <filename>wk-redirected-xcomposite-window.diff</filename>
            <type>text/plain</type>
            <size>34482</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjY2I3MThkLi5mNWZjNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTAtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZnJvbSBw
bGF0Zm9ybSB0byBXZWJLaXQyIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAxNC0xMC0yOCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIEdESyBk
ZXBlbmRlbmN5IGZyb20gU2hhcmVkVGltZXJHdGsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5k
ZXggY2Y5NTMxZi4uMTBjOWM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIzMyw3
ICsyMzMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBs
YXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtU2NyZWVuR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRH
dGsuY3BwCi0gICAgcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAog
ICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsv
U291bmRHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTE1NDRmLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCi0KLSNpZiBVU0UoT1BFTkdMKSAm
JiBQTEFURk9STShYMTEpCi0KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+
Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgotI2luY2x1ZGUgPGNhaXJvLXhs
aWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi10eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyo+IFdpbmRvd0hhc2hNYXA7Ci1zdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0V2luZG93SGFzaE1h
cCgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFdpbmRvd0hhc2hNYXAs
IHdpbmRvd0hhc2hNYXAsICgpKTsKLSAgICByZXR1cm4gd2luZG93SGFzaE1hcDsKLX0KLQotc3Rh
dGljIGludCBnRGFtYWdlRXZlbnRCYXNlOwotc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0ZXJY
RGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50Kiwgdm9pZCopCi17Ci0g
ICAgWEV2ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQqPihnZGtYRXZlbnQpOwotICAg
IGlmICh4RXZlbnQtPnR5cGUgIT0gZ0RhbWFnZUV2ZW50QmFzZSArIFhEYW1hZ2VOb3RpZnkpCi0g
ICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOwotCi0gICAgWERhbWFnZU5vdGlmeUV2
ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFnZU5vdGlmeUV2ZW50Kj4o
eEV2ZW50KTsKLSAgICBXaW5kb3dIYXNoTWFwJiB3aW5kb3dIYXNoTWFwID0gZ2V0V2luZG93SGFz
aE1hcCgpOwotICAgIFdpbmRvd0hhc2hNYXA6Oml0ZXJhdG9yIGkgPSB3aW5kb3dIYXNoTWFwLmZp
bmQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKTsKLSAgICBpZiAoaSA9PSB3aW5kb3dIYXNoTWFwLmVu
ZCgpKQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAgIGktPnZhbHVl
LT5jYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKLSAgICBYRGFtYWdlU3VidHJhY3QoR0RLX0RJ
U1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSksIGRhbWFnZUV2ZW50LT5k
YW1hZ2UsIE5vbmUsIE5vbmUpOwotICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKLX0KLQot
c3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpCi17Ci0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBoYXNFeHRlbnNpb25z
ID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiBoYXNFeHRl
bnNpb25zOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaW50IGVycm9yQmFzZTsK
LSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSk7Ci0gICAgaWYgKCFYRGFtYWdlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwg
JmdEYW1hZ2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpbnQgZXZlbnRCYXNlOwotICAgIGlmICghWENvbXBvc2l0ZVF1ZXJ5RXh0ZW5zaW9uKGRp
c3BsYXksICZldmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBXZSBuZWVkIHRvIHN1cHBvcnQgWENvbXBvc2l0ZSB2ZXJzaW9uIDAuMi4KLSAgICBp
bnQgbWFqb3IsIG1pbm9yOwotICAgIFhDb21wb3NpdGVRdWVyeVZlcnNpb24oZGlzcGxheSwgJm1h
am9yLCAmbWlub3IpOwotICAgIGlmIChtYWpvciA8IDAgfHwgKCFtYWpvciAmJiBtaW5vciA8IDIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBoYXNFeHRlbnNpb25zID0gdHJ1ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXpl
LCBHTENvbnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQotewotICAgIHJldHVybiBzdXBwb3J0c1hE
YW1hZ2VBbmRYQ29tcG9zaXRlKCkgPyBhZG9wdFB0cihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3coc2l6ZSwgbmVlZHNDb250ZXh0KSkgOiBudWxscHRyOwotfQotCi1SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYg
c2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLSAgICA6IG1fc2l6ZShzaXplKQot
ICAgICwgbV93aW5kb3coMCkKLSAgICAsIG1fcGFyZW50V2luZG93KDApCi0gICAgLCBtX3BpeG1h
cCgwKQotICAgICwgbV9uZWVkc0NvbnRleHQobmVlZHNDb250ZXh0KQotICAgICwgbV9zdXJmYWNl
KDApCi0gICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUoZmFsc2UpCi0gICAgLCBtX2Rh
bWFnZSgwKQotICAgICwgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjaygwKQotICAgICwgbV9kYW1hZ2VO
b3RpZnlEYXRhKDApCi17Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQ
TEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFNjcmVlbiogc2NyZWVuID0gRGVm
YXVsdFNjcmVlbk9mRGlzcGxheShkaXNwbGF5KTsKLQotICAgIC8vIFRoaXMgaXMgYmFzZWQgb24g
Y29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdlX3RyYW5zcG9y
dF9zdXJmYWNlX2xpbnV4LmNjCi0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmli
dXRlczsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gVHJ1ZTsKLSAg
ICBtX3BhcmVudFdpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKLSAgICAgICAgUm9vdFdp
bmRvd09mU2NyZWVuKHNjcmVlbiksCi0gICAgICAgIFdpZHRoT2ZTY3JlZW4oc2NyZWVuKSArIDEs
IDAsIDEsIDEsCi0gICAgICAgIDAsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBJ
bnB1dE91dHB1dCwKLSAgICAgICAgQ29weUZyb21QYXJlbnQsCi0gICAgICAgIENXT3ZlcnJpZGVS
ZWRpcmVjdCwKLSAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3coZGlz
cGxheSwgbV9wYXJlbnRXaW5kb3cpOwotCi0gICAgd2luZG93QXR0cmlidXRlcy5ldmVudF9tYXNr
ID0gU3RydWN0dXJlTm90aWZ5TWFzazsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3Jl
ZGlyZWN0ID0gRmFsc2U7Ci0gICAgbV93aW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50V2luZG93LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dE91dHB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weUZyb21QYXJlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENXRXZlbnRNYXNrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7Ci0gICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3dp
bmRvdyk7Ci0KLSAgICBpZiAoZ2V0V2luZG93SGFzaE1hcCgpLmlzRW1wdHkoKSkKLSAgICAgICAg
Z2RrX3dpbmRvd19hZGRfZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4o
ZmlsdGVyWERhbWFnZUV2ZW50KSwgMCk7Ci0gICAgZ2V0V2luZG93SGFzaE1hcCgpLmFkZChtX3dp
bmRvdywgdGhpcyk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBYRXZlbnQgZXZlbnQ7Ci0g
ICAgICAgIFhXaW5kb3dFdmVudChkaXNwbGF5LCBtX3dpbmRvdywgU3RydWN0dXJlTm90aWZ5TWFz
aywgJmV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0gTWFwTm90aWZ5ICYmIGV2ZW50
LnhtYXAud2luZG93ID09IG1fd2luZG93KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1hc2spOwotICAgIFhDb21w
b3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9zaXRlUmVkaXJlY3RN
YW51YWwpOwotICAgIG1fZGFtYWdlID0gWERhbWFnZUNyZWF0ZShkaXNwbGF5LCBtX3dpbmRvdywg
WERhbWFnZVJlcG9ydE5vbkVtcHR5KTsKLX0KLQotUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpCi17Ci0gICAgQVNTRVJUKG1fZGFtYWdlKTsK
LSAgICBBU1NFUlQobV93aW5kb3cpOwotICAgIEFTU0VSVChtX3BhcmVudFdpbmRvdyk7Ci0KLSAg
ICBnZXRXaW5kb3dIYXNoTWFwKCkucmVtb3ZlKG1fd2luZG93KTsKLSAgICBpZiAoZ2V0V2luZG93
SGFzaE1hcCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZ2RrX3dpbmRvd19yZW1vdmVfZmlsdGVyKDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2ZW50KSwgMCk7
Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgWERhbWFnZURlc3Ryb3koZGlzcGxheSwgbV9kYW1hZ2Up
OwotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKLSAgICBYRGVzdHJveVdp
bmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1hcEFuZFBpeG1h
cFN1cmZhY2UoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFhSZXNpemVXaW5k
b3coZGlzcGxheSwgbV93aW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICBYRmx1c2goZGlzcGxheSk7Ci0KLSAgICBpZiAobV9uZWVkc0NvbnRleHQgPT0gQ3JlYXRlR0xD
b250ZXh0KSB7Ci0gICAgICAgIGNvbnRleHQoKS0+d2FpdE5hdGl2ZSgpOwotICAgICAgICAvLyBU
aGlzIHN3YXAgaXMgYmFzZWQgb24gY29kZSBpbiBDaHJvbWl1bS4gSXQgdHJpZXMgdG8gd29yay1h
cm91bmQgYSBidWcgaW4gdGhlIEludGVsIGRyaXZlcnMKLSAgICAgICAgLy8gd2hlcmUgYSBzd2Fw
IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMgYXJlIHBy
b3Blcmx5IHJlc2l6ZWQuCi0gICAgICAgIGlmIChjb250ZXh0KCkgPT0gR0xDb250ZXh0OjpnZXRD
dXJyZW50KCkpCi0gICAgICAgICAgICBjb250ZXh0KCktPnN3YXBCdWZmZXJzKCk7Ci0gICAgfQot
Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0
cnVlOwotfQotCi1HTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpjb250ZXh0
KCkKLXsKLSAgICBBU1NFUlQobV9uZWVkc0NvbnRleHQgPT0gQ3JlYXRlR0xDb250ZXh0KTsKLQot
ICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Ci0KLSAg
ICBBU1NFUlQobV93aW5kb3cpOwotICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dEZvcldpbmRvdyhtX3dpbmRvdywgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKLSAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpCi17Ci0gICAgaWYgKCFtX3Bp
eG1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEZyZWVQaXhtYXAoY2Fpcm9feGxpYl9zdXJm
YWNlX2dldF9kaXNwbGF5KG1fc3VyZmFjZS5nZXQoKSksIG1fcGl4bWFwKTsKLSAgICBtX3BpeG1h
cCA9IDA7Ci0gICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKLX0KLQotY2Fpcm9fc3VyZmFjZV90KiBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQotewotICAgIGlmICghbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplICYmIG1f
c3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKLQotICAgIG1fbmVlZHNO
ZXdQaXhtYXBBZnRlclJlc2l6ZSA9IGZhbHNlOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhh
dCB0aGUgbmV3IHBpeG1hcCBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgRGlzcGxheSBwb2ludGVy
IGFzIHRoZSB0YXJnZXQKLSAgICAvLyB3aWRnZXQgb3IgZWxzZSBkcmF3aW5nIHNwZWVkIGNhbiBi
ZSAxMDB4IHNsb3dlci4KLSAgICBEaXNwbGF5KiBuZXdQaXhtYXBEaXNwbGF5ID0gR0RLX0RJU1BM
QVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsKLSAgICBQaXhtYXAg
bmV3UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwg
bV93aW5kb3cpOwotICAgIGlmICghbmV3UGl4bWFwKSB7Ci0gICAgICAgIGNsZWFudXBQaXhtYXBB
bmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFhXaW5k
b3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgaWYgKCFYR2V0V2luZG93QXR0cmli
dXRlcyhuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdywgJndpbmRvd0F0dHJpYnV0ZXMpKSB7Ci0g
ICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgICAgIFhGcmVlUGl4
bWFwKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aW5kb3dBdHRyaWJ1dGVzLnZpc3VhbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBOdmlkaWEg
ZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFz
eW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25zCi0gICAgLy8gb2YgYSBzZWNvbmQg
YWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMgcmVzaXppbmcgKHdoaWNo
IGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMKLSAgICAvLyBwaXhtYXAgd2luZG93LWJh
Y2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVG8gd29yayBhcm91
bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAotICAgIC8vIHBpeG1hcCB0byB0aGUgbmV3IG9u
ZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgotICAgIGlmIChtX3N1cmZhY2UpIHsKLSAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2Uu
Z2V0KCkpKTsKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IuZ2V0KCksIDEsIDEsIDEp
OwotICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICAgICAgY2Fp
cm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgIH0KLQotICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7Ci0gICAgbV9waXhtYXAgPSBuZXdQaXhtYXA7Ci0gICAgbV9zdXJmYWNlID0gbmV3
U3VyZmFjZTsKLQotICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpCi17Ci0gICAg
aWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCi0gICAgICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJh
Y2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKE9QRU5HTCkgJiYgUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4MTkwOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorKysgL2Rl
di9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIElnYWxp
YSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19o
Ci0jZGVmaW5lICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCi0KLSNpZiBVU0UoT1BFTkdM
KSAmJiBQTEFURk9STShYMTEpCi0KLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIFBpeG1hcDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVmIHVuc2ln
bmVkIGxvbmcgRGFtYWdlOwotdHlwZWRlZiB2b2lkICgqRGFtYWdlTm90aWZ5Q2FsbGJhY2spKHZv
aWQqKTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBHTENvbnRleHROZWVkZWQgeyBDcmVhdGVHTENv
bnRleHQsIERvTm90Q3JlYXRlR0xDb250ZXh0IH07Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0
TmVlZGVkID0gQ3JlYXRlR0xDb250ZXh0KTsKLSAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdygpOwotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KLQotICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOwotICAgIEdMQ29u
dGV4dCogY29udGV4dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lk
Z2V0KEd0a1dpZGdldCopOwotICAgIFdpbmRvdyB3aW5kb3dJZCgpIHsgcmV0dXJuIG1fd2luZG93
OyB9Ci0gICAgdm9pZCBjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKLQotICAgIHZvaWQgc2V0
RGFtYWdlTm90aWZ5Q2FsbGJhY2soRGFtYWdlTm90aWZ5Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQq
IGRhdGEpCi0gICAgewotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrID0gY2FsbGJhY2s7
Ci0gICAgICAgIG1fZGFtYWdlTm90aWZ5RGF0YSA9IGRhdGE7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmLCBHTENvbnRleHRO
ZWVkZWQpOwotICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLQotICAg
IEludFNpemUgbV9zaXplOwotICAgIFdpbmRvdyBtX3dpbmRvdzsKLSAgICBXaW5kb3cgbV9wYXJl
bnRXaW5kb3c7Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwotICAgIEdMQ29udGV4dE5lZWRlZCBtX25l
ZWRzQ29udGV4dDsKLSAgICBPd25QdHI8R0xDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFm
dGVyUmVzaXplOwotCi0gICAgRGFtYWdlIG1fZGFtYWdlOwotICAgIERhbWFnZU5vdGlmeUNhbGxi
YWNrIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2s7Ci0gICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRh
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKE9QRU5HTCkg
JiYgUExBVEZPUk0oWDExKQotCi0jZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3df
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGY3ZjQ1YTkuLjQyY2VkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
OCBAQAorMjAxNC0xMC0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyBmcm9t
IHBsYXRmb3JtIHRvIFdlYktpdDIgbGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEl0J3Mgb25seSB1c2VkIGJ5IFdlYktpdFdlYlZpZXdCYXNlLiBX
aGlsZSBtb3ZpbmcgdGhlIGNvZGUgdGhlCisgICAgICAgIGZvbGxvd2luZyBjbGVhbnVwcyBoYXZl
IGJlZW4gbWFkZToKKworICAgICAgICAgIC0gVXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2Yg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAgIC0gVXNlIGEgaGVscGVy
IGNsYXNzIFhEYW1hZ2VOb3RpZmllciB0byBoYW5kbGUgdGhlIFhEYW1hZ2UKKyAgICAgICAgICAg
IGV2ZW50cyBmaWx0ZXJpbmcgYW5kIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgICAtIFVzZSBzdGQ6
OmZ1bmN0aW9uIGluc3RlYWQgb2YgcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgdGhlCisgICAgICAg
ICAgICBkYW1hZ2UgY2FsbGJhY2suCisgICAgICAgICAgLSBQYXNzIHRoZSBYIGRpc3BsYXkgdG8g
dGhlIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IGNvbnN0cnVjdG9yCisgICAgICAgICAgICBh
bmQga2VlcCBpdCBhcyBhIG1lbWJlciB0byB1c2UgaXQgZXZlcnl3aGVyZSwgaW5zdGVhZCBvZiB1
c2luZworICAgICAgICAgICAgdGhlIGRlZmF1bHQgZGlzcGxheSBpbiBzb21lIHBsYWNlcyBhbmQg
dGhlIHdpZGdldCBkaXNwbGF5IGluIG90aGVycy4KKyAgICAgICAgICAtIFBhc3MgdGhlIGRhbWFn
ZSBub3RpZnkgZnVuY3Rpb24gYXMgYSBjb250cnVjdG9yIHBhcmFtZXRlciBvZgorICAgICAgICAg
ICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBjYWxs
YmFjaworICAgICAgICAgICAgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgdGhlIG9iamVjdC4KKyAgICAg
ICAgICAtIFJlbW92ZSBHTENvbnRleHROZWVkZWQgYW5kIGFsbCB0aGUgZGVhZCBjb2RlIHJlbGF0
ZWQgdG8gdGhlCisgICAgICAgICAgICBDcmVhdGVHTENvbnRleHQgbW9kZSB0aGF0IGlzIG5vIGxv
bmdlciB1c2VkLgorICAgICAgICAgIC0gUmVuYW1lIGNhaXJvU3VyZmFjZUZvcldpZGdldCgpIGFz
IHByZXBhcmVTdXJmYWNlRm9yRHJhd2luZygpCisgICAgICAgICAgICBhbmQgbWFrZSBpdCBwcml2
YXRlLiBBZGRlZCBkcmF3KCkgcHVibGljIG1ldGhvZCB0aGF0IGNhbGxzCisgICAgICAgICAgICBw
cmVwYXJlU3VyZmFjZUZvckRyYXdpbmcoKSB0byByZW5kZXIgdGhlIHN1cmZhY2UgaW50byB0aGUg
Z2l2ZW4KKyAgICAgICAgICAgIGNhaXJvIGNvbnRleHQsIG1ha2luZyBpdCBlYXNpZXIgdG8gdXNl
LgorICAgICAgICAgIC0gd2luZG93SWQoKSBoYXMgYmVlbiByZW5hbWVkIGFzIHdpbmRvd0lEKCkg
YW5kIG1hZGUgY29uc3QuCisgICAgICAgICAgLSBVc2Ugc3RkOjp1bmlxdWVfcHRyIGluc3RlYWQg
b2YgUGFzc093blB0ci4KKyAgICAgICAgICAtIEZpeCBjb2Rpbmcgc3R5bGUgaXNzdWVzLgorCisg
ICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1
Y3RlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3UmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1Jlc3VsdHMpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKToKKyAg
ICAgICAgKHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcC4KKyAgICAgICAgKFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpYRGFtYWdlTm90aWZp
ZXIpOgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6OmFkZCk6CisgICAgICAgIChX
ZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6WERhbWFn
ZU5vdGlmaWVyOjpmaWx0ZXJYRGFtYWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdl
Tm90aWZpZXI6OmZpbHRlclhFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OnhEYW1hZ2VOb3RpZmll
cik6CisgICAgICAgIChXZWJLaXQ6OnN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UpOgorICAgICAg
ICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cHJlcGFyZVN1cmZhY2VGb3JE
cmF3aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmRy
YXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oLgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6d2luZG93SUQpOgorCiAyMDE0LTEwLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9uc0dU
Sy5jbWFrZSBhbmQgTkVXUyBmb3IgMi43LjEgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggOTAzZTlmYS4uZmIzNzMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTI1Myw2ICsyNTMsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvR2VzdHVy
ZUNvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
KyAgICBVSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAogICAgIFVJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCiAgICAgVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0R3RrLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcAppbmRleCBjNjM4MDM2Li5hZWJkZTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5h
dGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2luY2x1
ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCiAjaW5jbHVkZSAiVmlld1N0YXRlLmgi
CiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgpA
QCAtNzAsMTAgKzcxLDYgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lmgi
CiAjZW5kaWYKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQot
I2luY2x1ZGUgPFdlYkNvcmUvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaD4KLSNlbmRpZgot
CiAvLyBndGtfd2lkZ2V0X2dldF9zY2FsZV9mYWN0b3IoKSBhcHBlYXJlZCBpbiBHVEsgMy4xMCwg
YnV0IHdlIGFsc28gbmVlZAogLy8gdG8gbWFrZSBzdXJlIHdlIGhhdmUgY2Fpcm8gbmV3IGVub3Vn
aCB0byBzdXBwb3J0IGNhaXJvX3N1cmZhY2Vfc2V0X2RldmljZV9zY2FsZQogI2RlZmluZSBIQVZF
X0dUS19TQ0FMRV9GQUNUT1IgSEFWRV9DQUlST19TVVJGQUNFX1NFVF9ERVZJQ0VfU0NBTEUgJiYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMTAsIDApCkBAIC04NCwxMCArODEsNiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHR5cGVkZWYgSGFzaE1hcDxHdGtXaWRnZXQqLCBJbnRSZWN0PiBXZWJL
aXRXZWJWaWV3Q2hpbGRyZW5NYXA7CiB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIEdVbmlxdWVQ
dHI8R2RrRXZlbnQ+PiBUb3VjaEV2ZW50c01hcDsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkgJiYgUExBVEZPUk0oWDExKQotdm9pZCByZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNr
KHZvaWQqIGRhdGEpOwotI2VuZGlmCi0KIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
IHsKICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW47CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwpAQCAtMTMyLDcgKzEyNSw3IEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICNlbmRpZgogCiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCi0gICAgT3duUHRyPFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93PiByZWRpcmVjdGVkV2luZG93OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTQzNywxMSArNDMwLDggQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKICAgICBHZGtEaXNwbGF5KiBkaXNwbGF5
ID0gZ2RrX2Rpc3BsYXlfbWFuYWdlcl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21h
bmFnZXJfZ2V0KCkpOwotICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpIHsKLSAg
ICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdyA9IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpjcmVhdGUoSW50U2l6ZSgxLCAxKSwgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OkRvTm90
Q3JlYXRlR0xDb250ZXh0KTsKLSAgICAgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCi0g
ICAgICAgICAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93LT5zZXREYW1hZ2VOb3RpZnlDYWxsYmFj
ayhyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrLCBvYmplY3QpOwotICAgIH0KKyAgICBp
ZiAoR0RLX0lTX1gxMV9ESVNQTEFZKGRpc3BsYXkpKQorICAgICAgICBwcml2LT5yZWRpcmVjdGVk
V2luZG93ID0gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShHREtfRElTUExBWV9Y
RElTUExBWShkaXNwbGF5KSwgSW50U2l6ZSgxLCAxKSwgW3ZpZXdXaWRnZXRdIHsgZ3RrX3dpZGdl
dF9xdWV1ZV9kcmF3KHZpZXdXaWRnZXQpOyB9KTsKICNlbmRpZgogCiAgICAgcHJpdi0+YXV0aGVu
dGljYXRpb25EaWFsb2cgPSAwOwpAQCAtNDU2LDE0ICs0NDYsMTIgQEAgc3RhdGljIGJvb2wgd2Vi
a2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdlYlZp
ZXdCYXNlKgogI2lmIFBMQVRGT1JNKFgxMSkKICAgICAvLyBUbyBhdm9pZCBmbGFzaGVzIHdoZW4g
aW5pdGlhbGl6aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGZvciB0aGUgZmlyc3QKICAgICAv
LyB0aW1lLCB3ZSB3YWl0IHVudGlsIHdlIGtub3cgdGhlcmUncyBhIGZyYW1lIHJlYWR5IGJlZm9y
ZSByZW5kZXJpbmcuCi0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7Ci0gICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkV2luZG93KQorICAgIGlmICgh
d2ViVmlld0Jhc2UtPnByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xpcFJlY3QtPngsIGNsaXBSZWN0LT55LCBj
bGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWlnaHQpOwotICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPmNhaXJvU3VyZmFjZUZvcldpZGdldChH
VEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNy
LCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19maWxsKGNyKTsKKyAgICB3ZWJWaWV3QmFzZS0+
cHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+ZHJhdyhjcik7CisKICAgICByZXR1cm4gdHJ1ZTsKICNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2NSw3ICsxMDUzLDcgQEAgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdC
YXNlLCBXZWJDb24KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDEx
KQogICAgIGlmIChwcml2LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICBwcml2LT5wYWdlUHJv
eHktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZChwcml2LT5yZWRpcmVjdGVkV2lu
ZG93LT53aW5kb3dJZCgpKTsKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93SUQoKSk7
CiAjZW5kaWYKIAogI2lmIEhBVkUoR1RLX1NDQUxFX0ZBQ1RPUikKQEAgLTExODIsMTMgKzExNzAs
NiBAQCBHZGtFdmVudCogd2Via2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudChXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlldwogICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFz
ZS0+cHJpdi0+Y29udGV4dE1lbnVFdmVudC5yZWxlYXNlKCk7CiB9CiAKLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKLXZvaWQgcmVkaXJlY3RlZFdpbmRvd0RhbWFn
ZWRDYWxsYmFjayh2b2lkKiBkYXRhKQotewotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtf
V0lER0VUKGRhdGEpKTsKLX0KLSNlbmRpZgotCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0Rm9j
dXMoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBib29sIGZvY3VzZWQpCiB7CiAgICAg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2Fi
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiwyMDE0IElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQorCisjaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2Uu
aD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgWERhbWFnZU5vdGlmaWVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYRGFtYWdlTm90aWZpZXIpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBpbnQgc19kYW1hZ2VFdmVudEJh
c2U7CisKKyAgICBYRGFtYWdlTm90aWZpZXIoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZChXaW5kb3cgd2luZG93LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbm90aWZ5RnVuY3Rpb24pCisg
ICAgeworICAgICAgICBpZiAobV9ub3RpZnlGdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmls
dGVyRnVuYz4oJmZpbHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOworICAgICAgICBtX25vdGlmeUZ1
bmN0aW9ucy5hZGQod2luZG93LCBXVEY6Om1vdmUobm90aWZ5RnVuY3Rpb24pKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlbW92ZShXaW5kb3cgd2luZG93KQorICAgIHsKKyAgICAgICAgbV9ub3RpZnlG
dW5jdGlvbnMucmVtb3ZlKHdpbmRvdyk7CisgICAgICAgIGlmIChtX25vdGlmeUZ1bmN0aW9ucy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIobnVsbHB0ciwg
cmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPigmZmlsdGVyWERhbWFnZUV2ZW50KSwgdGhp
cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVy
WERhbWFnZUV2ZW50KEdka1hFdmVudCogZXZlbnQsIEdka0V2ZW50KiwgWERhbWFnZU5vdGlmaWVy
KiBub3RpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBub3RpZmllci0+ZmlsdGVyWEV2ZW50
KHN0YXRpY19jYXN0PFhFdmVudCo+KGV2ZW50KSk7CisgICAgfQorCisgICAgR2RrRmlsdGVyUmV0
dXJuIGZpbHRlclhFdmVudChYRXZlbnQqIGV2ZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGV2ZW50LT50eXBlICE9IHNfZGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlmeSkKKyAgICAg
ICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAgICAgIFhEYW1hZ2VOb3Rp
ZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVu
dCo+KGV2ZW50KTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8mIG5vdGlmeUZ1bmN0aW9uID0gbV9u
b3RpZnlGdW5jdGlvbnMuZ2V0KGRhbWFnZUV2ZW50LT5kcmF3YWJsZSkpIHsKKyAgICAgICAgICAg
IG5vdGlmeUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBYRGFtYWdlU3VidHJhY3QoZXZlbnQtPnhh
bnkuZGlzcGxheSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CisgICAgICAgICAg
ICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
R0RLX0ZJTFRFUl9DT05USU5VRTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFdpbmRvdywgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+PiBtX25vdGlmeUZ1bmN0aW9uczsKK307CisKK2ludCBYRGFtYWdlTm90
aWZpZXI6OnNfZGFtYWdlRXZlbnRCYXNlID0gMDsKKworc3RhdGljIFhEYW1hZ2VOb3RpZmllciYg
eERhbWFnZU5vdGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8WERhbWFnZU5v
dGlmaWVyPiBub3RpZmllcjsKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisKK3N0YXRpYyBib29s
IHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoRGlzcGxheSogZGlzcGxheSkKK3sKKyAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIGhhc0V4dGVu
c2lvbnMgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIGhh
c0V4dGVuc2lvbnM7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpbnQgZXJyb3JC
YXNlOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZYRGFtYWdlTm90
aWZpZXI6OnNfZGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVu
c2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIu
CisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3Bs
YXksICZtYWpvciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlu
b3IgPCAyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFzRXh0ZW5zaW9ucyA9IHRy
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShEaXNwbGF5
KiBkaXNwbGF5LCBjb25zdCBJbnRTaXplJiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGFt
YWdlTm90aWZ5KQoreworICAgIHJldHVybiBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKGRp
c3BsYXkpID8gc3RkOjptYWtlX3VuaXF1ZTxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4oZGlz
cGxheSwgc2l6ZSwgZGFtYWdlTm90aWZ5KSA6IG51bGxwdHI7Cit9CisKK1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhEaXNwbGF5KiBkaXNwbGF5
LCBjb25zdCBJbnRTaXplJiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGFtYWdlTm90aWZ5
KQorICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1f
d2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwgbV9waXhtYXAoMCkKKyAg
ICAsIG1fZGFtYWdlKDApCisgICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUoZmFsc2Up
Cit7CisgICAgQVNTRVJUKHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoZGlzcGxheSkpOwor
ICAgIFNjcmVlbiogc2NyZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxheShkaXNwbGF5KTsKKwor
ICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9j
b21tb24vZ3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCisgICAgWFNldFdpbmRv
d0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJy
aWRlX3JlZGlyZWN0ID0gVHJ1ZTsKKyAgICBtX3BhcmVudFdpbmRvdyA9IFhDcmVhdGVXaW5kb3co
ZGlzcGxheSwKKyAgICAgICAgUm9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksCisgICAgICAgIFdp
ZHRoT2ZTY3JlZW4oc2NyZWVuKSArIDEsIDAsIDEsIDEsCisgICAgICAgIDAsCisgICAgICAgIENv
cHlGcm9tUGFyZW50LAorICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJl
bnQsCisgICAgICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworCisgICAgd2lu
ZG93QXR0cmlidXRlcy5ldmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFzazsKKyAgICB3aW5k
b3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7CisgICAgbV93aW5kb3cgPSBY
Q3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgIG1fcGFyZW50V2luZG93LAorICAgICAgICAw
LCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCisgICAgICAgIDAsCisgICAgICAgIENv
cHlGcm9tUGFyZW50LAorICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJl
bnQsCisgICAgICAgIENXRXZlbnRNYXNrLAorICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7Cisg
ICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisKKyAgICB4RGFtYWdlTm90aWZpZXIo
KS5hZGQobV93aW5kb3csIFdURjo6bW92ZShkYW1hZ2VOb3RpZnkpKTsKKworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIFhFdmVudCBldmVudDsKKyAgICAgICAgWFdpbmRvd0V2ZW50KGRpc3BsYXks
IG1fd2luZG93LCBTdHJ1Y3R1cmVOb3RpZnlNYXNrLCAmZXZlbnQpOworICAgICAgICBpZiAoZXZl
bnQudHlwZSA9PSBNYXBOb3RpZnkgJiYgZXZlbnQueG1hcC53aW5kb3cgPT0gbV93aW5kb3cpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgWFNlbGVjdElucHV0KGRpc3BsYXksIG1fd2lu
ZG93LCBOb0V2ZW50TWFzayk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXks
IG1fd2luZG93LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAgbV9kYW1hZ2UgPSBYRGFt
YWdlQ3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOworfQor
CitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
KCkKK3sKKyAgICBBU1NFUlQobV9kaXNwbGF5KTsKKyAgICBBU1NFUlQobV9kYW1hZ2UpOworICAg
IEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsKKworICAgIHhE
YW1hZ2VOb3RpZmllcigpLnJlbW92ZShtX3dpbmRvdyk7CisKKyAgICBYRGFtYWdlRGVzdHJveSht
X2Rpc3BsYXksIG1fZGFtYWdlKTsKKyAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2lu
ZG93KTsKKyAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKyAg
ICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworfQorCit2b2lkIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBYUmVz
aXplV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CisgICAgWEZsdXNoKG1fZGlzcGxheSk7CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1f
bmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IHRydWU7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBp
ZiAoIW1fcGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChtX2Rpc3Bs
YXksIG1fcGl4bWFwKTsKKyAgICBtX3BpeG1hcCA9IDA7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0
cjsKK30KKwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cHJlcGFyZVN1cmZhY2VG
b3JEcmF3aW5nKCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBt
X3N1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZSA9IGZhbHNlOworCisgICAgUGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2lu
ZG93UGl4bWFwKG1fZGlzcGxheSwgbV93aW5kb3cpOworICAgIGlmICghbmV3UGl4bWFwKSB7Cisg
ICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlm
ICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobV9kaXNwbGF5LCBtX3dpbmRvdywgJndpbmRvd0F0dHJp
YnV0ZXMpKSB7CisgICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAg
ICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJl
ZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbmV3UGl4bWFwLCB3aW5kb3dB
dHRyaWJ1dGVzLnZpc3VhbCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisg
ICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2lu
ZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8v
IG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJl
c2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4
bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQu
IFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAg
dG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJm
YWNlKSB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdl
dCgpLCAxLCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7
CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4
bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1f
c3VyZmFjZSA9IG5ld1N1cmZhY2U7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OmRyYXcoY2Fpcm9fdCogY3IpCit7CisgICAgcHJlcGFyZVN1cmZhY2VGb3JEcmF3aW5nKCk7
CisgICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjciwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19maWxs
KGNyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzZjdmZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5l
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpICYmIFBMQVRGT1JNKFgxMSkKKworI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5
IERpc3BsYXk7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwordHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFBpeG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7CitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4g
Y3JlYXRlKERpc3BsYXkqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IGRhbWFnZU5vdGlmeSk7CisgICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coRGlz
cGxheSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGFt
YWdlTm90aWZ5KTsKKyAgICB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKKworICAgIFdp
bmRvdyB3aW5kb3dJRCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9CisgICAgdm9pZCByZXNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBkcmF3KGNhaXJv
X3QqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHByZXBhcmVTdXJmYWNlRm9yRHJhd2luZygpOwor
ICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAgIERpc3BsYXkq
IG1fZGlzcGxheTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBXaW5kb3cgbV93
aW5kb3c7CisgICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3BpeG1hcDsK
KyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJm
YWNlOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBM
QVRGT1JNKFgxMSkKKworI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240542</attachid>
            <date>2014-10-28 08:44:40 -0700</date>
            <delta_ts>2014-10-28 08:44:57 -0700</delta_ts>
            <desc>Cleanup diffs to make it easier to review</desc>
            <filename>wk-redirected-xcomposite-clenaups.diff</filename>
            <type>text/plain</type>
            <size>14506</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuaAppbmRleCA5YzgxOTA4Li5mYzNmN2ZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMu
TC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgogICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDU4ICsyNyw0NCBAQAogI2lmbmRlZiAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAogI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaAogCi0jaWYgVVNFKE9QRU5HTCkgJiYgUExBVEZPUk0oWDExKQorI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogCi0jaW5jbHVkZSAiR0xDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgog
Cit0eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKK3R5cGVkZWYgdW5zaWduZWQgbG9u
ZyBEYW1hZ2U7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwogdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFdpbmRvdzsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEYW1hZ2U7Ci10eXBlZGVmIHZv
aWQgKCpEYW1hZ2VOb3RpZnlDYWxsYmFjaykodm9pZCopOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cg
ewogcHVibGljOgotICAgIGVudW0gR0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBE
b05vdENyZWF0ZUdMQ29udGV4dCB9OwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9
IENyZWF0ZUdMQ29udGV4dCk7Ci0gICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3coKTsKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAg
ICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKLSAgICBHTENvbnRleHQqIGNv
bnRleHQoKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtX
aWRnZXQqKTsKLSAgICBXaW5kb3cgd2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRvdzsgfQotICAg
IHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKERpc3BsYXkqLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRhbWFnZU5vdGlmeSk7Cisg
ICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coRGlzcGxheSosIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGFtYWdlTm90aWZ5KTsKKyAgICB+UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3coKTsKIAotICAgIHZvaWQgc2V0RGFtYWdlTm90aWZ5Q2FsbGJh
Y2soRGFtYWdlTm90aWZ5Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCi0gICAgewotICAg
ICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgICAgIG1fZGFtYWdl
Tm90aWZ5RGF0YSA9IGRhdGE7Ci0gICAgfQorICAgIFdpbmRvdyB3aW5kb3dJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2luZG93OyB9CisgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsKIAogcHJpdmF0ZToKLSAgICBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVlZGVk
KTsKKyAgICB2b2lkIHByZXBhcmVTdXJmYWNlRm9yRHJhd2luZygpOwogICAgIHZvaWQgY2xlYW51
cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKIAotICAgIEludFNpemUgbV9zaXplOworICAgIERp
c3BsYXkqIG1fZGlzcGxheTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICAgICBXaW5k
b3cgbV93aW5kb3c7CiAgICAgV2luZG93IG1fcGFyZW50V2luZG93OwogICAgIFBpeG1hcCBtX3Bp
eG1hcDsKLSAgICBHTENvbnRleHROZWVkZWQgbV9uZWVkc0NvbnRleHQ7Ci0gICAgT3duUHRyPEdM
Q29udGV4dD4gbV9jb250ZXh0OworICAgIERhbWFnZSBtX2RhbWFnZTsKICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CiAgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJS
ZXNpemU7Ci0KLSAgICBEYW1hZ2UgbV9kYW1hZ2U7Ci0gICAgRGFtYWdlTm90aWZ5Q2FsbGJhY2sg
bV9kYW1hZ2VOb3RpZnlDYWxsYmFjazsKLSAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURhdGE7CiB9
OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2Vu
ZGlmIC8vIFVTRShPUEVOR0wpICYmIFBMQVRGT1JNKFgxMSkKKyNlbmRpZiAvLyBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKIAogI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKaW5kZXggZGUxNTQ0Zi4uMDYzYWJh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsMjAxNCBJZ2Fs
aWEgUy5MLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oIgogCi0jaWYgVVNFKE9QRU5HTCkgJiYgUExBVEZPUk0oWDExKQorI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogCiAjaW5jbHVkZSA8WDEx
L2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgogI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1h
Z2UuaD4KQEAgLTM2LDM1ICszNiw2OSBAQAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxn
dGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLXR5cGVkZWYgSGFzaE1hcDxXaW5kb3csIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
Kj4gV2luZG93SGFzaE1hcDsKLXN0YXRpYyBXaW5kb3dIYXNoTWFwJiBnZXRXaW5kb3dIYXNoTWFw
KCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoV2luZG93SGFzaE1hcCwg
d2luZG93SGFzaE1hcCwgKCkpOwotICAgIHJldHVybiB3aW5kb3dIYXNoTWFwOwotfQorbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXN0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtG
aWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtF
dmVudCosIHZvaWQqKQotewotICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50
Kj4oZ2RrWEV2ZW50KTsKLSAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2Ug
KyBYRGFtYWdlTm90aWZ5KQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKK2Ns
YXNzIFhEYW1hZ2VOb3RpZmllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWERhbWFnZU5v
dGlmaWVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgaW50IHNfZGFtYWdlRXZlbnRCYXNlOworCisgICAgWERhbWFnZU5vdGlmaWVyKCkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBhZGQoV2luZG93IHdpbmRvdywgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IG5vdGlmeUZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm90aWZ5RnVuY3Rpb25z
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcihudWxscHRyLCBy
ZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KCZmaWx0ZXJYRGFtYWdlRXZlbnQpLCB0aGlz
KTsKKyAgICAgICAgbV9ub3RpZnlGdW5jdGlvbnMuYWRkKHdpbmRvdywgV1RGOjptb3ZlKG5vdGlm
eUZ1bmN0aW9uKSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUoV2luZG93IHdpbmRvdykKKyAg
ICB7CisgICAgICAgIG1fbm90aWZ5RnVuY3Rpb25zLnJlbW92ZSh3aW5kb3cpOworICAgICAgICBp
ZiAobV9ub3RpZnlGdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgZ2RrX3dpbmRvd19y
ZW1vdmVfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oJmZp
bHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
R2RrRmlsdGVyUmV0dXJuIGZpbHRlclhEYW1hZ2VFdmVudChHZGtYRXZlbnQqIGV2ZW50LCBHZGtF
dmVudCosIFhEYW1hZ2VOb3RpZmllciogbm90aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4g
bm90aWZpZXItPmZpbHRlclhFdmVudChzdGF0aWNfY2FzdDxYRXZlbnQqPihldmVudCkpOworICAg
IH0KKworICAgIEdka0ZpbHRlclJldHVybiBmaWx0ZXJYRXZlbnQoWEV2ZW50KiBldmVudCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSAhPSBzX2RhbWFnZUV2ZW50QmFzZSAr
IFhEYW1hZ2VOb3RpZnkpCisgICAgICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsK
KworICAgICAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRhbWFnZUV2ZW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPihldmVudCk7CisgICAgICAgIGlmIChjb25zdCBhdXRv
JiBub3RpZnlGdW5jdGlvbiA9IG1fbm90aWZ5RnVuY3Rpb25zLmdldChkYW1hZ2VFdmVudC0+ZHJh
d2FibGUpKSB7CisgICAgICAgICAgICBub3RpZnlGdW5jdGlvbigpOworICAgICAgICAgICAgWERh
bWFnZVN1YnRyYWN0KGV2ZW50LT54YW55LmRpc3BsYXksIGRhbWFnZUV2ZW50LT5kYW1hZ2UsIE5v
bmUsIE5vbmUpOworICAgICAgICAgICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworICAgICAg
ICB9CiAKLSAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRhbWFnZUV2ZW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPih4RXZlbnQpOwotICAgIFdpbmRvd0hhc2hNYXAmIHdp
bmRvd0hhc2hNYXAgPSBnZXRXaW5kb3dIYXNoTWFwKCk7Ci0gICAgV2luZG93SGFzaE1hcDo6aXRl
cmF0b3IgaSA9IHdpbmRvd0hhc2hNYXAuZmluZChkYW1hZ2VFdmVudC0+ZHJhd2FibGUpOwotICAg
IGlmIChpID09IHdpbmRvd0hhc2hNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBHREtfRklMVEVS
X0NPTlRJTlVFOworICAgIH0KIAotICAgIGktPnZhbHVlLT5jYWxsRGFtYWdlTm90aWZ5Q2FsbGJh
Y2soKTsKLSAgICBYRGFtYWdlU3VidHJhY3QoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSksIGRhbWFnZUV2ZW50LT5kYW1hZ2UsIE5vbmUsIE5vbmUpOwotICAg
IHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKyAgICBIYXNoTWFwPFdpbmRvdywgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+PiBtX25vdGlmeUZ1bmN0aW9uczsKK307CisKK2ludCBYRGFtYWdlTm90aWZp
ZXI6OnNfZGFtYWdlRXZlbnRCYXNlID0gMDsKKworc3RhdGljIFhEYW1hZ2VOb3RpZmllciYgeERh
bWFnZU5vdGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8WERhbWFnZU5vdGlm
aWVyPiBub3RpZmllcjsKKyAgICByZXR1cm4gbm90aWZpZXI7CiB9CiAKLXN0YXRpYyBib29sIHN1
cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQorc3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdl
QW5kWENvbXBvc2l0ZShEaXNwbGF5KiBkaXNwbGF5KQogewogICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNlOwpA
QCAtNzUsOCArMTA5LDcgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0
ZSgpCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogCiAgICAgaW50IGVycm9yQmFzZTsKLSAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2Rl
ZmF1bHQoKSk7Ci0gICAgaWYgKCFYRGFtYWdlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmdEYW1h
Z2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQorICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9u
KGRpc3BsYXksICZYRGFtYWdlTm90aWZpZXI6OnNfZGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50IGV2ZW50QmFzZTsKQEAgLTkzLDI0
ICsxMjYsMjEgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKK3N0ZDo6dW5pcXVlX3B0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShE
aXNwbGF5KiBkaXNwbGF5LCBjb25zdCBJbnRTaXplJiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gZGFtYWdlTm90aWZ5KQogewotICAgIHJldHVybiBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9z
aXRlKCkgPyBhZG9wdFB0cihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSwgbmVl
ZHNDb250ZXh0KSkgOiBudWxscHRyOworICAgIHJldHVybiBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29t
cG9zaXRlKGRpc3BsYXkpID8gc3RkOjptYWtlX3VuaXF1ZTxSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdz4oZGlzcGxheSwgc2l6ZSwgZGFtYWdlTm90aWZ5KSA6IG51bGxwdHI7CiB9CiAKLVJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJ
bnRTaXplJiBzaXplLCBHTENvbnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQotICAgIDogbV9zaXpl
KHNpemUpCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3coRGlzcGxheSogZGlzcGxheSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGRhbWFnZU5vdGlmeSkKKyAgICA6IG1fZGlzcGxheShkaXNwbGF5KQorICAgICwg
bV9zaXplKHNpemUpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9wYXJlbnRXaW5kb3coMCkK
ICAgICAsIG1fcGl4bWFwKDApCi0gICAgLCBtX25lZWRzQ29udGV4dChuZWVkc0NvbnRleHQpCi0g
ICAgLCBtX3N1cmZhY2UoMCkKLSAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxz
ZSkKICAgICAsIG1fZGFtYWdlKDApCi0gICAgLCBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKDApCi0g
ICAgLCBtX2RhbWFnZU5vdGlmeURhdGEoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZShmYWxzZSkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BM
QVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgQVNTRVJUKHN1cHBvcnRzWERhbWFn
ZUFuZFhDb21wb3NpdGUoZGlzcGxheSkpOwogICAgIFNjcmVlbiogc2NyZWVuID0gRGVmYXVsdFNj
cmVlbk9mRGlzcGxheShkaXNwbGF5KTsKIAogICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gY29kZSBm
cm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJm
YWNlX2xpbnV4LmNjCkBAIC0xMzAsMTkgKzE2MCwxNyBAQCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0xD
bwogICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7
CiAgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOwogICAgIG1f
d2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
V0V2ZW50TWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOworICAgICAgICBtX3BhcmVudFdpbmRvdywKKyAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLAorICAgICAgICAwLAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBDV0V2
ZW50TWFzaywKKyAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwogICAgIFhNYXBXaW5kb3coZGlz
cGxheSwgbV93aW5kb3cpOwogCi0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0Zp
bHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hhc2hNYXAo
KS5hZGQobV93aW5kb3csIHRoaXMpOworICAgIHhEYW1hZ2VOb3RpZmllcigpLmFkZChtX3dpbmRv
dywgV1RGOjptb3ZlKGRhbWFnZU5vdGlmeSkpOwogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAg
WEV2ZW50IGV2ZW50OwpAQCAtMTU3LDg4ICsxODUsNTkgQEAgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUsIEdM
Q28KIAogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdygpCiB7CisgICAgQVNTRVJUKG1fZGlzcGxheSk7CiAgICAgQVNTRVJUKG1fZGFtYWdlKTsK
ICAgICBBU1NFUlQobV93aW5kb3cpOwogICAgIEFTU0VSVChtX3BhcmVudFdpbmRvdyk7CiAKLSAg
ICBnZXRXaW5kb3dIYXNoTWFwKCkucmVtb3ZlKG1fd2luZG93KTsKLSAgICBpZiAoZ2V0V2luZG93
SGFzaE1hcCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZ2RrX3dpbmRvd19yZW1vdmVfZmlsdGVyKDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2ZW50KSwgMCk7
CisgICAgeERhbWFnZU5vdGlmaWVyKCkucmVtb3ZlKG1fd2luZG93KTsKIAotICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgp
KTsKLSAgICBYRGFtYWdlRGVzdHJveShkaXNwbGF5LCBtX2RhbWFnZSk7Ci0gICAgWERlc3Ryb3lX
aW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKKyAgICBYRGFtYWdlRGVzdHJveShtX2Rpc3BsYXksIG1fZGFtYWdlKTsK
KyAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAgICBYRGVzdHJveVdp
bmRvdyhtX2Rpc3BsYXksIG1fcGFyZW50V2luZG93KTsKICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4
bWFwU3VyZmFjZSgpOwogfQogCiB2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJ
U1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgWFJlc2l6ZVdp
bmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQot
ICAgIFhGbHVzaChkaXNwbGF5KTsKLQotICAgIGlmIChtX25lZWRzQ29udGV4dCA9PSBDcmVhdGVH
TENvbnRleHQpIHsKLSAgICAgICAgY29udGV4dCgpLT53YWl0TmF0aXZlKCk7Ci0gICAgICAgIC8v
IFRoaXMgc3dhcCBpcyBiYXNlZCBvbiBjb2RlIGluIENocm9taXVtLiBJdCB0cmllcyB0byB3b3Jr
LWFyb3VuZCBhIGJ1ZyBpbiB0aGUgSW50ZWwgZHJpdmVycwotICAgICAgICAvLyB3aGVyZSBhIHN3
YXAgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZnJvbnQgYW5kIGJhY2sgYnVmZmVycyBhcmUg
cHJvcGVybHkgcmVzaXplZC4KLSAgICAgICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6Omdl
dEN1cnJlbnQoKSkKLSAgICAgICAgICAgIGNvbnRleHQoKS0+c3dhcEJ1ZmZlcnMoKTsKLSAgICB9
CisgICAgWFJlc2l6ZVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIFhGbHVzaChtX2Rpc3BsYXkpOwogCiAgICAgbV9zaXplID0gc2l6
ZTsKICAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOwogfQogCi1HTENvbnRl
eHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpjb250ZXh0KCkKLXsKLSAgICBBU1NFUlQo
bV9uZWVkc0NvbnRleHQgPT0gQ3JlYXRlR0xDb250ZXh0KTsKLQotICAgIGlmIChtX2NvbnRleHQp
Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Ci0KLSAgICBBU1NFUlQobV93aW5kb3cp
OwotICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhtX3dp
bmRvdywgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKLSAgICByZXR1cm4gbV9jb250ZXh0
LmdldCgpOwotfQotCiB2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjbGVhbnVwUGl4
bWFwQW5kUGl4bWFwU3VyZmFjZSgpCiB7CiAgICAgaWYgKCFtX3BpeG1hcCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgWEZyZWVQaXhtYXAoY2Fpcm9feGxpYl9zdXJmYWNlX2dldF9kaXNwbGF5KG1f
c3VyZmFjZS5nZXQoKSksIG1fcGl4bWFwKTsKKyAgICBYRnJlZVBpeG1hcChtX2Rpc3BsYXksIG1f
cGl4bWFwKTsKICAgICBtX3BpeG1hcCA9IDA7CiAgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKIH0K
IAotY2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJm
YWNlRm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6cHJlcGFyZVN1cmZhY2VGb3JEcmF3aW5nKCkKIHsKICAgICBpZiAoIW1fbmVlZHNO
ZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX3N1cmZh
Y2UuZ2V0KCk7CisgICAgICAgIHJldHVybjsKIAogICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZSA9IGZhbHNlOwogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmV3IHBpeG1h
cCBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgRGlzcGxheSBwb2ludGVyIGFzIHRoZSB0YXJnZXQK
LSAgICAvLyB3aWRnZXQgb3IgZWxzZSBkcmF3aW5nIHNwZWVkIGNhbiBiZSAxMDB4IHNsb3dlci4K
LSAgICBEaXNwbGF5KiBuZXdQaXhtYXBEaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3Rr
X3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsKLSAgICBQaXhtYXAgbmV3UGl4bWFwID0gWENv
bXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3cpOworICAg
IFBpeG1hcCBuZXdQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChtX2Rpc3BsYXks
IG1fd2luZG93KTsKICAgICBpZiAoIW5ld1BpeG1hcCkgewogICAgICAgICBjbGVhbnVwUGl4bWFw
QW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgaWYg
KCFYR2V0V2luZG93QXR0cmlidXRlcyhuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdywgJndpbmRv
d0F0dHJpYnV0ZXMpKSB7CisgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhtX2Rpc3BsYXks
IG1fd2luZG93LCAmd2luZG93QXR0cmlidXRlcykpIHsKICAgICAgICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKLSAgICAgICAgWEZyZWVQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwg
bmV3UGl4bWFwKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlz
cGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2Vf
Y3JlYXRlKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aW5kb3dBdHRyaWJ1dGVzLnZpc3VhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBuZXdQ
aXhtYXAsIHdpbmRvd0F0dHJpYnV0ZXMudmlzdWFsLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7CiAKICAgICAvLyBOdmlkaWEgZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIg
cmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFzeW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJh
Y3Rpb25zCiAgICAgLy8gb2YgYSBzZWNvbmQgYWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5n
IGNvbnRpbnVvdXMgcmVzaXppbmcgKHdoaWNoIGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0
ZXMKQEAgLTI1NSwxNiArMjU0LDE4IEBAIGNhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpCiAgICAgY2xl
YW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKICAgICBtX3BpeG1hcCA9IG5ld1BpeG1hcDsK
ICAgICBtX3N1cmZhY2UgPSBuZXdTdXJmYWNlOwotCi0gICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQo
KTsKIH0KIAotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2FsbERhbWFnZU5vdGlm
eUNhbGxiYWNrKCkKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmRyYXcoY2Fpcm9f
dCogY3IpCiB7Ci0gICAgaWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCi0gICAgICAgIG1fZGFt
YWdlTm90aWZ5Q2FsbGJhY2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKKyAgICBwcmVwYXJlU3VyZmFj
ZUZvckRyYXdpbmcoKTsKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwor
ICAgIGNhaXJvX2ZpbGwoY3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBVU0UoT1BFTkdMKSAmJiBQTEFURk9STShYMTEpCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240665</attachid>
            <date>2014-10-30 04:13:33 -0700</date>
            <delta_ts>2014-11-07 09:32:56 -0800</delta_ts>
            <desc>Updated patch according to review comments</desc>
            <filename>wk2-redirected-xcomposite-window.diff</filename>
            <type>text/plain</type>
            <size>33864</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYzcyZmExLi41OTU4YmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTAtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZnJvbSBw
bGF0Zm9ybSB0byBXZWJLaXQyIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAxNC0xMC0zMCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgRm9ybURhdGFCdWlsZGVyIHNo
b3VsZCBub3QgdXNlIERvY3VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGNmOTUz
MWYuLjEwYzljNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yMzMsNyArMjMzLDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
dGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVNj
cmVlbkd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAot
ICAgIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKICAgICBwbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NvdW5kR3Rr
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNTQ0Zi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgotCi0jaWYgVVNFKE9QRU5HTCkgJiYgUExBVEZP
Uk0oWDExKQotCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1
ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KLSNpbmNsdWRlIDxjYWlyby14bGliLmg+Ci0j
aW5jbHVkZSA8Z2RrL2dka3guaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dHlwZWRlZiBIYXNoTWFwPFdpbmRvdywgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqPiBXaW5k
b3dIYXNoTWFwOwotc3RhdGljIFdpbmRvd0hhc2hNYXAmIGdldFdpbmRvd0hhc2hNYXAoKQotewot
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFwLCB3aW5kb3dI
YXNoTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Ci19Ci0KLXN0YXRpYyBpbnQg
Z0RhbWFnZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2
ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCosIHZvaWQqKQotewotICAgIFhFdmVu
dCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKLSAgICBpZiAoeEV2
ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQotICAgICAgICBy
ZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAgIFhEYW1hZ2VOb3RpZnlFdmVudCogZGFt
YWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhFdmVudCk7
Ci0gICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hhc2hNYXAoKTsK
LSAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5maW5kKGRhbWFn
ZUV2ZW50LT5kcmF3YWJsZSk7Ci0gICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICBpLT52YWx1ZS0+Y2FsbERh
bWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgWERhbWFnZVN1YnRyYWN0KEdES19ESVNQTEFZX1hE
SVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBO
b25lLCBOb25lKTsKLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Ci19Ci0KLXN0YXRpYyBi
b29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQotewotICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNl
OwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gaGFzRXh0ZW5zaW9uczsK
LQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGludCBlcnJvckJhc2U7Ci0gICAgRGlz
cGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZh
dWx0KCkpOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZnRGFtYWdl
RXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50
IGV2ZW50QmFzZTsKLSAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAm
ZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
V2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCi0gICAgaW50IG1ham9y
LCBtaW5vcjsKLSAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpvciwgJm1p
bm9yKTsKLSAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0xDb250
ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNYRGFtYWdlQW5k
WENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNp
emUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKLX0KLQotUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUsIEdM
Q29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1f
d2luZG93KDApCi0gICAgLCBtX3BhcmVudFdpbmRvdygwKQotICAgICwgbV9waXhtYXAoMCkKLSAg
ICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKLSAgICAsIG1fc3VyZmFjZSgwKQotICAg
ICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQotICAgICwgbV9kYW1hZ2UoMCkK
LSAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5RGF0
YSgwKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtf
ZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBTY3JlZW4qIHNjcmVlbiA9IERlZmF1bHRTY3Jl
ZW5PZkRpc3BsYXkoZGlzcGxheSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJv
bSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFj
ZV9saW51eC5jYwotICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0g
ICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7Ci0gICAgbV9wYXJl
bnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCi0gICAgICAgIFJvb3RXaW5kb3dPZlNj
cmVlbihzY3JlZW4pLAotICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAx
LAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgSW5wdXRPdXRw
dXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBDV092ZXJyaWRlUmVkaXJlY3Qs
Ci0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKLQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVj
dHVyZU5vdGlmeU1hc2s7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9
IEZhbHNlOwotICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJv
bVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwot
Ci0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5k
b3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhE
YW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRo
aXMpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgWEV2ZW50IGV2ZW50OwotICAgICAgICBY
V2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVu
dCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndp
bmRvdyA9PSBtX3dpbmRvdykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBYU2VsZWN0
SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKLSAgICBYQ29tcG9zaXRlUmVk
aXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsK
LSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhEYW1hZ2VS
ZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFTU0VSVChtX2RhbWFnZSk7Ci0gICAgQVNT
RVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOwotCi0gICAgZ2V0V2lu
ZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7Ci0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAo
KS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigwLCByZWludGVy
cHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotCi0gICAg
RGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOwotICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsKLSAgICBY
RGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgWERlc3Ryb3lXaW5kb3coZGlz
cGxheSwgbV9wYXJlbnRXaW5kb3cpOwotICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNl
KCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElT
UExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBYUmVzaXplV2luZG93KGRpc3Bs
YXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgWEZsdXNo
KGRpc3BsYXkpOwotCi0gICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCkg
ewotICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKLSAgICAgICAgLy8gVGhpcyBzd2Fw
IGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEg
YnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCi0gICAgICAgIC8vIHdoZXJlIGEgc3dhcCBpcyBuZWNl
c3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9wZXJseSBy
ZXNpemVkLgotICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgp
KQotICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOwotICAgIH0KLQotICAgIG1f
c2l6ZSA9IHNpemU7Ci0gICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1ZTsKLX0K
LQotR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4dCgpCi17Ci0g
ICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7Ci0KLSAgICBpZiAo
bV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotCi0gICAgQVNTRVJU
KG1fd2luZG93KTsKLSAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JX
aW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQotewotICAgIGlmICghbV9waXhtYXApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRf
ZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7Ci0gICAgbV9waXhtYXAgPSAwOwot
ICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLXsKLSAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2Up
Ci0gICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci0KLSAgICBtX25lZWRzTmV3UGl4bWFw
QWZ0ZXJSZXNpemUgPSBmYWxzZTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5l
dyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBhcyB0aGUg
dGFyZ2V0Ci0gICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUgMTAweCBz
bG93ZXIuCi0gICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQ
TEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0gICAgUGl4bWFwIG5ld1BpeG1h
cCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93
KTsKLSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBYV2luZG93QXR0cmli
dXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3
UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgewotICAgICAgICBj
bGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICBYRnJlZVBpeG1hcChuZXdQ
aXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxp
Yl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gTnZpZGlhIGRyaXZlcnMg
c2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25v
dXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucwotICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVh
Y2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFu
dGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCi0gICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyks
IHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMg
aXNzdWUsIHBhaW50IHRoZSBvbGQKLSAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJv
cGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAgICBpZiAobV9zdXJmYWNlKSB7Ci0gICAgICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsKLSAgICAg
ICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgp
OwotICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOwotICAgIG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7
Ci0KLSAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQotewotICAgIGlmIChtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrKQotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFt
YWdlTm90aWZ5RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShPUEVOR0wpICYmIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDljODE5MDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotI2RlZmlu
ZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotCi0jaWYgVVNFKE9QRU5HTCkgJiYgUExB
VEZPUk0oWDExKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXht
YXA7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwotdHlwZWRlZiB1bnNpZ25lZCBsb25n
IERhbWFnZTsKLXR5cGVkZWYgdm9pZCAoKkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lkKik7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cg
ewotcHVibGljOgotICAgIGVudW0gR0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBE
b05vdENyZWF0ZUdMQ29udGV4dCB9OwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9
IENyZWF0ZUdMQ29udGV4dCk7Ci0gICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3coKTsKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAg
ICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKLSAgICBHTENvbnRleHQqIGNv
bnRleHQoKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtX
aWRnZXQqKTsKLSAgICBXaW5kb3cgd2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRvdzsgfQotICAg
IHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0KLSAgICB2b2lkIHNldERhbWFnZU5v
dGlmeUNhbGxiYWNrKERhbWFnZU5vdGlmeUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhKQot
ICAgIHsKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAg
ICBtX2RhbWFnZU5vdGlmeURhdGEgPSBkYXRhOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVlZGVkKTsK
LSAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0KLSAgICBJbnRTaXpl
IG1fc2l6ZTsKLSAgICBXaW5kb3cgbV93aW5kb3c7Ci0gICAgV2luZG93IG1fcGFyZW50V2luZG93
OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHTENvbnRleHROZWVkZWQgbV9uZWVkc0NvbnRl
eHQ7Ci0gICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBib29sIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6
ZTsKLQotICAgIERhbWFnZSBtX2RhbWFnZTsKLSAgICBEYW1hZ2VOb3RpZnlDYWxsYmFjayBtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrOwotICAgIHZvaWQqIG1fZGFtYWdlTm90aWZ5RGF0YTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShPUEVOR0wpICYmIFBMQVRG
T1JNKFgxMSkKLQotI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCBiOTBhNjQ2Li5hNTg1NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIw
MTQtMTAtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIE1vdmUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZnJvbSBwbGF0Zm9y
bSB0byBXZWJLaXQyIGxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzgwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCdzIG9ubHkgdXNlZCBieSBXZWJLaXRXZWJWaWV3QmFzZS4gV2hpbGUgbW92
aW5nIHRoZSBjb2RlIHRoZQorICAgICAgICBmb2xsb3dpbmcgY2xlYW51cHMgaGF2ZSBiZWVuIG1h
ZGU6CisKKyAgICAgICAgICAtIFVzZSBOZXZlckRlc3Ryb3llZCBpbnN0ZWFkIG9mIERFUFJFQ0FU
RURfREVGSU5FX1NUQVRJQ19MT0NBTC4KKyAgICAgICAgICAtIFVzZSBhIGhlbHBlciBjbGFzcyBY
RGFtYWdlTm90aWZpZXIgdG8gaGFuZGxlIHRoZSBYRGFtYWdlCisgICAgICAgICAgICBldmVudHMg
ZmlsdGVyaW5nIGFuZCBub3RpZmljYXRpb24uCisgICAgICAgICAgLSBVc2Ugc3RkOjpmdW5jdGlv
biBpbnN0ZWFkIG9mIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHRoZQorICAgICAgICAgICAgZGFt
YWdlIGNhbGxiYWNrLgorICAgICAgICAgIC0gUGFzcyB0aGUgWCBkaXNwbGF5IHRvIHRoZSBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdyBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgYW5kIGtlZXAg
aXQgYXMgYSBtZW1iZXIgdG8gdXNlIGl0IGV2ZXJ5d2hlcmUsIGluc3RlYWQgb2YgdXNpbmcKKyAg
ICAgICAgICAgIHRoZSBkZWZhdWx0IGRpc3BsYXkgaW4gc29tZSBwbGFjZXMgYW5kIHRoZSB3aWRn
ZXQgZGlzcGxheSBpbiBvdGhlcnMuCisgICAgICAgICAgLSBQYXNzIHRoZSBkYW1hZ2Ugbm90aWZ5
IGZ1bmN0aW9uIGFzIGEgY29udHJ1Y3RvciBwYXJhbWV0ZXIgb2YKKyAgICAgICAgICAgIFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93IGluc3RlYWQgb2Ygc2V0dGluZyB0aGUgY2FsbGJhY2sKKyAg
ICAgICAgICAgIHJpZ2h0IGFmdGVyIGNyZWF0aW5nIHRoZSBvYmplY3QuCisgICAgICAgICAgLSBS
ZW1vdmUgR0xDb250ZXh0TmVlZGVkIGFuZCBhbGwgdGhlIGRlYWQgY29kZSByZWxhdGVkIHRvIHRo
ZQorICAgICAgICAgICAgQ3JlYXRlR0xDb250ZXh0IG1vZGUgdGhhdCBpcyBubyBsb25nZXIgdXNl
ZC4KKyAgICAgICAgICAtIFJlbmFtZSBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoKSBhcyBzdXJmYWNl
KCkuCisgICAgICAgICAgLSB3aW5kb3dJZCgpIGhhcyBiZWVuIHJlbmFtZWQgYXMgd2luZG93SUQo
KSBhbmQgbWFkZSBjb25zdC4KKyAgICAgICAgICAtIFVzZSBzdGQ6OnVuaXF1ZV9wdHIgaW5zdGVh
ZCBvZiBQYXNzT3duUHRyLgorICAgICAgICAgIC0gRml4IGNvZGluZyBzdHlsZSBpc3N1ZXMuCisK
KyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnN0
cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUmVzdWx0cyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UpOgor
ICAgICAgICAocmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cuY3BwLgorICAgICAgICAoV2ViS2l0OjpYRGFtYWdlTm90aWZpZXI6OlhEYW1hZ2VOb3Rp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OlhEYW1hZ2VOb3RpZmllcjo6YWRkKToKKyAgICAgICAg
KFdlYktpdDo6WERhbWFnZU5vdGlmaWVyOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpYRGFt
YWdlTm90aWZpZXI6OmZpbHRlclhEYW1hZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlhEYW1h
Z2VOb3RpZmllcjo6ZmlsdGVyWEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6eERhbWFnZU5vdGlm
aWVyKToKKyAgICAgICAgKFdlYktpdDo6c3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpzdXJmYWNlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuaC4KKyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OndpbmRv
d0lEKToKKwogMjAxNC0xMC0yOSAgSHVuc2VvcCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgW0Nvb3JkaW5hdGVkR3JhcGhpY3NdIFVzZSBtb2Rlcm4gZm9yLWxvb3Bz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDE4NzQ4YzYuLmFiZWE4ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNTMsNiArMjUzLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2d0ay9FeHBlcmltZW50YWxGZWF0dXJlcy5jcHAKICAg
ICBVSVByb2Nlc3MvZ3RrL0dlc3R1cmVDb250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9ndGsv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCisgICAgVUlQcm9jZXNzL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAogICAg
IFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKICAgICBVSVByb2Nlc3MvZ3RrL1dlYkNv
bnRleHRNZW51UHJveHlHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYzYzODAzNi4uZTZjNjZjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgog
I2luY2x1ZGUgIlZpZXdTdGF0ZS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJFdmVudEZhY3RvcnkuaCIKQEAgLTcwLDEwICs3MSw2IEBACiAjaW5jbHVkZSAiV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpICYmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlIDxXZWJDb3JlL1JlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93Lmg+Ci0jZW5kaWYKLQogLy8gZ3RrX3dpZGdldF9nZXRfc2NhbGVfZmFjdG9yKCkg
YXBwZWFyZWQgaW4gR1RLIDMuMTAsIGJ1dCB3ZSBhbHNvIG5lZWQKIC8vIHRvIG1ha2Ugc3VyZSB3
ZSBoYXZlIGNhaXJvIG5ldyBlbm91Z2ggdG8gc3VwcG9ydCBjYWlyb19zdXJmYWNlX3NldF9kZXZp
Y2Vfc2NhbGUKICNkZWZpbmUgSEFWRV9HVEtfU0NBTEVfRkFDVE9SIEhBVkVfQ0FJUk9fU1VSRkFD
RV9TRVRfREVWSUNFX1NDQUxFICYmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEwLCAwKQpAQCAtODQs
MTAgKzgxLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB0eXBlZGVmIEhhc2hNYXA8R3Rr
V2lkZ2V0KiwgSW50UmVjdD4gV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOwogdHlwZWRlZiBIYXNo
TWFwPHVpbnQzMl90LCBHVW5pcXVlUHRyPEdka0V2ZW50Pj4gVG91Y2hFdmVudHNNYXA7CiAKLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKLXZvaWQgcmVkaXJlY3Rl
ZFdpbmRvd0RhbWFnZWRDYWxsYmFjayh2b2lkKiBkYXRhKTsKLSNlbmRpZgotCiBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwIGNo
aWxkcmVuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsK
QEAgLTEzMiw3ICsxMjUsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAj
ZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQotICAg
IE93blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gcmVkaXJlY3RlZFdpbmRvdzsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRX
aW5kb3c7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC00MzcsMTEgKzQz
MCw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ29uc3RydWN0ZWQoR09iamVjdCog
b2JqZWN0KQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShYMTEpCiAg
ICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRf
ZGlzcGxheShnZGtfZGlzcGxheV9tYW5hZ2VyX2dldCgpKTsKLSAgICBpZiAoR0RLX0lTX1gxMV9E
SVNQTEFZKGRpc3BsYXkpKSB7Ci0gICAgICAgIHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cgPSBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKEludFNpemUoMSwgMSksIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpEb05vdENyZWF0ZUdMQ29udGV4dCk7Ci0gICAgICAgIGlmIChwcml2
LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+
c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2socmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjaywg
b2JqZWN0KTsKLSAgICB9CisgICAgaWYgKEdES19JU19YMTFfRElTUExBWShkaXNwbGF5KSkKKyAg
ICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdyA9IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpjcmVhdGUoR0RLX0RJU1BMQVlfWERJU1BMQVkoZGlzcGxheSksIEludFNpemUoMSwgMSksIFt2
aWV3V2lkZ2V0XSB7IGd0a193aWRnZXRfcXVldWVfZHJhdyh2aWV3V2lkZ2V0KTsgfSk7CiAjZW5k
aWYKIAogICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nID0gMDsKQEAgLTQ2MCwxMCArNDUw
LDEyIEBAIHN0YXRpYyBib29sIHdlYmtpdFdlYlZpZXdSZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUmVzdWx0cyhXZWJLaXRXZWJWaWV3QmFzZSoKICAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRX
aW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNhaXJvX3JlY3RhbmdsZShjciwg
Y2xpcFJlY3QtPngsIGNsaXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWln
aHQpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IHByaXYtPnJlZGlyZWN0ZWRXaW5k
b3ctPmNhaXJvU3VyZmFjZUZvcldpZGdldChHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7Ci0gICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19m
aWxsKGNyKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gcHJpdi0+cmVkaXJl
Y3RlZFdpbmRvdy0+c3VyZmFjZSgpKSB7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xp
cFJlY3QtPngsIGNsaXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWlnaHQp
OworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOwor
ICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNl
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2NSw3ICsxMDU3LDcgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
LCBXZWJDb24KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQog
ICAgIGlmIChwcml2LT5yZWRpcmVjdGVkV2luZG93KQotICAgICAgICBwcml2LT5wYWdlUHJveHkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZChwcml2LT5yZWRpcmVjdGVkV2luZG93
LT53aW5kb3dJZCgpKTsKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5zZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93SUQoKSk7CiAj
ZW5kaWYKIAogI2lmIEhBVkUoR1RLX1NDQUxFX0ZBQ1RPUikKQEAgLTExODIsMTMgKzExNzQsNiBA
QCBHZGtFdmVudCogd2Via2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudChXZWJLaXRX
ZWJWaWV3QmFzZSogd2Via2l0V2ViVmlldwogICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZS0+
cHJpdi0+Y29udGV4dE1lbnVFdmVudC5yZWxlYXNlKCk7CiB9CiAKLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpICYmIFBMQVRGT1JNKFgxMSkKLXZvaWQgcmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRD
YWxsYmFjayh2b2lkKiBkYXRhKQotewotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lE
R0VUKGRhdGEpKTsKLX0KLSNlbmRpZgotCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0Rm9jdXMo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBib29sIGZvY3VzZWQpCiB7CiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmM4ZWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwyMDE0IElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKKworI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQorCisjaW5jbHVkZSA8WDExL2V4dGVu
c2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4K
KyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRl
IDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgWERhbWFnZU5vdGlmaWVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShYRGFtYWdlTm90aWZpZXIpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBpbnQgc19kYW1hZ2VFdmVudEJhc2U7
CisKKyAgICBYRGFtYWdlTm90aWZpZXIoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGFkZChX
aW5kb3cgd2luZG93LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbm90aWZ5RnVuY3Rpb24pCisgICAg
eworICAgICAgICBpZiAobV9ub3RpZnlGdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
Z2RrX3dpbmRvd19hZGRfZmlsdGVyKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVy
RnVuYz4oJmZpbHRlclhEYW1hZ2VFdmVudCksIHRoaXMpOworICAgICAgICBtX25vdGlmeUZ1bmN0
aW9ucy5hZGQod2luZG93LCBXVEY6Om1vdmUobm90aWZ5RnVuY3Rpb24pKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlbW92ZShXaW5kb3cgd2luZG93KQorICAgIHsKKyAgICAgICAgbV9ub3RpZnlGdW5j
dGlvbnMucmVtb3ZlKHdpbmRvdyk7CisgICAgICAgIGlmIChtX25vdGlmeUZ1bmN0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIobnVsbHB0ciwgcmVp
bnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPigmZmlsdGVyWERhbWFnZUV2ZW50KSwgdGhpcyk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERh
bWFnZUV2ZW50KEdka1hFdmVudCogZXZlbnQsIEdka0V2ZW50KiwgWERhbWFnZU5vdGlmaWVyKiBu
b3RpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBub3RpZmllci0+ZmlsdGVyWEV2ZW50KHN0
YXRpY19jYXN0PFhFdmVudCo+KGV2ZW50KSk7CisgICAgfQorCisgICAgR2RrRmlsdGVyUmV0dXJu
IGZpbHRlclhFdmVudChYRXZlbnQqIGV2ZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGV2
ZW50LT50eXBlICE9IHNfZGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlmeSkKKyAgICAgICAg
ICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAgICAgIFhEYW1hZ2VOb3RpZnlF
dmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+
KGV2ZW50KTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8mIG5vdGlmeUZ1bmN0aW9uID0gbV9ub3Rp
ZnlGdW5jdGlvbnMuZ2V0KGRhbWFnZUV2ZW50LT5kcmF3YWJsZSkpIHsKKyAgICAgICAgICAgIG5v
dGlmeUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBYRGFtYWdlU3VidHJhY3QoZXZlbnQtPnhhbnku
ZGlzcGxheSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CisgICAgICAgICAgICBy
ZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gR0RL
X0ZJTFRFUl9DT05USU5VRTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFdpbmRvdywgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+PiBtX25vdGlmeUZ1bmN0aW9uczsKK307CisKK2ludCBYRGFtYWdlTm90aWZp
ZXI6OnNfZGFtYWdlRXZlbnRCYXNlID0gMDsKKworc3RhdGljIFhEYW1hZ2VOb3RpZmllciYgeERh
bWFnZU5vdGlmaWVyKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8WERhbWFnZU5vdGlm
aWVyPiBub3RpZmllcjsKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisKK3N0YXRpYyBib29sIHN1
cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoRGlzcGxheSogZGlzcGxheSkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIGhhc0V4dGVuc2lv
bnMgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIGhhc0V4
dGVuc2lvbnM7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpbnQgZXJyb3JCYXNl
OworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZYRGFtYWdlTm90aWZp
ZXI6OnNfZGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lv
bihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCisg
ICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXks
ICZtYWpvciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3Ig
PCAyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShEaXNwbGF5KiBk
aXNwbGF5LCBjb25zdCBJbnRTaXplJiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZGFtYWdl
Tm90aWZ5KQoreworICAgIHJldHVybiBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKGRpc3Bs
YXkpID8gc3RkOjp1bmlxdWVfcHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PihuZXcgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3coZGlzcGxheSwgc2l6ZSwgZGFtYWdlTm90aWZ5KSkgOiBu
dWxscHRyOworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coRGlzcGxheSogZGlzcGxheSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGRhbWFnZU5vdGlmeSkKKyAgICA6IG1fZGlzcGxheShkaXNwbGF5KQor
ICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9wYXJlbnRXaW5k
b3coMCkKKyAgICAsIG1fcGl4bWFwKDApCisgICAgLCBtX2RhbWFnZSgwKQorICAgICwgbV9uZWVk
c05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQoreworICAgIFNjcmVlbiogc2NyZWVuID0gRGVm
YXVsdFNjcmVlbk9mRGlzcGxheShkaXNwbGF5KTsKKworICAgIC8vIFRoaXMgaXMgYmFzZWQgb24g
Y29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdlX3RyYW5zcG9y
dF9zdXJmYWNlX2xpbnV4LmNjCisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmli
dXRlczsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gVHJ1ZTsKKyAg
ICBtX3BhcmVudFdpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKKyAgICAgICAgUm9vdFdp
bmRvd09mU2NyZWVuKHNjcmVlbiksCisgICAgICAgIFdpZHRoT2ZTY3JlZW4oc2NyZWVuKSArIDEs
IDAsIDEsIDEsCisgICAgICAgIDAsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBJ
bnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgIENXT3ZlcnJpZGVS
ZWRpcmVjdCwKKyAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlz
cGxheSwgbV9wYXJlbnRXaW5kb3cpOworCisgICAgd2luZG93QXR0cmlidXRlcy5ldmVudF9tYXNr
ID0gU3RydWN0dXJlTm90aWZ5TWFzazsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3Jl
ZGlyZWN0ID0gRmFsc2U7CisgICAgbV93aW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisg
ICAgICAgIG1fcGFyZW50V2luZG93LAorICAgICAgICAwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksCisgICAgICAgIDAsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBJ
bnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgIENXRXZlbnRNYXNr
LAorICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBt
X3dpbmRvdyk7CisKKyAgICB4RGFtYWdlTm90aWZpZXIoKS5hZGQobV93aW5kb3csIFdURjo6bW92
ZShkYW1hZ2VOb3RpZnkpKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFhFdmVudCBldmVu
dDsKKyAgICAgICAgWFdpbmRvd0V2ZW50KGRpc3BsYXksIG1fd2luZG93LCBTdHJ1Y3R1cmVOb3Rp
ZnlNYXNrLCAmZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkgJiYg
ZXZlbnQueG1hcC53aW5kb3cgPT0gbV93aW5kb3cpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgWFNlbGVjdElucHV0KGRpc3BsYXksIG1fd2luZG93LCBOb0V2ZW50TWFzayk7CisgICAg
WENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7CisgICAgbV9kYW1hZ2UgPSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1fd2lu
ZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkKK3sKKyAgICBBU1NFUlQobV9kaXNw
bGF5KTsKKyAgICBBU1NFUlQobV9kYW1hZ2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAg
QVNTRVJUKG1fcGFyZW50V2luZG93KTsKKworICAgIHhEYW1hZ2VOb3RpZmllcigpLnJlbW92ZSht
X3dpbmRvdyk7CisKKyAgICBYRGFtYWdlRGVzdHJveShtX2Rpc3BsYXksIG1fZGFtYWdlKTsKKyAg
ICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAgICBYRGVzdHJveVdpbmRv
dyhtX2Rpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBYUmVzaXplV2luZG93KG1fZGlzcGxheSwgbV93
aW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgWEZsdXNoKG1fZGlzcGxh
eSk7CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6
ZSA9IHRydWU7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFudXBQ
aXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fcGl4bWFwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChtX2Rpc3BsYXksIG1fcGl4bWFwKTsKKyAgICBtX3Bp
eG1hcCA9IDA7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKK30KKworY2Fpcm9fc3VyZmFjZV90
KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6c3VyZmFjZSgpCit7CisgICAgaWYgKCFtX25l
ZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9zdXJmYWNlKQorICAgICAgICByZXR1cm4gbV9z
dXJmYWNlLmdldCgpOworCisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gZmFsc2U7
CisKKyAgICBQaXhtYXAgbmV3UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobV9k
aXNwbGF5LCBtX3dpbmRvdyk7CisgICAgaWYgKCFuZXdQaXhtYXApIHsKKyAgICAgICAgY2xlYW51
cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgWFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICBpZiAoIVhH
ZXRXaW5kb3dBdHRyaWJ1dGVzKG1fZGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVz
KSkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBY
RnJlZVBpeG1hcChtX2Rpc3BsYXksIG5ld1BpeG1hcCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbmV3UGl4bWFwLCB3aW5k
b3dBdHRyaWJ1dGVzLnZpc3VhbCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwor
CisgICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQg
d2luZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAg
IC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3Vz
IHJlc2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8g
cGl4bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6
ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXht
YXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9z
dXJmYWNlKSB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNy
LmdldCgpLCAxLCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwg
MCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAg
IG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7CisgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKSAmJiBQTEFURk9STShYMTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjhlMjMwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5lICBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBM
QVRGT1JNKFgxMSkKKworI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVmUHRyQ2Fpcm8uaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7
Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFBp
eG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKERp
c3BsYXkqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGRh
bWFnZU5vdGlmeSk7CisgICAgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7CisKKyAgICBX
aW5kb3cgd2luZG93SUQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQorICAgIHZvaWQgcmVz
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UoKTsKKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhEaXNwbGF5
KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBkYW1hZ2VO
b3RpZnkpOworICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAg
IERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBX
aW5kb3cgbV93aW5kb3c7CisgICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBt
X3BpeG1hcDsKKyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gbV9zdXJmYWNlOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpICYmIFBMQVRGT1JNKFgxMSkKKworI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93X2gK
</data>
<flag name="review"
          id="265448"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>