<?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>144517</bug_id>
          
          <creation_ts>2015-05-02 01:08:06 -0700</creation_ts>
          <short_desc>[GTK][EFL] Unify platform display handling</short_desc>
          <delta_ts>2015-05-04 03:38:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>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>
          <dependson>144563</dependson>
          <blocked>144521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1091057</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-02 01:08:06 -0700</bug_when>
    <thetext>There are several places were we are handling the X display connection:

 - GLContext::sharedX11Display() creates a new connection.
 - X11Helper::nativeDisplay() creates a new connection.
 - BackingStoreBackendCairoX11 uses the GTK+ shared connection.
 - NetscapePlugin::x11HostDisplay() uses the GTK+/ecore shared connection
 - The rest of the GTK+ code uses the shared GTK+ connection

And then we also have WaylandDisplay and the code to check if the current display is wayland or X11.

We could unify all these to share the same connection to reduce the amount of ifdefs and ensure a single connection. That will also allow us to use &quot;smart pointers&quot; for the X resources that need a Display* to be freed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091058</commentid>
    <comment_count>1</comment_count>
      <attachid>252223</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-02 01:22:43 -0700</bug_when>
    <thetext>Created attachment 252223
Patch

Zan, I haven&apos;t checked the Wayland part builds/works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091059</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-02 01:24:49 -0700</bug_when>
    <thetext>Attachment 252223 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/PlatformDisplay.h:42:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/wayland/PlatformDisplayWayland.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 18 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>1091101</commentid>
    <comment_count>3</comment_count>
      <attachid>252223</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-05-02 09:34:29 -0700</bug_when>
    <thetext>Comment on attachment 252223
Patch

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

Excellent clean up.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.h:65
&gt; +#define SPECIALIZE_TYPE_TRAITS_PLATFORM_DISPLAY(ToClassName, DisplayType) \
&gt; +SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToClassName) \
&gt; +    static bool isType(const WebCore::PlatformDisplay&amp; display) { return display.type() == WebCore::PlatformDisplay::Type::DisplayType; } \
&gt; +SPECIALIZE_TYPE_TRAITS_END()

This is cool.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:242
&gt;  #if PLATFORM(X11)
&gt; -        Display* display = GLContext::sharedX11Display();
&gt; -        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(display));
&gt; +        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(downcast&lt;PlatformDisplayX11&gt;(sharedDisplay).native()));
&gt;  #elif PLATFORM(WAYLAND)
&gt; -        EGLDisplay display = WaylandDisplay::instance()-&gt;eglDisplay();
&gt; -        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(display));
&gt; +        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast&lt;PlatformDisplayWayland&gt;(sharedDisplay).native()));
&gt;  #endif

These are #ifs but they really should both co-exist. It&apos;s unrelated to this patch though.

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp:317
&gt;  {
&gt; -    // Display connection will only be broken at program shutdown.
&gt; -    static DisplayConnection displayConnection;
&gt; -    return displayConnection.display();
&gt; +    return downcast&lt;PlatformDisplayX11&gt;(PlatformDisplay::sharedDisplay()).native();

Maybe these helpers can gradually move into PlatformDisplayX11.

&gt; Source/WebCore/platform/graphics/wayland/PlatformDisplayWayland.h:36
&gt; +#include &lt;wayland-client.h&gt;
&gt; +
&gt; +#include &lt;wayland-egl.h&gt;

Nit: Extra empty line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091191</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-03 00:40:35 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 252223 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252223&amp;action=review
&gt; 
&gt; Excellent clean up.

Thanks.

&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.h:65
&gt; &gt; +#define SPECIALIZE_TYPE_TRAITS_PLATFORM_DISPLAY(ToClassName, DisplayType) \
&gt; &gt; +SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToClassName) \
&gt; &gt; +    static bool isType(const WebCore::PlatformDisplay&amp; display) { return display.type() == WebCore::PlatformDisplay::Type::DisplayType; } \
&gt; &gt; +SPECIALIZE_TYPE_TRAITS_END()
&gt; 
&gt; This is cool.

Yes :-)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:242
&gt; &gt;  #if PLATFORM(X11)
&gt; &gt; -        Display* display = GLContext::sharedX11Display();
&gt; &gt; -        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(display));
&gt; &gt; +        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(downcast&lt;PlatformDisplayX11&gt;(sharedDisplay).native()));
&gt; &gt;  #elif PLATFORM(WAYLAND)
&gt; &gt; -        EGLDisplay display = WaylandDisplay::instance()-&gt;eglDisplay();
&gt; &gt; -        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(display));
&gt; &gt; +        m_glDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(downcast&lt;PlatformDisplayWayland&gt;(sharedDisplay).native()));
&gt; &gt;  #endif
&gt; 
&gt; These are #ifs but they really should both co-exist. It&apos;s unrelated to this
&gt; patch though.

Right, I tried to not change any logic in this patch. But the PlatformDisplay class has been thought with the idea of supporting X11 and wayland support in the same binary, indeed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp:317
&gt; &gt;  {
&gt; &gt; -    // Display connection will only be broken at program shutdown.
&gt; &gt; -    static DisplayConnection displayConnection;
&gt; &gt; -    return displayConnection.display();
&gt; &gt; +    return downcast&lt;PlatformDisplayX11&gt;(PlatformDisplay::sharedDisplay()).native();
&gt; 
&gt; Maybe these helpers can gradually move into PlatformDisplayX11.

Yes, probably, but it seems to me that some of them are very specific to surfaces implementation, we could make it even more generic, though.

&gt; &gt; Source/WebCore/platform/graphics/wayland/PlatformDisplayWayland.h:36
&gt; &gt; +#include &lt;wayland-client.h&gt;
&gt; &gt; +
&gt; &gt; +#include &lt;wayland-egl.h&gt;
&gt; 
&gt; Nit: Extra empty line here.

I just copied this file, but yes, I&apos;ll fix it anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091197</commentid>
    <comment_count>5</comment_count>
      <attachid>252223</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-03 02:15:38 -0700</bug_when>
    <thetext>Comment on attachment 252223
Patch

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

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:49
&gt; +PlatformDisplay* PlatformDisplay::createPlatformDisplay()

Any reason why this doesn&apos;t use std::make_unique&lt;&gt;() and return a std::unique_ptr&lt;&gt;?

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:77
&gt; +std::unique_ptr&lt;PlatformDisplay&gt; PlatformDisplay::s_sharedDisplay;

I&apos;d prefer this moved off the class and into the PlatformDisplay::sharedDisplay() method.
Perhaps it would be wise to also use std::call_once(), given that in the future this might be accessed from multiple threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091205</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-03 04:43:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 252223 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252223&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:49
&gt; &gt; +PlatformDisplay* PlatformDisplay::createPlatformDisplay()
&gt; 
&gt; Any reason why this doesn&apos;t use std::make_unique&lt;&gt;() and return a
&gt; std::unique_ptr&lt;&gt;?

Not really, I changed that several times, it was initially a reference until I realized it could return nullptr.

&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:77
&gt; &gt; +std::unique_ptr&lt;PlatformDisplay&gt; PlatformDisplay::s_sharedDisplay;
&gt; 
&gt; I&apos;d prefer this moved off the class and into the
&gt; PlatformDisplay::sharedDisplay() method.
&gt; Perhaps it would be wise to also use std::call_once(), given that in the
&gt; future this might be accessed from multiple threads.

Sure, very good points, I&apos;ll update the patch. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091206</commentid>
    <comment_count>7</comment_count>
      <attachid>252265</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-03 04:44:16 -0700</bug_when>
    <thetext>Created attachment 252265
Patch for landing

Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091207</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-03 04:45:37 -0700</bug_when>
    <thetext>Attachment 252265 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/PlatformDisplay.h:42:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/PlatformDisplay.cpp:82:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/wayland/PlatformDisplayWayland.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 18 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>1091217</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-03 08:22:00 -0700</bug_when>
    <thetext>Committed r183731: &lt;http://trac.webkit.org/changeset/183731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091323</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-05-04 01:08:32 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Committed r183731: &lt;http://trac.webkit.org/changeset/183731&gt;

It broke the WinCairo build, cc-ing the port maintainers.

..\platform\graphics\egl\GLContextEGL.cpp(69): error C2653: &apos;PlatformDisplay&apos; : is not a class or namespace name [C:\Users\Alex\Documents\WinCairoBot\win-cairo-release\build\Source\WebCore\WebCore.vcxproj\WebCore.vcxproj]
..\platform\graphics\egl\GLContextEGL.cpp(69): error C3536: &apos;sharedDisplay&apos;: cannot be used before it is initialized [C:\Users\Alex\Documents\WinCairoBot\win-cairo-release\build\Source\WebCore\WebCore.vcxproj\WebCore.vcxproj]
..\platform\graphics\egl\GLContextEGL.cpp(69): error C2064: term does not evaluate to a function taking 0 arguments [C:\Users\Alex\Documents\WinCairoBot\win-cairo-release\build\Source\WebCore\WebCore.vcxproj\WebCore.vcxproj]</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252223</attachid>
            <date>2015-05-02 01:22:43 -0700</date>
            <delta_ts>2015-05-03 04:44:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-shared-display.diff</filename>
            <type>text/plain</type>
            <size>56463</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2N2M0ZjEzLi41MzM4N2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTUtMDUtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW0VGTF0gVW5pZnkgcGxhdGZvcm0gZGlzcGxheSBoYW5kbGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJl
IHNldmVyYWwgcGxhY2VzIHdlcmUgd2UgYXJlIGhhbmRsaW5nIHRoZSBYIGRpc3BsYXkKKyAgICAg
ICAgY29ubmVjdGlvbjoKKworICAgICAgICAtIEdMQ29udGV4dDo6c2hhcmVkWDExRGlzcGxheSgp
IGNyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbi4KKyAgICAgICAgLSBYMTFIZWxwZXI6Om5hdGl2ZURp
c3BsYXkoKSBjcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24uCisgICAgICAgIC0gQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvWDExIHVzZXMgdGhlIEdUSysgc2hhcmVkIGNvbm5lY3Rpb24uCisgICAgICAg
IC0gTmV0c2NhcGVQbHVnaW46OngxMUhvc3REaXNwbGF5KCkgdXNlcyB0aGUgR1RLKy9lY29yZSBz
aGFyZWQgY29ubmVjdGlvbgorICAgICAgICAtIFRoZSByZXN0IG9mIHRoZSBHVEsrIGNvZGUgdXNl
cyB0aGUgc2hhcmVkIEdUSysgY29ubmVjdGlvbgorCisgICAgICAgIEFuZCB0aGVuIHdlIGFsc28g
aGF2ZSBXYXlsYW5kRGlzcGxheSBhbmQgdGhlIGNvZGUgdG8gY2hlY2sgaWYgdGhlCisgICAgICAg
IGN1cnJlbnQgZGlzcGxheSBpcyB3YXlsYW5kIG9yIFgxMS4KKyAgICAgICAgV2UgY291bGQgdW5p
ZnkgYWxsIHRoZXNlIHRvIHNoYXJlIHRoZSBzYW1lIGNvbm5lY3Rpb24gdG8gcmVkdWNlCisgICAg
ICAgIHRoZSBhbW91bnQgb2YgaWZkZWZzIGFuZCBlbnN1cmUgYSBzaW5nbGUgY29ubmVjdGlvbi4g
VGhhdCB3aWxsCisgICAgICAgIGFsc28gYWxsb3cgdXMgdG8gdXNlICJzbWFydCBwb2ludGVycyIg
Zm9yIHRoZSBYIHJlc291cmNlcyB0aGF0CisgICAgICAgIG5lZWQgYSBEaXNwbGF5KiB0byBiZSBm
cmVlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBNb3ZlIHNvbWUgZmlsZXMg
dG8gV2ViQ29yZV9TT1VSQ0VTIHNpbmMgZXRoZXkKKyAgICAgICAgZG9uJ3QgdXNlIEdUSysgYW55
bW9yZSwgYW5kIGFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6
Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KTogUmVtb3ZlIHRoZQorICAgICAgICBjdXN0b20g
WDExIGNvbm5lY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OmNyZWF0ZUNvbnRl
eHRGb3JXaW5kb3cpOiBDaGVjayBpZiB0aGUgc2hhcmVkCisgICAgICAgIGRpc3BsYXkgaXMgV2F5
bGFuZCB0byBjcmVhdGUgYSBFR0wgY29udGV4dCBpbiBzdWNoIGNhc2UuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybURpc3BsYXk6OmNyZWF0ZVBsYXRmb3JtRGlzcGxheSk6IENyZWF0ZXMgdGhl
CisgICAgICAgIHNoYXJlZCBkaXNwbGF5LCB1c2luZyB0aGUgR1RLKy9lY29yZSBzaGFyZWQgY29u
bmVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eSk6IFJldHVybiB0aGUgc2hhcmVkIGRpc3BsYXkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VnbC9HTENvbnRleHRFR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkRUdMRGlzcGxh
eSk6IFVzZSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKQorICAgICAgICB0byBnZXQg
dGhlIG5hdGl2ZSBkaXNwbGF5LgorICAgICAgICAoV2ViQ29yZTo6R0xDb250ZXh0RUdMOjpjcmVh
dGVQaXhtYXBDb250ZXh0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHRHTFg6OmNyZWF0
ZVdpbmRvd0NvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6
Y3JlYXRlUGJ1ZmZlckNvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4
dEdMWDo6Y3JlYXRlUGl4bWFwQ29udGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R0xD
b250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHTENv
bnRleHRHTFg6On5HTENvbnRleHRHTFgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdMQ29u
dGV4dEdMWDo6ZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6R0xDb250ZXh0R0xYOjptYWtlQ29udGV4dEN1cnJlbnQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdMQ29udGV4dEdMWDo6c3dhcEJ1ZmZlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkdMQ29udGV4dEdMWDo6Y2Fpcm9EZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjplbnN1
cmVHc3RHTENvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6bmF0
aXZlRGlzcGxheSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQv
UGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Omdsb2JhbENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Omdsb2JhbFJlbW92ZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVdheWxhbmQ6OmNyZWF0ZSk6IFJlbmFt
ZWQgaW5zdGFuY2UoKSBhcworICAgICAgICBjcmVhdGUoKSBzaW5jZSB0aGUgc2luZ2xlIGluc3Rh
bmNlIGlzIG5vdyBoYW5kbGVkIGJ5IFBsYXRmb3JtRGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtRGlzcGxheVdheWxhbmQ6OlBsYXRmb3JtRGlzcGxheVdheWxhbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3JlYXRlU3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpjcmVhdGVTaGFyaW5nR0xDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1BsYXRmb3JtRGlzcGxh
eVdheWxhbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dheWxhbmQvV2F5bGFuZERpc3BsYXkuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy94
MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXlYMTE6OlBsYXRmb3JtRGlzcGxheVgxMSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlYMTE6On5QbGF0Zm9ybURpc3BsYXlYMTEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREaXNw
bGF5U3lzdGVtVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1V0aWxp
dGllcy5oOgorCiAyMDE1LTA0LTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTmV0d29yayBDYWNoZTogSW1wbGVtZW50IFNoYXJl
YWJsZVJlc291cmNlIGZvciBTb3VwIGFuZCBlbmFibGUgaXQgZm9yIEdUSyBwbGF0Zm9ybQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAwYjkxNDk5Li5iZTVkMGM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtMTcsNiArMTcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MveDExIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9saW51eCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
bWVkaWFzdHJlYW0vb3BlbndlYnJ0YyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZSIKQEAgLTEwNyw2ICsxMDgsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZG
RmlsZUZvcm1hdC5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9y
ZUJhY2tlbmRDYWlyb0ltcGwuY3BwCkBAIC0xOTUsNiArMTk3LDggQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9VcGRhdGVBdGxhcy5jcHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9y
bURpc3BsYXlYMTEuY3BwCisKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjMDI1Zjg0Li5jZDVhMTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTcsNiArMTcsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZCIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MveDExIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9saW51eCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFz
dHJlYW0vb3BlbndlYnJ0YyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZSIKQEAgLTYzLDYgKzY0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTEuY3BwCiAgICAg
cGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTIuY3BwCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtODcs
MTEgKzg5LDE1IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9l
Z2wvR0xDb250ZXh0RUdMLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKIAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dseC9HTENvbnRleHRHTFguY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTExOSw2ICsxMjUsOCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlVmVydGljYWxEYXRhLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRm
b3JtRGlzcGxheVgxMS5jcHAKKwogICAgIHBsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHAKQEAgLTE5MSwxNCArMTk5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9y
bUdUS19TT1VSQ0VTCiAgICAgcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCiAgICAgcGFn
ZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250
ZXh0LmNwcAotCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAotCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0
aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKQEAgLTQ3
Miw3ICs0NzYsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAKIGlmIChFTkFCTEVfV0FZTEFORF9U
QVJHRVQpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRGlzcGxheS5jcHAKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmRFdmVudFNvdXJjZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kU3VyZmFjZS5jcHAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKaW5kZXggYmY2
OGFmNy4uYWMyNjYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR0xDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
TENvbnRleHQuY3BwCkBAIC0xOSw2ICsxOSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKwogI2lmIFVTRShFR0wpCiAjaW5jbHVkZSAiR0xD
b250ZXh0RUdMLmgiCiAjZW5kaWYKQEAgLTI3LDE5ICszMCw2IEBACiAjaW5jbHVkZSAiR0xDb250
ZXh0R0xYLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotCi0j
aWYgUExBVEZPUk0oWDExKQotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKEdUSykKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaWYgUExBVEZPUk0oV0FZTEFORCkg
JiYgIWRlZmluZWQoR1RLX0FQSV9WRVJTSU9OXzIpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19X
QVlMQU5EKQotI2luY2x1ZGUgPGdkay9nZGt3YXlsYW5kLmg+Ci0jZW5kaWYKLSNlbmRpZgotCiB1
c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MSwy
NSArNjEsNiBAQCBHTENvbnRleHQqIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKQogfQogCiAj
aWYgUExBVEZPUk0oWDExKQotLy8gV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4
dEN1cnJlbnQgdXNpbmcgZGlmZmVyZW50IERpc3BsYXkgcG9pbnRlcnMsCi0vLyBiZWNhdXNlIGl0
IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRyaXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEg
c2hhcmVkIGRpc3BsYXkKLS8vIHBvaW50ZXIgaGVyZS4KLXN0YXRpYyBEaXNwbGF5KiBnU2hhcmVk
WDExRGlzcGxheSA9IDA7Ci1EaXNwbGF5KiBHTENvbnRleHQ6OnNoYXJlZFgxMURpc3BsYXkoKQot
ewotICAgIGlmICghZ1NoYXJlZFgxMURpc3BsYXkpCi0gICAgICAgIGdTaGFyZWRYMTFEaXNwbGF5
ID0gWE9wZW5EaXNwbGF5KDApOwotICAgIHJldHVybiBnU2hhcmVkWDExRGlzcGxheTsKLX0KLQot
dm9pZCBHTENvbnRleHQ6OmNsZWFudXBTaGFyZWRYMTFEaXNwbGF5KCkKLXsKLSAgICBpZiAoIWdT
aGFyZWRYMTFEaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0gICAgWENsb3NlRGlzcGxheShnU2hh
cmVkWDExRGlzcGxheSk7Ci0gICAgZ1NoYXJlZFgxMURpc3BsYXkgPSAwOwotfQotCiAvLyBCZWNh
dXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFj
dGl2ZSBwYnVmZmVycwogLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBv
YnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCiAvLyBXZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNl
dmVyYWwgcmVhc29ucwpAQCAtMTM0LDE4ICsxMDUsMTQgQEAgdm9pZCBHTENvbnRleHQ6OmNsZWFu
dXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCiAgICAgQWN0aXZlQ29udGV4dExpc3QmIGNvbnRleHRM
aXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
bnRleHRMaXN0LnNpemUoKTsgKytpKQogICAgICAgICBkZWxldGUgY29udGV4dExpc3RbaV07Ci0K
LSAgICBjbGVhbnVwU2hhcmVkWDExRGlzcGxheSgpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKFgx
MSkKIAogCiBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6OmNyZWF0ZUNvbnRl
eHRGb3JXaW5kb3coR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0KiBz
aGFyaW5nQ29udGV4dCkKIHsKLSNpZiBQTEFURk9STShHVEspICYmIFBMQVRGT1JNKFdBWUxBTkQp
ICYmICFkZWZpbmVkKEdUS19BUElfVkVSU0lPTl8yKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
V0FZTEFORCkgJiYgVVNFKEVHTCkKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rpc3Bs
YXlfbWFuYWdlcl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0KCkp
OwotCi0gICAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkoZGlzcGxheSkpIHsKKyNpZiBQTEFU
Rk9STShXQVlMQU5EKSAmJiBVU0UoRUdMKQorICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpXYXlsYW5kKSB7CiAg
ICAgICAgIGlmIChhdXRvIGVnbENvbnRleHQgPSBHTENvbnRleHRFR0w6OmNyZWF0ZUNvbnRleHQo
d2luZG93SGFuZGxlLCBzaGFyaW5nQ29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpt
b3ZlKGVnbENvbnRleHQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTAorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKworI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYgUExBVEZPUk0oWDExKQorI2luY2x1ZGUg
IlBsYXRmb3JtRGlzcGxheVgxMS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQor
I2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oR1RLKQorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVG
TCkgJiYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1EaXNwbGF5KiBQbGF0Zm9ybURpc3Bs
YXk6OmNyZWF0ZVBsYXRmb3JtRGlzcGxheSgpCit7CisjaWYgUExBVEZPUk0oR1RLKQorI2lmIGRl
ZmluZWQoR1RLX0FQSV9WRVJTSU9OXzIpCisgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybURpc3BsYXlY
MTEoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSkpOworI2Vs
c2UKKyAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlfbWFuYWdlcl9nZXRfZGVm
YXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0KCkpOworI2lmIFBMQVRGT1JNKFgx
MSkKKyAgICBpZiAoR0RLX0lTX1gxMV9ESVNQTEFZKGRpc3BsYXkpKQorICAgICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtRGlzcGxheVgxMShHREtfRElTUExBWV9YRElTUExBWShkaXNwbGF5KSk7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShXQVlMQU5EKQorICAgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQ
TEFZKGRpc3BsYXkpKQorICAgICAgICByZXR1cm4gUGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3Jl
YXRlKCk7CisjZW5kaWYKKyNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKSAmJiBkZWZpbmVkKEhB
VkVfRUNPUkVfWCkKKyAgICByZXR1cm4gbmV3IFBsYXRmb3JtRGlzcGxheVgxMShzdGF0aWNfY2Fz
dDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKSk7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFgxMSkKKyAgICByZXR1cm4gbmV3IFBsYXRmb3JtRGlzcGxheVgxMSgpOworI2VuZGlmCisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtRGlzcGxheT4gUGxhdGZvcm1EaXNwbGF5OjpzX3NoYXJlZERp
c3BsYXk7CisKK1BsYXRmb3JtRGlzcGxheSYgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5p
dGlhbGl6ZWQpIHsKKyAgICAgICAgc19zaGFyZWREaXNwbGF5LnJlc2V0KGNyZWF0ZVBsYXRmb3Jt
RGlzcGxheSgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiAqc19zaGFyZWREaXNwbGF5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjQyYWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFBsYXRmb3JtRGlzcGxheV9oCisjZGVmaW5lIFBsYXRmb3JtRGlzcGxheV9oCisK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1EaXNwbGF5IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybURpc3BsYXkpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGxhdGZvcm1EaXNwbGF5JiBzaGFyZWREaXNwbGF5
KCk7CisgICAgdmlydHVhbCB+UGxhdGZvcm1EaXNwbGF5KCkgPSBkZWZhdWx0OworCisgICAgZW51
bSBjbGFzcyBUeXBlIHsKKyNpZiBQTEFURk9STShYMTEpCisgICAgICAgIFgxMSwKKyNlbmRpZgor
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCisgICAgICAgIFdheWxhbmQsCisjZW5kaWYKKyAgICB9Owor
CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBQ
bGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFBsYXRm
b3JtRGlzcGxheSogY3JlYXRlUGxhdGZvcm1EaXNwbGF5KCk7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtRGlzcGxheT4gc19zaGFyZWREaXNwbGF5OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExBVEZP
Uk1fRElTUExBWShUb0NsYXNzTmFtZSwgRGlzcGxheVR5cGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9DbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5JiBkaXNwbGF5KSB7IHJldHVybiBkaXNw
bGF5LnR5cGUoKSA9PSBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OkRpc3BsYXlUeXBl
OyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFBsdGZvcm1E
aXNwbGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vn
bC9HTENvbnRleHRFR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWds
L0dMQ29udGV4dEVHTC5jcHAKaW5kZXggZTVlMzFmYi4uZjJlMmMzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAg
LTM0LDExICszNCwxMiBAQAogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKLSNpZiBQTEFURk9STShX
QVlMQU5EKSAmJiAhZGVmaW5lZChHVEtfQVBJX1ZFUlNJT05fMikKLSNpbmNsdWRlICJXYXlsYW5k
RGlzcGxheS5oIgorI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlY
MTEuaCIKICNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpbmNsdWRlICJQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCkBAIC02NCwxMyArNjUsMTUgQEAgc3RhdGljIEVHTERpc3BsYXkgc2hhcmVkRUdMRGlz
cGxheSgpCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlu
aXRpYWxpemVkKSB7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSNpZiBQTEFURk9STShH
VEspICYmIFBMQVRGT1JNKFdBWUxBTkQpICYmICFkZWZpbmVkKEdUS19BUElfVkVSU0lPTl8yKQot
ICAgICAgICBpZiAoZ2V0RGlzcGxheVN5c3RlbVR5cGUoKSA9PSBEaXNwbGF5U3lzdGVtVHlwZTo6
V2F5bGFuZCAmJiBXYXlsYW5kRGlzcGxheTo6aW5zdGFuY2UoKSkKLSAgICAgICAgICAgIGdTaGFy
ZWRFR0xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShXYXlsYW5kRGlzcGxheTo6aW5zdGFuY2UoKS0+
bmF0aXZlRGlzcGxheSgpKTsKKworICAgICAgICBjb25zdCBhdXRvJiBzaGFyZWREaXNwbGF5ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCk7CisjaWYgUExBVEZPUk0oV0FZTEFORCkK
KyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKQor
ICAgICAgICAgICAgZ1NoYXJlZEVHTERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KGRvd25jYXN0PFBs
YXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKTsKICAgICAgICAg
ZWxzZSAvLyBOb3RlIHRoYXQgdGhpcyBicmFuY2ggY29udGludXRlcyBvdXRzaWRlIHRoaXMgI2lm
LWd1YXJkZWQgc2VnbWVudC4KICNlbmRpZgogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICAgICAgICAg
IGdTaGFyZWRFR0xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShHTENvbnRleHQ6OnNoYXJlZFgxMURp
c3BsYXkoKSk7CisgICAgICAgICAgICBnU2hhcmVkRUdMRGlzcGxheSA9IGVnbEdldERpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSk7CiAj
ZWxzZQogICAgICAgICAgICAgZ1NoYXJlZEVHTERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9E
RUZBVUxUX0RJU1BMQVkpOwogI2VuZGlmCkBAIC0xODYsNyArMTg5LDggQEAgc3RkOjp1bmlxdWVf
cHRyPEdMQ29udGV4dEVHTD4gR0xDb250ZXh0RUdMOjpjcmVhdGVQaXhtYXBDb250ZXh0KEVHTENv
bnRleHQgc2hhcmkKICAgICBpZiAoIWVnbEdldENvbmZpZ0F0dHJpYihkaXNwbGF5LCBjb25maWcs
IEVHTF9ERVBUSF9TSVpFLCAmZGVwdGgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFwKHNoYXJlZFgxMURpc3BsYXkoKSwgRGVmYXVs
dFJvb3RXaW5kb3coc2hhcmVkWDExRGlzcGxheSgpKSwgMSwgMSwgZGVwdGgpOworICAgIERpc3Bs
YXkqIHgxMURpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKKyAgICBQaXhtYXAgcGl4bWFwID0gWENy
ZWF0ZVBpeG1hcCh4MTFEaXNwbGF5LCBEZWZhdWx0Um9vdFdpbmRvdyh4MTFEaXNwbGF5KSwgMSwg
MSwgZGVwdGgpOwogICAgIGlmICghcGl4bWFwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4
dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmNwcAppbmRleCBjNjcwZDIxLi5mNzQ2N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMjIsNiArMjIs
NyBAQAogI2lmIFVTRShHTFgpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgogI2lu
Y2x1ZGUgPEdML2dseC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CiAKQEAgLTMzLDcgKzM0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0R0xYPiBHTENv
bnRleHRHTFg6OmNyZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFy
aW5nQ29udGV4dCkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkWDExRGlzcGxheSgp
OworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKICAgICBYV2luZG93QXR0
cmlidXRlcyBhdHRyaWJ1dGVzOwogICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMoZGlzcGxh
eSwgd2luZG93LCAmYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzIs
NyArNzMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNy
ZWF0ZVBidWZmZXJDb250ZXh0KEdMWENvbnRleHQgc2hhcgogICAgIH07CiAKICAgICBpbnQgcmV0
dXJuZWRFbGVtZW50czsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkWDExRGlzcGxheSgp
OworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKICAgICBHTFhGQkNvbmZp
ZyogY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXksIDAsIGZiQ29uZmlnQXR0cmli
dXRlcywgJnJldHVybmVkRWxlbWVudHMpOwogICAgIGlmICghcmV0dXJuZWRFbGVtZW50cykgewog
ICAgICAgICBYRnJlZShjb25maWdzKTsKQEAgLTExMiw3ICsxMTMsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZVBpeG1hcENvbnRleHQoR0xYQ29u
dGV4dCBzaGFyaQogICAgICAgICAwCiAgICAgfTsKIAotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBz
aGFyZWRYMTFEaXNwbGF5KCk7CisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgp
OwogICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYQ2hvb3NlVmlzdWFsKGRpc3BsYXks
IERlZmF1bHRTY3JlZW4oZGlzcGxheSksIHZpc3VhbEF0dHJpYnV0ZXMpOwogICAgIGlmICghdmlz
dWFsSW5mbykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDIsOSArMTQzLDYgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVQaXhtYXBDb250
ZXh0KEdMWENvbnRleHQgc2hhcmkKIAogc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dEdMWD4gR0xD
b250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0Nv
bnRleHQpCiB7Ci0gICAgaWYgKCFzaGFyZWRYMTFEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBzdGF0
aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CkBAIC0xOTEs
MjQgKzE4OSwyNSBAQCBHTENvbnRleHRHTFg6On5HTENvbnRleHRHTFgoKQogICAgIGlmIChtX2Nh
aXJvRGV2aWNlKQogICAgICAgICBjYWlyb19kZXZpY2VfZGVzdHJveShtX2NhaXJvRGV2aWNlKTsK
IAorICAgIERpc3BsYXkqIGRpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKICAgICBpZiAobV9jb250
ZXh0KSB7CiAgICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNo
ZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZlcnMuIE9yaWdpbmFsbHkKICAgICAg
ICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxlbWVudGF0aW9uIGF0OiBodHRwOi8v
Yml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2QvCiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7Ci0gICAgICAgIGdsWE1ha2VDdXJyZW50KHNoYXJl
ZFgxMURpc3BsYXkoKSwgTm9uZSwgTm9uZSk7Ci0gICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KHNo
YXJlZFgxMURpc3BsYXkoKSwgbV9jb250ZXh0KTsKKyAgICAgICAgZ2xYTWFrZUN1cnJlbnQoZGlz
cGxheSwgTm9uZSwgTm9uZSk7CisgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KGRpc3BsYXksIG1f
Y29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKG1fcGJ1ZmZlcikgewotICAgICAgICBnbFhEZXN0
cm95UGJ1ZmZlcihzaGFyZWRYMTFEaXNwbGF5KCksIG1fcGJ1ZmZlcik7CisgICAgICAgIGdsWERl
c3Ryb3lQYnVmZmVyKGRpc3BsYXksIG1fcGJ1ZmZlcik7CiAgICAgICAgIG1fcGJ1ZmZlciA9IDA7
CiAgICAgfQogICAgIGlmIChtX2dseFBpeG1hcCkgewotICAgICAgICBnbFhEZXN0cm95R0xYUGl4
bWFwKHNoYXJlZFgxMURpc3BsYXkoKSwgbV9nbHhQaXhtYXApOworICAgICAgICBnbFhEZXN0cm95
R0xYUGl4bWFwKGRpc3BsYXksIG1fZ2x4UGl4bWFwKTsKICAgICAgICAgbV9nbHhQaXhtYXAgPSAw
OwogICAgIH0KICAgICBpZiAobV9waXhtYXApIHsKLSAgICAgICAgWEZyZWVQaXhtYXAoc2hhcmVk
WDExRGlzcGxheSgpLCBtX3BpeG1hcCk7CisgICAgICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1f
cGl4bWFwKTsKICAgICAgICAgbV9waXhtYXAgPSAwOwogICAgIH0KIH0KQEAgLTIyNiw3ICsyMjUs
OCBAQCBJbnRTaXplIEdMQ29udGV4dEdMWDo6ZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpCiAgICAg
aW50IHgsIHk7CiAgICAgV2luZG93IHJvb3RXaW5kb3c7CiAgICAgdW5zaWduZWQgaW50IHdpZHRo
LCBoZWlnaHQsIGJvcmRlcldpZHRoLCBkZXB0aDsKLSAgICBpZiAoIVhHZXRHZW9tZXRyeShzaGFy
ZWRYMTFEaXNwbGF5KCksIG1fd2luZG93LCAmcm9vdFdpbmRvdywgJngsICZ5LCAmd2lkdGgsICZo
ZWlnaHQsICZib3JkZXJXaWR0aCwgJmRlcHRoKSkKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gZG93
bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXko
KSkubmF0aXZlKCk7CisgICAgaWYgKCFYR2V0R2VvbWV0cnkoZGlzcGxheSwgbV93aW5kb3csICZy
b290V2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmJvcmRlcldpZHRoLCAmZGVwdGgp
KQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCiAgICAgcmV0dXJuIEludFNpemUod2lkdGgs
IGhlaWdodCk7CkBAIC0yNDAsMTkgKzI0MCwyMCBAQCBib29sIEdMQ29udGV4dEdMWDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKICAgICBpZiAoZ2xYR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRl
eHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25j
YXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkp
Lm5hdGl2ZSgpOwogICAgIGlmIChtX3dpbmRvdykKLSAgICAgICAgcmV0dXJuIGdsWE1ha2VDdXJy
ZW50KHNoYXJlZFgxMURpc3BsYXkoKSwgbV93aW5kb3csIG1fY29udGV4dCk7CisgICAgICAgIHJl
dHVybiBnbFhNYWtlQ3VycmVudChkaXNwbGF5LCBtX3dpbmRvdywgbV9jb250ZXh0KTsKIAogICAg
IGlmIChtX3BidWZmZXIpCi0gICAgICAgIHJldHVybiBnbFhNYWtlQ3VycmVudChzaGFyZWRYMTFE
aXNwbGF5KCksIG1fcGJ1ZmZlciwgbV9jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGdsWE1ha2VD
dXJyZW50KGRpc3BsYXksIG1fcGJ1ZmZlciwgbV9jb250ZXh0KTsKIAotICAgIHJldHVybiA6Omds
WE1ha2VDdXJyZW50KHNoYXJlZFgxMURpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7
CisgICAgcmV0dXJuIDo6Z2xYTWFrZUN1cnJlbnQoZGlzcGxheSwgbV9nbHhQaXhtYXAsIG1fY29u
dGV4dCk7CiB9CiAKIHZvaWQgR0xDb250ZXh0R0xYOjpzd2FwQnVmZmVycygpCiB7CiAgICAgaWYg
KG1fd2luZG93KQotICAgICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWRYMTFEaXNwbGF5KCksIG1f
d2luZG93KTsKKyAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5
WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCksIG1fd2luZG93
KTsKIH0KIAogdm9pZCBHTENvbnRleHRHTFg6OndhaXROYXRpdmUoKQpAQCAtMjY2LDcgKzI2Nyw3
IEBAIGNhaXJvX2RldmljZV90KiBHTENvbnRleHRHTFg6OmNhaXJvRGV2aWNlKCkKICAgICAgICAg
cmV0dXJuIG1fY2Fpcm9EZXZpY2U7CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIG1fY2Fpcm9EZXZpY2UgPSBjYWlyb19nbHhfZGV2aWNlX2NyZWF0ZShzaGFyZWRYMTFE
aXNwbGF5KCksIG1fY29udGV4dCk7CisgICAgbV9jYWlyb0RldmljZSA9IGNhaXJvX2dseF9kZXZp
Y2VfY3JlYXRlKGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgpLCBtX2NvbnRleHQpOwogI2VuZGlmCiAKICAgICByZXR1
cm4gbV9jYWlyb0RldmljZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCA0OTk1NTM5Li5iMDBiN2Y4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC03MSw2
ICs3MSwxMiBAQAogI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShYMTEpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgi
CisjZWxpZiBQTEFURk9STShXQVlMQU5EKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxh
bmQuaCIKKyNlbmRpZgorCiAvLyBnc3RnbGFwaS5oIG1heSBpbmNsdWRlIGVnbHBsYXRmb3JtLmgg
YW5kIGl0IGluY2x1ZGVzIFguaCwgd2hpY2gKIC8vIGRlZmluZXMgTm9uZSwgYnJlYWtpbmcgTWVk
aWFQbGF5ZXI6Ok5vbmUgZW51bQogI2lmIFBMQVRGT1JNKFgxMSkgJiYgR1NUX0dMX0hBVkVfUExB
VEZPUk1fRUdMCkBAIC0yMjgsMTIgKzIzNCwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OmVuc3VyZUdzdEdMQ29udGV4dCgpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgaWYgKCFtX2dsRGlzcGxheSkgeworICAgICAgICBjb25zdCBhdXRvJiBzaGFyZWREaXNw
bGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCk7CiAjaWYgUExBVEZPUk0oWDEx
KQotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0OjpzaGFyZWRYMTFEaXNwbGF5
KCk7Ci0gICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
eDExX25ld193aXRoX2Rpc3BsYXkoZGlzcGxheSkpOworICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKICNlbGlmIFBM
QVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IFdheWxhbmREaXNw
bGF5OjppbnN0YW5jZSgpLT5lZ2xEaXNwbGF5KCk7Ci0gICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NU
X0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRpc3Bs
YXkpKTsKKyAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxh
eV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
SGVscGVyLmNwcAppbmRleCA0YmU2MmJiLi44MDEwYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNw
cApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlgxMUhl
bHBlci5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gVXNlZCBmb3IgaGFuZGxpbmcgWEVycm9yLgpAQCAtNTMsMjUgKzU1LDYg
QEAgc3RhdGljIGludCBoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcihEaXNwbGF5KiwgWEVycm9y
RXZlbnQqIGV2ZW50KQogICAgIHJldHVybiAwOwogfQogCi1zdHJ1Y3QgRGlzcGxheUNvbm5lY3Rp
b24gewotICAgIERpc3BsYXlDb25uZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1fZGlzcGxheSA9
IFhPcGVuRGlzcGxheSgwKTsKLQotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29ubmVjdGlvbiB3aXRoIFgiKTsKLSAgICB9Ci0K
LSAgICB+RGlzcGxheUNvbm5lY3Rpb24oKQotICAgIHsKLSAgICAgICAgWENsb3NlRGlzcGxheSht
X2Rpc3BsYXkpOwotICAgIH0KLQotICAgIERpc3BsYXkqIGRpc3BsYXkoKSB7IHJldHVybiBtX2Rp
c3BsYXk7IH0KLXByaXZhdGU6Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5OwotfTsKLQogc3RydWN0
IE9mZlNjcmVlblJvb3RXaW5kb3cgewogCiAgICAgT2ZmU2NyZWVuUm9vdFdpbmRvdygpCkBAIC0z
MzEsOSArMzE0LDcgQEAgYm9vbCBYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpCiAKIERpc3BsYXkqIFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpCiB7Ci0gICAgLy8gRGlz
cGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBiZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4K
LSAgICBzdGF0aWMgRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247Ci0gICAgcmV0
dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRpc3BsYXkoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZl
KCk7CiB9CiAKIFdpbmRvdyBYMTFIZWxwZXI6Om9mZnNjcmVlblJvb3RXaW5kb3coKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURp
c3BsYXlXYXlsYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxh
bmQvUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNGRjZGNhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dheWxhbmQvUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5jcHAKQEAgLTAsMCAr
MSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5oIgor
CisjaWYgUExBVEZPUk0oV0FZTEFORCkKKworI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgorI2lu
Y2x1ZGUgIldheWxhbmRTdXJmYWNlLmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxn
bGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qgc3RydWN0IHdsX3JlZ2lzdHJ5
X2xpc3RlbmVyIFBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Om1fcmVnaXN0cnlMaXN0ZW5lciA9IHsK
KyAgICBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpnbG9iYWxDYWxsYmFjaywKKyAgICBQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kOjpnbG9iYWxSZW1vdmVDYWxsYmFjaworfTsKKwordm9pZCBQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kOjpnbG9iYWxDYWxsYmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVn
aXN0cnkqIHJlZ2lzdHJ5LCB1aW50MzJfdCBuYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2UsIHVp
bnQzMl90KQoreworICAgIGF1dG8gZGlzcGxheSA9IHN0YXRpY19jYXN0PFBsYXRmb3JtRGlzcGxh
eVdheWxhbmQqPihkYXRhKTsKKyAgICBpZiAoIXN0ZDo6c3RyY21wKGludGVyZmFjZSwgIndsX2Nv
bXBvc2l0b3IiKSkKKyAgICAgICAgZGlzcGxheS0+bV9jb21wb3NpdG9yID0gc3RhdGljX2Nhc3Q8
c3RydWN0IHdsX2NvbXBvc2l0b3IqPih3bF9yZWdpc3RyeV9iaW5kKHJlZ2lzdHJ5LCBuYW1lLCAm
d2xfY29tcG9zaXRvcl9pbnRlcmZhY2UsIDEpKTsKKyAgICBlbHNlIGlmICghc3RkOjpzdHJjbXAo
aW50ZXJmYWNlLCAid2xfd2Via2l0Z3RrIikpCisgICAgICAgIGRpc3BsYXktPm1fd2Via2l0Z3Rr
ID0gc3RhdGljX2Nhc3Q8c3RydWN0IHdsX3dlYmtpdGd0ayo+KHdsX3JlZ2lzdHJ5X2JpbmQocmVn
aXN0cnksIG5hbWUsICZ3bF93ZWJraXRndGtfaW50ZXJmYWNlLCAxKSk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1EaXNwbGF5V2F5bGFuZDo6Z2xvYmFsUmVtb3ZlQ2FsbGJhY2sodm9pZCosIHN0cnVjdCB3
bF9yZWdpc3RyeSosIHVpbnQzMl90KQoreworICAgIC8vIEZJWE1FOiBpZiB0aGlzIGNhbiBoYXBw
ZW4gd2l0aG91dCB0aGUgVUkgUHJvY2VzcyBnZXR0aW5nIHNodXQgZG93bgorICAgIC8vIHdlIHNo
b3VsZCBwcm9iYWJseSBkZXN0cm95IG91ciBjYWNoZWQgZGlzcGxheSBpbnN0YW5jZS4KK30KKwor
UGxhdGZvcm1EaXNwbGF5V2F5bGFuZCogUGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3JlYXRlKCkK
K3sKKyAgICBzdHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5ID0gd2xfZGlzcGxheV9jb25uZWN0
KCJ3ZWJraXRndGstd2F5bGFuZC1jb21wb3NpdG9yLXNvY2tldCIpOworICAgIGlmICghd2xEaXNw
bGF5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGlzcGxheSA9IHN0ZDo6
bWFrZV91bmlxdWU8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4od2xEaXNwbGF5KTsKKyAgICBpZiAo
IWRpc3BsYXktPmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gZGlzcGxheS5yZWxlYXNlKCk7Cit9CisKK1BsYXRmb3JtRGlzcGxheVdheWxhbmQ6
OlBsYXRmb3JtRGlzcGxheVdheWxhbmQoc3RydWN0IHdsX2Rpc3BsYXkqIHdsRGlzcGxheSkKKyAg
ICA6IG1fZGlzcGxheSh3bERpc3BsYXkpCisgICAgLCBtX3JlZ2lzdHJ5KHdsX2Rpc3BsYXlfZ2V0
X3JlZ2lzdHJ5KG1fZGlzcGxheSkpCisgICAgLCBtX2VnbENvbmZpZ0Nob3NlbihmYWxzZSkKK3sK
KyAgICB3bF9yZWdpc3RyeV9hZGRfbGlzdGVuZXIobV9yZWdpc3RyeSwgJm1fcmVnaXN0cnlMaXN0
ZW5lciwgdGhpcyk7CisgICAgd2xfZGlzcGxheV9yb3VuZHRyaXAobV9kaXNwbGF5KTsKKworICAg
IHN0YXRpYyBjb25zdCBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xf
U1VSRkFDRV9UWVBFLCBFR0xfV0lORE9XX0JJVCwKKyAgICAgICAgRUdMX1JFRF9TSVpFLCAxLAor
ICAgICAgICBFR0xfR1JFRU5fU0laRSwgMSwKKyAgICAgICAgRUdMX0JMVUVfU0laRSwgMSwKKyAg
ICAgICAgRUdMX0FMUEhBX1NJWkUsIDEsCisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVH
TF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAgRUdMX05PTkUKKyAgICB9OworCisgICAgbV9lZ2xE
aXNwbGF5ID0gZWdsR2V0RGlzcGxheShtX2Rpc3BsYXkpOworICAgIGlmIChtX2VnbERpc3BsYXkg
PT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgZ193YXJuaW5nKCJQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kIGluaXRpYWxpemF0aW9uOiBmYWlsZWQgdG8gYWNxdWlyZSBFR0wgZGlzcGxheS4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlZ2xJbml0aWFsaXplKG1fZWdsRGlz
cGxheSwgMCwgMCkgPT0gRUdMX0ZBTFNFKSB7CisgICAgICAgIGdfd2FybmluZygiUGxhdGZvcm1E
aXNwbGF5V2F5bGFuZCBpbml0aWFsaXphdGlvbjogZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIEVH
TCBkaXNwbGF5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVnbEJpbmRB
UEkoRUdMX09QRU5HTF9FU19BUEkpID09IEVHTF9GQUxTRSkgeworICAgICAgICBnX3dhcm5pbmco
IlBsYXRmb3JtRGlzcGxheVdheWxhbmQgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBzZXQgRUdM
X09QRU5HTF9FU19BUEkgYXMgdGhlIHJlbmRlcmluZyBBUEkuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBFR0xpbnQgbnVtYmVyT2ZDb25maWdzOworICAgIGlmICghZWdsQ2hvb3Nl
Q29uZmlnKG1fZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcywgJm1fZWdsQ29uZmlnLCAxLCAm
bnVtYmVyT2ZDb25maWdzKSB8fCBudW1iZXJPZkNvbmZpZ3MgIT0gMSkgeworICAgICAgICBnX3dh
cm5pbmcoIlBsYXRmb3JtRGlzcGxheVdheWxhbmQgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBm
aW5kIHRoZSBkZXNpcmVkIEVHTCBjb25maWd1cmF0aW9uLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9lZ2xDb25maWdDaG9zZW4gPSB0cnVlOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8V2F5bGFuZFN1cmZhY2U+IFBsYXRmb3JtRGlzcGxheVdheWxhbmQ6OmNyZWF0ZVN1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHdpZGdldElkKQoreworICAgIHN0cnVjdCB3bF9zdXJm
YWNlKiB3bFN1cmZhY2UgPSB3bF9jb21wb3NpdG9yX2NyZWF0ZV9zdXJmYWNlKG1fY29tcG9zaXRv
cik7CisgICAgLy8gV2Uga2VlcCB0aGUgbWluaW11bSBzaXplIGF0IDF4MXB4IHNpbmNlIE1lc2Eg
cmV0dXJucyBudWxsIHZhbHVlcyBpbiB3bF9lZ2xfd2luZG93X2NyZWF0ZSgpIGZvciB6ZXJvIHdp
ZHRoIG9yIGhlaWdodC4KKyAgICBFR0xOYXRpdmVXaW5kb3dUeXBlIG5hdGl2ZVdpbmRvdyA9IHds
X2VnbF93aW5kb3dfY3JlYXRlKHdsU3VyZmFjZSwgc3RkOjptYXgoMSwgc2l6ZS53aWR0aCgpKSwg
c3RkOjptYXgoMSwgc2l6ZS5oZWlnaHQoKSkpOworCisgICAgd2xfd2Via2l0Z3RrX3NldF9zdXJm
YWNlX2Zvcl93aWRnZXQobV93ZWJraXRndGssIHdsU3VyZmFjZSwgd2lkZ2V0SWQpOworICAgIHds
X2Rpc3BsYXlfcm91bmR0cmlwKG1fZGlzcGxheSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxXYXlsYW5kU3VyZmFjZT4od2xTdXJmYWNlLCBuYXRpdmVXaW5kb3cpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8R0xDb250ZXh0RUdMPiBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpjcmVhdGVT
aGFyaW5nR0xDb250ZXh0KCkKK3sKKyAgICBzdHJ1Y3Qgd2xfc3VyZmFjZSogd2xTdXJmYWNlID0g
d2xfY29tcG9zaXRvcl9jcmVhdGVfc3VyZmFjZShtX2NvbXBvc2l0b3IpOworICAgIEVHTE5hdGl2
ZVdpbmRvd1R5cGUgbmF0aXZlV2luZG93ID0gd2xfZWdsX3dpbmRvd19jcmVhdGUod2xTdXJmYWNl
LCAxLCAxKTsKKyAgICByZXR1cm4gR0xDb250ZXh0RUdMOjpjcmVhdGVXaW5kb3dDb250ZXh0KG5h
dGl2ZVdpbmRvdywgbnVsbHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdBWUxBTkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93YXlsYW5kL1BsYXRmb3JtRGlzcGxheVdheWxhbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzVkNDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1BsYXRmb3Jt
RGlzcGxheVdheWxhbmQuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUGxhdGZvcm1EaXNwbGF5V2F5bGFuZF9o
CisjZGVmaW5lICBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kX2gKKworI2lmIFBMQVRGT1JNKFdBWUxB
TkQpCisKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlICJXZWJLaXRHdGtX
YXlsYW5kQ2xpZW50UHJvdG9jb2wuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d2F5
bGFuZC1jbGllbnQuaD4KKworI2luY2x1ZGUgPHdheWxhbmQtZWdsLmg+CisjaW5jbHVkZSA8RUdM
L2VnbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMQ29udGV4dEVHTDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBXYXlsYW5kU3VyZmFjZTsKKworY2xhc3MgUGxhdGZvcm1EaXNw
bGF5V2F5bGFuZCBmaW5hbDogcHVibGljIFBsYXRmb3JtRGlzcGxheSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBsYXRmb3JtRGlzcGxheVdheWxhbmQqIGNyZWF0ZSgpOworICAgIHZpcnR1YWwgflBs
YXRmb3JtRGlzcGxheVdheWxhbmQoKTsKKworICAgIHN0cnVjdCB3bF9kaXNwbGF5KiBuYXRpdmUo
KSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXk7IH0KKyAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXko
KSBjb25zdCB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
YXlsYW5kU3VyZmFjZT4gY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiwgaW50IHdpZGdldElE
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRFR0w+IGNyZWF0ZVNoYXJpbmdHTENv
bnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHdsX3JlZ2lzdHJ5
X2xpc3RlbmVyIG1fcmVnaXN0cnlMaXN0ZW5lcjsKKyAgICBzdGF0aWMgdm9pZCBnbG9iYWxDYWxs
YmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqLCB1aW50MzJfdCBuYW1lLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90IHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGds
b2JhbFJlbW92ZUNhbGxiYWNrKHZvaWQqIGRhdGEsIHN0cnVjdCB3bF9yZWdpc3RyeSosIHVpbnQz
Ml90IG5hbWUpOworCisgICAgUGxhdGZvcm1EaXNwbGF5V2F5bGFuZChzdHJ1Y3Qgd2xfZGlzcGxh
eSopOworICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIHsgcmV0dXJuIG1fY29tcG9zaXRvciAmJiBt
X3dlYmtpdGd0ayAmJiBtX2VnbERpc3BsYXkgIT0gRUdMX05PX0RJU1BMQVkgJiYgbV9lZ2xDb25m
aWdDaG9zZW47IH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBs
YXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZDsgfQorCisgICAgc3RydWN0IHdsX2Rpc3BsYXkq
IG1fZGlzcGxheTsKKyAgICBzdHJ1Y3Qgd2xfcmVnaXN0cnkqIG1fcmVnaXN0cnk7CisgICAgc3Ry
dWN0IHdsX2NvbXBvc2l0b3IqIG1fY29tcG9zaXRvcjsKKyAgICBzdHJ1Y3Qgd2xfd2Via2l0Z3Rr
KiBtX3dlYmtpdGd0azsKKworICAgIEVHTERpc3BsYXkgbV9lZ2xEaXNwbGF5OworICAgIEVHTENv
bmZpZyBtX2VnbENvbmZpZzsKKyAgICBib29sIG1fZWdsQ29uZmlnQ2hvc2VuOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0FZTEFORCkKKworI2Vu
ZGlmIC8vIFBsYXRmb3JtRGlzcGxheVdheWxhbmRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRGlzcGxheS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1NDdhNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldheWxhbmRE
aXNwbGF5LmgiCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0
RUdMLmgiCi0jaW5jbHVkZSAiV2F5bGFuZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxjc3RyaW5nPgot
I2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBzdHJ1Y3Qg
d2xfcmVnaXN0cnlfbGlzdGVuZXIgV2F5bGFuZERpc3BsYXk6Om1fcmVnaXN0cnlMaXN0ZW5lciA9
IHsKLSAgICBXYXlsYW5kRGlzcGxheTo6Z2xvYmFsQ2FsbGJhY2ssCi0gICAgV2F5bGFuZERpc3Bs
YXk6Omdsb2JhbFJlbW92ZUNhbGxiYWNrCi19OwotCi12b2lkIFdheWxhbmREaXNwbGF5OjpnbG9i
YWxDYWxsYmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqIHJlZ2lzdHJ5LCB1aW50
MzJfdCBuYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90KQotewotICAgIGF1dG8g
ZGlzcGxheSA9IHN0YXRpY19jYXN0PFdheWxhbmREaXNwbGF5Kj4oZGF0YSk7Ci0gICAgaWYgKCFz
dGQ6OnN0cmNtcChpbnRlcmZhY2UsICJ3bF9jb21wb3NpdG9yIikpCi0gICAgICAgIGRpc3BsYXkt
Pm1fY29tcG9zaXRvciA9IHN0YXRpY19jYXN0PHN0cnVjdCB3bF9jb21wb3NpdG9yKj4od2xfcmVn
aXN0cnlfYmluZChyZWdpc3RyeSwgbmFtZSwgJndsX2NvbXBvc2l0b3JfaW50ZXJmYWNlLCAxKSk7
Ci0gICAgZWxzZSBpZiAoIXN0ZDo6c3RyY21wKGludGVyZmFjZSwgIndsX3dlYmtpdGd0ayIpKQot
ICAgICAgICBkaXNwbGF5LT5tX3dlYmtpdGd0ayA9IHN0YXRpY19jYXN0PHN0cnVjdCB3bF93ZWJr
aXRndGsqPih3bF9yZWdpc3RyeV9iaW5kKHJlZ2lzdHJ5LCBuYW1lLCAmd2xfd2Via2l0Z3RrX2lu
dGVyZmFjZSwgMSkpOwotfQotCi12b2lkIFdheWxhbmREaXNwbGF5OjpnbG9iYWxSZW1vdmVDYWxs
YmFjayh2b2lkKiwgc3RydWN0IHdsX3JlZ2lzdHJ5KiwgdWludDMyX3QpCi17Ci0gICAgLy8gRklY
TUU6IGlmIHRoaXMgY2FuIGhhcHBlbiB3aXRob3V0IHRoZSBVSSBQcm9jZXNzIGdldHRpbmcgc2h1
dCBkb3duCi0gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgb3VyIGNhY2hlZCBkaXNw
bGF5IGluc3RhbmNlLgotfQotCi1XYXlsYW5kRGlzcGxheSogV2F5bGFuZERpc3BsYXk6Omluc3Rh
bmNlKCkKLXsKLSAgICBzdGF0aWMgV2F5bGFuZERpc3BsYXkqIGRpc3BsYXkgPSBudWxscHRyOwot
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKGluaXRpYWxpemVk
KQotICAgICAgICByZXR1cm4gZGlzcGxheTsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICBzdHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5ID0gd2xfZGlzcGxheV9jb25uZWN0KCJ3ZWJr
aXRndGstd2F5bGFuZC1jb21wb3NpdG9yLXNvY2tldCIpOwotICAgIGlmICghd2xEaXNwbGF5KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRpc3BsYXkgPSBuZXcgV2F5bGFuZERpc3Bs
YXkod2xEaXNwbGF5KTsKLSAgICBpZiAoIWRpc3BsYXktPmlzSW5pdGlhbGl6ZWQoKSkgewotICAg
ICAgICBkZWxldGUgZGlzcGxheTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0KLVdheWxhbmREaXNwbGF5OjpXYXlsYW5kRGlzcGxheShz
dHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5KQotICAgIDogbV9kaXNwbGF5KHdsRGlzcGxheSkK
LSAgICAsIG1fcmVnaXN0cnkod2xfZGlzcGxheV9nZXRfcmVnaXN0cnkobV9kaXNwbGF5KSkKLSAg
ICAsIG1fZWdsQ29uZmlnQ2hvc2VuKGZhbHNlKQotewotICAgIHdsX3JlZ2lzdHJ5X2FkZF9saXN0
ZW5lcihtX3JlZ2lzdHJ5LCAmbV9yZWdpc3RyeUxpc3RlbmVyLCB0aGlzKTsKLSAgICB3bF9kaXNw
bGF5X3JvdW5kdHJpcChtX2Rpc3BsYXkpOwotCi0gICAgc3RhdGljIGNvbnN0IEVHTGludCBjb25m
aWdBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9XSU5ET1df
QklULAotICAgICAgICBFR0xfUkVEX1NJWkUsIDEsCi0gICAgICAgIEVHTF9HUkVFTl9TSVpFLCAx
LAotICAgICAgICBFR0xfQkxVRV9TSVpFLCAxLAotICAgICAgICBFR0xfQUxQSEFfU0laRSwgMSwK
LSAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgICAg
ICBFR0xfTk9ORQotICAgIH07Ci0KLSAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KG1f
ZGlzcGxheSk7Ci0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewotICAg
ICAgICBnX3dhcm5pbmcoIldheWxhbmREaXNwbGF5IGluaXRpYWxpemF0aW9uOiBmYWlsZWQgdG8g
YWNxdWlyZSBFR0wgZGlzcGxheS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCkgPT0gRUdMX0ZBTFNFKSB7Ci0gICAg
ICAgIGdfd2FybmluZygiV2F5bGFuZERpc3BsYXkgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBp
bml0aWFsaXplIHRoZSBFR0wgZGlzcGxheS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChlZ2xCaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKSA9PSBFR0xfRkFMU0UpIHsKLSAg
ICAgICAgZ193YXJuaW5nKCJXYXlsYW5kRGlzcGxheSBpbml0aWFsaXphdGlvbjogZmFpbGVkIHRv
IHNldCBFR0xfT1BFTkdMX0VTX0FQSSBhcyB0aGUgcmVuZGVyaW5nIEFQSS4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEVHTGludCBudW1iZXJPZkNvbmZpZ3M7Ci0gICAgaWYgKCFl
Z2xDaG9vc2VDb25maWcobV9lZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAmbV9lZ2xDb25m
aWcsIDEsICZudW1iZXJPZkNvbmZpZ3MpIHx8IG51bWJlck9mQ29uZmlncyAhPSAxKSB7Ci0gICAg
ICAgIGdfd2FybmluZygiV2F5bGFuZERpc3BsYXkgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBm
aW5kIHRoZSBkZXNpcmVkIEVHTCBjb25maWd1cmF0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9lZ2xDb25maWdDaG9zZW4gPSB0cnVlOwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8V2F5bGFuZFN1cmZhY2U+IFdheWxhbmREaXNwbGF5OjpjcmVhdGVTdXJmYWNlKGNvbnN0IElu
dFNpemUmIHNpemUsIGludCB3aWRnZXRJZCkKLXsKLSAgICBzdHJ1Y3Qgd2xfc3VyZmFjZSogd2xT
dXJmYWNlID0gd2xfY29tcG9zaXRvcl9jcmVhdGVfc3VyZmFjZShtX2NvbXBvc2l0b3IpOwotICAg
IC8vIFdlIGtlZXAgdGhlIG1pbmltdW0gc2l6ZSBhdCAxeDFweCBzaW5jZSBNZXNhIHJldHVybnMg
bnVsbCB2YWx1ZXMgaW4gd2xfZWdsX3dpbmRvd19jcmVhdGUoKSBmb3IgemVybyB3aWR0aCBvciBo
ZWlnaHQuCi0gICAgRUdMTmF0aXZlV2luZG93VHlwZSBuYXRpdmVXaW5kb3cgPSB3bF9lZ2xfd2lu
ZG93X2NyZWF0ZSh3bFN1cmZhY2UsIHN0ZDo6bWF4KDEsIHNpemUud2lkdGgoKSksIHN0ZDo6bWF4
KDEsIHNpemUuaGVpZ2h0KCkpKTsKLQotICAgIHdsX3dlYmtpdGd0a19zZXRfc3VyZmFjZV9mb3Jf
d2lkZ2V0KG1fd2Via2l0Z3RrLCB3bFN1cmZhY2UsIHdpZGdldElkKTsKLSAgICB3bF9kaXNwbGF5
X3JvdW5kdHJpcChtX2Rpc3BsYXkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2F5
bGFuZFN1cmZhY2U+KHdsU3VyZmFjZSwgbmF0aXZlV2luZG93KTsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEdMQ29udGV4dEVHTD4gV2F5bGFuZERpc3BsYXk6OmNyZWF0ZVNoYXJpbmdHTENvbnRleHQo
KQotewotICAgIHN0cnVjdCB3bF9zdXJmYWNlKiB3bFN1cmZhY2UgPSB3bF9jb21wb3NpdG9yX2Ny
ZWF0ZV9zdXJmYWNlKG1fY29tcG9zaXRvcik7Ci0gICAgRUdMTmF0aXZlV2luZG93VHlwZSBuYXRp
dmVXaW5kb3cgPSB3bF9lZ2xfd2luZG93X2NyZWF0ZSh3bFN1cmZhY2UsIDEsIDEpOwotICAgIHJl
dHVybiBHTENvbnRleHRFR0w6OmNyZWF0ZVdpbmRvd0NvbnRleHQobmF0aXZlV2luZG93LCBudWxs
cHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0o
V0FZTEFORCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dh
eWxhbmQvV2F5bGFuZERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dheWxhbmQvV2F5bGFuZERpc3BsYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDRiYjBmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
YXlsYW5kL1dheWxhbmREaXNwbGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgV2F5
bGFuZERpc3BsYXlfaAotI2RlZmluZSAgV2F5bGFuZERpc3BsYXlfaAotCi0jaWYgUExBVEZPUk0o
V0FZTEFORCkKLQotI2luY2x1ZGUgIldlYktpdEd0a1dheWxhbmRDbGllbnRQcm90b2NvbC5oIgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3YXlsYW5kLWNsaWVudC5oPgotCi0jaW5jbHVk
ZSA8d2F5bGFuZC1lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgR0xDb250ZXh0RUdMOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFdheWxh
bmRTdXJmYWNlOwotCi1jbGFzcyBXYXlsYW5kRGlzcGxheSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFdheWxhbmREaXNwbGF5KiBpbnN0YW5jZSgpOwotCi0gICAgc3RydWN0IHdsX2Rpc3BsYXkqIG5h
dGl2ZURpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXk7IH0KLSAgICBFR0xEaXNwbGF5
IGVnbERpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXlsYW5kU3VyZmFjZT4gY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiwg
aW50IHdpZGdldElEKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRFR0w+IGNyZWF0
ZVNoYXJpbmdHTENvbnRleHQoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0
IHdsX3JlZ2lzdHJ5X2xpc3RlbmVyIG1fcmVnaXN0cnlMaXN0ZW5lcjsKLSAgICBzdGF0aWMgdm9p
ZCBnbG9iYWxDYWxsYmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqLCB1aW50MzJf
dCBuYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90IHZlcnNpb24pOwotICAgIHN0
YXRpYyB2b2lkIGdsb2JhbFJlbW92ZUNhbGxiYWNrKHZvaWQqIGRhdGEsIHN0cnVjdCB3bF9yZWdp
c3RyeSosIHVpbnQzMl90IG5hbWUpOwotCi0gICAgV2F5bGFuZERpc3BsYXkoc3RydWN0IHdsX2Rp
c3BsYXkqKTsKLSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0b3Ig
JiYgbV93ZWJraXRndGsgJiYgbV9lZ2xEaXNwbGF5ICE9IEVHTF9OT19ESVNQTEFZICYmIG1fZWds
Q29uZmlnQ2hvc2VuOyB9Ci0KLSAgICBzdHJ1Y3Qgd2xfZGlzcGxheSogbV9kaXNwbGF5OwotICAg
IHN0cnVjdCB3bF9yZWdpc3RyeSogbV9yZWdpc3RyeTsKLSAgICBzdHJ1Y3Qgd2xfY29tcG9zaXRv
ciogbV9jb21wb3NpdG9yOwotICAgIHN0cnVjdCB3bF93ZWJraXRndGsqIG1fd2Via2l0Z3RrOwot
Ci0gICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Ci0gICAgRUdMQ29uZmlnIG1fZWdsQ29uZmln
OwotICAgIGJvb2wgbV9lZ2xDb25maWdDaG9zZW47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShXQVlMQU5EKQotCi0jZW5kaWYgLy8gV2F5bGFuZERp
c3BsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDEx
L1BsYXRmb3JtRGlzcGxheVgxMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YWIwMjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgorCisjaWYgUExBVEZPUk0oWDEx
KQorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZv
cm1EaXNwbGF5WDExOjpQbGF0Zm9ybURpc3BsYXlYMTEoKQorICAgIDogbV9kaXNwbGF5KFhPcGVu
RGlzcGxheShudWxscHRyKSkKKyAgICAsIG1fb3duZWREaXNwbGF5KHRydWUpCit7Cit9CisKK1Bs
YXRmb3JtRGlzcGxheVgxMTo6UGxhdGZvcm1EaXNwbGF5WDExKERpc3BsYXkqIGRpc3BsYXkpCisg
ICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fb3duZWREaXNwbGF5KGZhbHNlKQorewor
fQorCitQbGF0Zm9ybURpc3BsYXlYMTE6On5QbGF0Zm9ybURpc3BsYXlYMTEoKQoreworICAgIGlm
IChtX293bmVkRGlzcGxheSkKKyAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShYMTEpCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9y
bURpc3BsYXlYMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDdkOGFl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDEx
L1BsYXRmb3JtRGlzcGxheVgxMS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgSWdhbGlhIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1EaXNwbGF5WDExX2gKKyNk
ZWZpbmUgUGxhdGZvcm1EaXNwbGF5WDExX2gKKworI2lmIFBMQVRGT1JNKFgxMSkKKworI2luY2x1
ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgorCit0eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxh
eTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybURpc3BsYXlYMTEgZmlu
YWwgOiBwdWJsaWMgUGxhdGZvcm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybURpc3Bs
YXlYMTEoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXlYMTEoRGlzcGxheSopOworICAgIHZpcnR1YWwg
flBsYXRmb3JtRGlzcGxheVgxMSgpOworCisgICAgRGlzcGxheSogbmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNwbGF5OyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMTsgfQorCisg
ICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIGJvb2wgbV9vd25lZERpc3BsYXk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExBVEZPUk1f
RElTUExBWShQbGF0Zm9ybURpc3BsYXlYMTEsIFgxMSkKKworI2VuZGlmIC8vIFBMQVRGT1JNKFgx
MSkKKworI2VuZGlmIC8vIFBsYXRmb3JtRGlzcGxheVgxMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcAppbmRleCBmYmUwYTNmLi4wYzZhMzJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcApAQCAtMjQsMTMgKzI0
LDYgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgogCi0jaWYgUExBVEZPUk0oWDExKQotI2luY2x1ZGUg
PGdkay9nZGt4Lmg+Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXQVlMQU5EKSAmJiAhZGVmaW5lZChH
VEtfQVBJX1ZFUlNJT05fMikKLSNpbmNsdWRlIDxnZGsvZ2Rrd2F5bGFuZC5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3Jl
ZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQpAQCAtNjEs
MjggKzU0LDYgQEAgYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0
KiB3aWRnZXQpCiAgICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBH
VEtfSVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7
CiB9CiAKLURpc3BsYXlTeXN0ZW1UeXBlIGdldERpc3BsYXlTeXN0ZW1UeXBlKCkKLXsKLSNpZiBk
ZWZpbmVkKEdUS19BUElfVkVSU0lPTl8yKQotICAgIHJldHVybiBEaXNwbGF5U3lzdGVtVHlwZTo6
WDExOwotI2Vsc2UKLSAgICBzdGF0aWMgRGlzcGxheVN5c3RlbVR5cGUgdHlwZSA9IFtdIHsKLSAg
ICAgICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1
bHRfZGlzcGxheShnZGtfZGlzcGxheV9tYW5hZ2VyX2dldCgpKTsKLSNpZiBQTEFURk9STShYMTEp
Ci0gICAgICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpCi0gICAgICAgICAgICBy
ZXR1cm4gRGlzcGxheVN5c3RlbVR5cGU6OlgxMTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFdBWUxB
TkQpCi0gICAgICAgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZKGRpc3BsYXkpKQotICAgICAg
ICAgICAgcmV0dXJuIERpc3BsYXlTeXN0ZW1UeXBlOjpXYXlsYW5kOwotI2VuZGlmCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlzcGxheVN5c3RlbVR5cGU6
OlgxMTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHR5cGU7Ci0jZW5kaWYKLX0KLQogI2lmIGRlZmlu
ZWQoREVWRUxPUE1FTlRfQlVJTEQpCiBzdGF0aWMgQ1N0cmluZyB0b3BMZXZlbFBhdGgoKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCmluZGV4IDU5NWMwZDYu
LmMyYTQzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGls
aXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgK
QEAgLTI4LDEzICsyOCw2IEBAIGNsYXNzIEludFBvaW50OwogSW50UG9pbnQgY29udmVydFdpZGdl
dFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpOwogYm9vbCB3
aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0Kik7CiAKLWVudW0gY2xhc3Mg
RGlzcGxheVN5c3RlbVR5cGUgewotICAgIFgxMSwKLSAgICBXYXlsYW5kCi19OwotCi1EaXNwbGF5
U3lzdGVtVHlwZSBnZXREaXNwbGF5U3lzdGVtVHlwZSgpOwotCiAjaWYgZGVmaW5lZChERVZFTE9Q
TUVOVF9CVUlMRCkKIENTdHJpbmcgd2Via2l0QnVpbGREaXJlY3RvcnkoKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGE4ZTQ0NzguLjQ3ZDhmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAor
MjAxNS0wNS0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS11bRUZMXSBVbmlmeSBwbGF0Zm9ybSBkaXNwbGF5IGhhbmRsaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ1MTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
UmVhbGl6ZSk6IFVzZSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKQorICAgICAgICB0
byBjaGVja3QgdGhlIGRpc3BsYXkgdHlwZS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ3Jl
YXRlV2ViUGFnZSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6Y3JlYXRlQmFja2Vu
ZCk6IFBhc3MgdGhlIG5hdGl2ZSBYMTEgc2hhcmVkCisgICAgICAgIGRpc3BsYXkgdG8gQmFja2lu
Z1N0b3JlQmFja2VuZENhaXJvWDExLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbjo6eDExSG9zdERpc3BsYXkpOiBSZXR1cm4gdGhlIG5hdGl2ZSBYMTEKKyAgICAgICAg
c2hhcmVkIGRpc3BsYXkuCisKIDIwMTUtMDQtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBJbXBsZW1l
bnQgU2hhcmVhYmxlUmVzb3VyY2UgZm9yIFNvdXAgYW5kIGVuYWJsZSBpdCBmb3IgR1RLIHBsYXRm
b3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKaW5kZXggM2FjZmE4Ni4uMWQ3MzAxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAt
NTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9h
cmRIZWxwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxheS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgog
I2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTMyMCw4ICszMjEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKIAogI2lmIFVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQotICAgIEdka0Rpc3BsYXkqIGRpc3BsYXkgPSBnZGtfZGlzcGxh
eV9tYW5hZ2VyX2dldF9kZWZhdWx0X2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfbWFuYWdlcl9nZXQoKSk7
Ci0gICAgaWYgKEdES19JU19YMTFfRElTUExBWShkaXNwbGF5KSkgeworICAgIGlmIChQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBl
OjpYMTEpIHsKICAgICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdyA9IFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjcmVhdGUoCiAgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9wYXJlbnRf
d2luZG93KHdpZGdldCksCiAgICAgICAgICAgICBbd2ViVmlld10gewpAQCAtMTEzMyw4ICsxMTMz
LDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBXZWJQcm8KICNpZiBQTEFURk9STShXQVlMQU5EKQogICAg
IC8vIEZJWE1FOiBBY2NlbGVyYXRlZCBjb21wb3NpdGluZyB1bmRlciBXYXlsYW5kIGlzIG5vdCB5
ZXQgc3VwcG9ydGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTU4MDMKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlfbWFuYWdl
cl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0KCkpOwotICAgIGlm
IChHREtfSVNfV0FZTEFORF9ESVNQTEFZKGRpc3BsYXkpKQorICAgIGlmIChQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpXYXls
YW5kKQogICAgICAgICBwcmVmZXJlbmNlcy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQoZmFsc2UpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Y2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IDY1NThkYWYuLmJkODBiMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJv
LmNwcApAQCAtMzgsNiArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShY
MTEpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNr
aW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlz
cGxheVgxMS5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+CiAjZW5kaWYKIApAQCAtNDgsMTEgKzQ5
LDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdTdG9yZUJh
Y2tlbmRDYWlybz4gQmFja2luZ1N0b3JlOjpjcmVhdGVCYWNrZW5kKCkKIHsKICNpZiBQTEFURk9S
TShHVEspICYmIFBMQVRGT1JNKFgxMSkKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rp
c3BsYXlfbWFuYWdlcl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0
KCkpOwotICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpIHsKKyAgICBjb25zdCBh
dXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCk7Cisg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKICAgICAgICAg
R2RrVmlzdWFsKiB2aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwobV93ZWJQYWdlUHJveHku
dmlld1dpZGdldCgpKTsKICAgICAgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfdmlzdWFsX2dl
dF9zY3JlZW4odmlzdWFsKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QmFja2lu
Z1N0b3JlQmFja2VuZENhaXJvWDExPihHREtfU0NSRUVOX1hESVNQTEFZKHNjcmVlbiksIEdES19X
SU5ET1dfWElEKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAorICAgICAgICBB
U1NFUlQoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUo
KSA9PSBHREtfU0NSRUVOX1hESVNQTEFZKHNjcmVlbikpOworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxCYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTE+KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCksIEdES19XSU5ET1dfWElEKGdka19z
Y3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAogICAgICAgICAgICAgR0RLX1ZJU1VBTF9Y
VklTVUFMKHZpc3VhbCksIGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCksIG1fc2l6ZSwgbV9k
ZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2Nh
cGVQbHVnaW5YMTEuY3BwCmluZGV4IDc4N2JmYTkuLjM3ZjQ3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Y
MTEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94
MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlz
cGxheVgxMS5oPgogCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPGd0ay9ndGsuaD4KQEAg
LTEwMywxMyArMTA0LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJvb3RXaW5kb3dJ
RCgpCiAKIERpc3BsYXkqIE5ldHNjYXBlUGx1Z2luOjp4MTFIb3N0RGlzcGxheSgpCiB7Ci0jaWYg
UExBVEZPUk0oR1RLKQotICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpKTsKLSNlbGlmIFBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChIQVZFX0VD
T1JFX1gpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlf
Z2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgorICAgIHJldHVybiBkb3duY2Fz
dDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5u
YXRpdmUoKTsKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykK
</data>
<flag name="review"
          id="277055"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252265</attachid>
            <date>2015-05-03 04:44:16 -0700</date>
            <delta_ts>2015-05-03 04:44:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk-platform-display.diff</filename>
            <type>text/plain</type>
            <size>56461</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxODJkNDFhLi43MjEzZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTUtMDUtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW0VGTF0gVW5pZnkgcGxhdGZvcm0gZGlzcGxheSBoYW5kbGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgorCisgICAgICAgIFRoZXJlIGFy
ZSBzZXZlcmFsIHBsYWNlcyB3ZXJlIHdlIGFyZSBoYW5kbGluZyB0aGUgWCBkaXNwbGF5CisgICAg
ICAgIGNvbm5lY3Rpb246CisKKyAgICAgICAgLSBHTENvbnRleHQ6OnNoYXJlZFgxMURpc3BsYXko
KSBjcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24uCisgICAgICAgIC0gWDExSGVscGVyOjpuYXRpdmVE
aXNwbGF5KCkgY3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uLgorICAgICAgICAtIEJhY2tpbmdTdG9y
ZUJhY2tlbmRDYWlyb1gxMSB1c2VzIHRoZSBHVEsrIHNoYXJlZCBjb25uZWN0aW9uLgorICAgICAg
ICAtIE5ldHNjYXBlUGx1Z2luOjp4MTFIb3N0RGlzcGxheSgpIHVzZXMgdGhlIEdUSysvZWNvcmUg
c2hhcmVkIGNvbm5lY3Rpb24KKyAgICAgICAgLSBUaGUgcmVzdCBvZiB0aGUgR1RLKyBjb2RlIHVz
ZXMgdGhlIHNoYXJlZCBHVEsrIGNvbm5lY3Rpb24KKworICAgICAgICBBbmQgdGhlbiB3ZSBhbHNv
IGhhdmUgV2F5bGFuZERpc3BsYXkgYW5kIHRoZSBjb2RlIHRvIGNoZWNrIGlmIHRoZQorICAgICAg
ICBjdXJyZW50IGRpc3BsYXkgaXMgd2F5bGFuZCBvciBYMTEuCisgICAgICAgIFdlIGNvdWxkIHVu
aWZ5IGFsbCB0aGVzZSB0byBzaGFyZSB0aGUgc2FtZSBjb25uZWN0aW9uIHRvIHJlZHVjZQorICAg
ICAgICB0aGUgYW1vdW50IG9mIGlmZGVmcyBhbmQgZW5zdXJlIGEgc2luZ2xlIGNvbm5lY3Rpb24u
IFRoYXQgd2lsbAorICAgICAgICBhbHNvIGFsbG93IHVzIHRvIHVzZSAic21hcnQgcG9pbnRlcnMi
IGZvciB0aGUgWCByZXNvdXJjZXMgdGhhdAorICAgICAgICBuZWVkIGEgRGlzcGxheSogdG8gYmUg
ZnJlZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkIG5ldyBmaWxlcyB0byBj
b21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogTW92ZSBzb21lIGZpbGVz
IHRvIFdlYkNvcmVfU09VUkNFUyBzaW5jIGV0aGV5CisgICAgICAgIGRvbid0IHVzZSBHVEsrIGFu
eW1vcmUsIGFuZCBhZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6
OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk6IFJlbW92ZSB0aGUKKyAgICAgICAgY3VzdG9t
IFgxMSBjb25uZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R0xDb250ZXh0OjpjcmVhdGVDb250
ZXh0Rm9yV2luZG93KTogQ2hlY2sgaWYgdGhlIHNoYXJlZAorICAgICAgICBkaXNwbGF5IGlzIFdh
eWxhbmQgdG8gY3JlYXRlIGEgRUdMIGNvbnRleHQgaW4gc3VjaCBjYXNlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5OjpjcmVhdGVQbGF0Zm9ybURpc3BsYXkpOiBDcmVhdGVzIHRo
ZQorICAgICAgICBzaGFyZWQgZGlzcGxheSwgdXNpbmcgdGhlIEdUSysvZWNvcmUgc2hhcmVkIGNv
bm5lY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXkpOiBSZXR1cm4gdGhlIHNoYXJlZCBkaXNwbGF5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtRGlzcGxheS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZ2wvR0xDb250ZXh0RUdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEVHTERpc3Bs
YXkpOiBVc2UgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkKKyAgICAgICAgdG8gZ2V0
IHRoZSBuYXRpdmUgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEVHTDo6Y3Jl
YXRlUGl4bWFwQ29udGV4dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ds
eC9HTENvbnRleHRHTFguY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpjcmVh
dGVXaW5kb3dDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHRHTFg6
OmNyZWF0ZVBidWZmZXJDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHTENvbnRl
eHRHTFg6OmNyZWF0ZVBpeG1hcENvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R0xD
b250ZXh0R0xYOjp+R0xDb250ZXh0R0xYKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHTENv
bnRleHRHTFg6OmRlZmF1bHRGcmFtZUJ1ZmZlclNpemUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkdMQ29udGV4dEdMWDo6bWFrZUNvbnRleHRDdXJyZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpHTENvbnRleHRHTFg6OnN3YXBCdWZmZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpHTENvbnRleHRHTFg6OmNhaXJvRGV2aWNlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW5z
dXJlR3N0R0xDb250ZXh0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5h
dGl2ZURpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5k
L1BsYXRmb3JtRGlzcGxheVdheWxhbmQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRGlzcGxheS5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpnbG9iYWxDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpnbG9iYWxSZW1vdmVDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpjcmVhdGUpOiBSZW5h
bWVkIGluc3RhbmNlKCkgYXMKKyAgICAgICAgY3JlYXRlKCkgc2luY2UgdGhlIHNpbmdsZSBpbnN0
YW5jZSBpcyBub3cgaGFuZGxlZCBieSBQbGF0Zm9ybURpc3BsYXkuCisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpQbGF0Zm9ybURpc3BsYXlXYXlsYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheVdheWxhbmQ6OmNyZWF0ZVN1cmZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3JlYXRlU2hhcmluZ0dMQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3Bs
YXlXYXlsYW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
eDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1EaXNwbGF5WDExOjpQbGF0Zm9ybURpc3BsYXlYMTEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1EaXNwbGF5WDExOjp+UGxhdGZvcm1EaXNwbGF5WDExKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGlz
cGxheVN5c3RlbVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtVdGls
aXRpZXMuaDoKKwogMjAxNS0wNC0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIE5ldHdvcmsgQ2FjaGU6IEltcGxlbWVudCBTaGFy
ZWFibGVSZXNvdXJjZSBmb3IgU291cCBhbmQgZW5hYmxlIGl0IGZvciBHVEsgcGxhdGZvcm0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNzIzZTM1Zi4uZTYzMzBjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTE3LDYgKzE3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3gxMSIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vbGludXgiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L21lZGlhc3RyZWFtL29wZW53ZWJydGMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UiCkBAIC0xMDcsNiArMTA4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTIu
Y3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09G
RkZpbGVGb3JtYXQuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3Rv
cmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcApAQCAtMTk1LDYgKzE5Nyw4IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9U
aWxlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZv
cm1EaXNwbGF5WDExLmNwcAorCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZmNlNTk3NC4uODE5ZjViYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE3LDYgKzE3LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vbGludXgiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21lZGlh
c3RyZWFtL29wZW53ZWJydGMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21vY2svbWVk
aWFzb3VyY2UiCkBAIC02Myw2ICs2NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUxLmNwcAogICAg
IHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUyLmNwcAogCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKQEAgLTg3
LDExICs4OSwxNSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWdsL0dMQ29udGV4dEVHTC5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCkBAIC0xMTksNiArMTI1LDggQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0
Zm9ybURpc3BsYXlYMTEuY3BwCisKICAgICBwbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0
ZW1HdGsuY3BwCkBAIC0xOTEsMTQgKzE5OSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZv
cm1HVEtfU09VUkNFUwogICAgIHBhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAogICAgIHBh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29u
dGV4dC5jcHAKLQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKLQogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Db2xvckd0ay5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9V
dGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCkBAIC00
NzIsNyArNDc2LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogCiBpZiAoRU5BQkxFX1dBWUxBTkRf
VEFSR0VUKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZERpc3BsYXkuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRXZlbnRTb3VyY2UuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZFN1cmZhY2UuY3BwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCmluZGV4IGY1
NjI0ZWMuLmM5NTlhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dMQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R0xDb250ZXh0LmNwcApAQCAtMjIsNiArMjIsOSBAQAogCiAjaW5jbHVkZSAiR0xDb250ZXh0Lmgi
CiAKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KKwogI2lmIFVTRShFR0wpCiAjaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCiAjZW5k
aWYKQEAgLTMwLDE5ICszMyw2IEBACiAjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCiAjZW5kaWYK
IAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotCi0jaWYgUExBVEZPUk0oWDExKQot
I2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSNpbmNs
dWRlIDxnZGsvZ2RrLmg+Ci0jaWYgUExBVEZPUk0oV0FZTEFORCkgJiYgIWRlZmluZWQoR1RLX0FQ
SV9WRVJTSU9OXzIpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19XQVlMQU5EKQotI2luY2x1ZGUg
PGdkay9nZGt3YXlsYW5kLmg+Ci0jZW5kaWYKLSNlbmRpZgotCiB1c2luZyBXVEY6OlRocmVhZFNw
ZWNpZmljOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NCwyNSArNjQsNiBAQCBHTENvbnRl
eHQqIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKQogfQogCiAjaWYgUExBVEZPUk0oWDExKQot
Ly8gV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4dEN1cnJlbnQgdXNpbmcgZGlm
ZmVyZW50IERpc3BsYXkgcG9pbnRlcnMsCi0vLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jh
c2hlcyBpbiBzb21lIGRyaXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKLS8v
IHBvaW50ZXIgaGVyZS4KLXN0YXRpYyBEaXNwbGF5KiBnU2hhcmVkWDExRGlzcGxheSA9IDA7Ci1E
aXNwbGF5KiBHTENvbnRleHQ6OnNoYXJlZFgxMURpc3BsYXkoKQotewotICAgIGlmICghZ1NoYXJl
ZFgxMURpc3BsYXkpCi0gICAgICAgIGdTaGFyZWRYMTFEaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDAp
OwotICAgIHJldHVybiBnU2hhcmVkWDExRGlzcGxheTsKLX0KLQotdm9pZCBHTENvbnRleHQ6OmNs
ZWFudXBTaGFyZWRYMTFEaXNwbGF5KCkKLXsKLSAgICBpZiAoIWdTaGFyZWRYMTFEaXNwbGF5KQot
ICAgICAgICByZXR1cm47Ci0gICAgWENsb3NlRGlzcGxheShnU2hhcmVkWDExRGlzcGxheSk7Ci0g
ICAgZ1NoYXJlZFgxMURpc3BsYXkgPSAwOwotfQotCiAvLyBCZWNhdXNlIG9mIGRyaXZlciBidWdz
LCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSBwYnVmZmVycwogLy8g
Y2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBvYnNlcnZlZCB3aXRoIHRoZSBv
ZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCiAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNs
ZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucwpAQCAt
MTM3LDE4ICsxMDgsMTQgQEAgdm9pZCBHTENvbnRleHQ6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0
RXhpdCgpCiAgICAgQWN0aXZlQ29udGV4dExpc3QmIGNvbnRleHRMaXN0ID0gYWN0aXZlQ29udGV4
dExpc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRMaXN0LnNpemUoKTsg
KytpKQogICAgICAgICBkZWxldGUgY29udGV4dExpc3RbaV07Ci0KLSAgICBjbGVhbnVwU2hhcmVk
WDExRGlzcGxheSgpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkKIAogCiBzdGQ6OnVuaXF1
ZV9wdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3coR0xOYXRp
dmVXaW5kb3dUeXBlIHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCkKIHsK
LSNpZiBQTEFURk9STShHVEspICYmIFBMQVRGT1JNKFdBWUxBTkQpICYmICFkZWZpbmVkKEdUS19B
UElfVkVSU0lPTl8yKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0FZTEFORCkgJiYgVVNFKEVH
TCkKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlfbWFuYWdlcl9nZXRfZGVm
YXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0KCkpOwotCi0gICAgaWYgKEdES19J
U19XQVlMQU5EX0RJU1BMQVkoZGlzcGxheSkpIHsKKyNpZiBQTEFURk9STShXQVlMQU5EKSAmJiBV
U0UoRUdMKQorICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkg
PT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpXYXlsYW5kKSB7CiAgICAgICAgIGlmIChhdXRvIGVn
bENvbnRleHQgPSBHTENvbnRleHRFR0w6OmNyZWF0ZUNvbnRleHQod2luZG93SGFuZGxlLCBzaGFy
aW5nQ29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGVnbENvbnRleHQpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU4YmRkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYgUExBVEZPUk0oWDExKQorI2luY2x1ZGUg
IlBsYXRmb3JtRGlzcGxheVgxMS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQor
I2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oR1RLKQorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVG
TCkgJiYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtRGlzcGxh
eT4gUGxhdGZvcm1EaXNwbGF5OjpjcmVhdGVQbGF0Zm9ybURpc3BsYXkoKQoreworI2lmIFBMQVRG
T1JNKEdUSykKKyNpZiBkZWZpbmVkKEdUS19BUElfVkVSU0lPTl8yKQorICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFBsYXRmb3JtRGlzcGxheVgxMT4oR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2Rr
X2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSkpOworI2Vsc2UKKyAgICBHZGtEaXNwbGF5KiBkaXNwbGF5
ID0gZ2RrX2Rpc3BsYXlfbWFuYWdlcl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21h
bmFnZXJfZ2V0KCkpOworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICBpZiAoR0RLX0lTX1gxMV9ESVNQ
TEFZKGRpc3BsYXkpKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybURp
c3BsYXlYMTE+KEdES19ESVNQTEFZX1hESVNQTEFZKGRpc3BsYXkpKTsKKyNlbmRpZgorI2lmIFBM
QVRGT1JNKFdBWUxBTkQpCisgICAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkoZGlzcGxheSkp
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpjcmVhdGUoKTsKKyNlbmRp
ZgorI2VuZGlmCisjZWxpZiBQTEFURk9STShFRkwpICYmIGRlZmluZWQoSEFWRV9FQ09SRV9YKQor
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtRGlzcGxheVgxMT4oc3RhdGljX2Nh
c3Q8RGlzcGxheSo+KGVjb3JlX3hfZGlzcGxheV9nZXQoKSkpOworI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShYMTEpCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1EaXNwbGF5WDEx
PigpOworI2VuZGlmCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworUGxhdGZvcm1EaXNwbGF5JiBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXkoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtRGlzcGxheT4gZGlzcGxheTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlRmxhZywgW117CisgICAgICAgIGRpc3BsYXkgPSBjcmVhdGVQbGF0Zm9ybURpc3Bs
YXkoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKmRpc3BsYXk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1EaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxMjcwZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtRGlzcGxheS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
SWdhbGlhIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1EaXNwbGF5X2gKKyNkZWZpbmUgUGxhdGZv
cm1EaXNwbGF5X2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9UeXBlQ2FzdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybURp
c3BsYXkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtRGlzcGxheSk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQbGF0Zm9ybURpc3BsYXkm
IHNoYXJlZERpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1
bHQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICAgICAg
WDExLAorI2VuZGlmCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICAgICAgV2F5bGFuZCwKKyNl
bmRpZgorICAgIH07CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKworcHJv
dGVjdGVkOgorICAgIFBsYXRmb3JtRGlzcGxheSgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtRGlzcGxheT4gY3JlYXRlUGxhdGZvcm1E
aXNwbGF5KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19QTEFURk9STV9ESVNQTEFZKFRvQ2xhc3NOYW1lLCBEaXNwbGF5VHlw
ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkg
XAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXkm
IGRpc3BsYXkpIHsgcmV0dXJuIGRpc3BsYXkudHlwZSgpID09IFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheTo6VHlwZTo6RGlzcGxheVR5cGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorCisjZW5kaWYgLy8gUGx0Zm9ybURpc3BsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAppbmRleCBlNWUzMWZiLi5m
MmUyYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wv
R0xDb250ZXh0RUdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
Z2wvR0xDb250ZXh0RUdMLmNwcApAQCAtMzQsMTEgKzM0LDEyIEBACiAjaW5jbHVkZSAiT3BlbkdM
U2hpbXMuaCIKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgIkd0a1V0aWxp
dGllcy5oIgotI2lmIFBMQVRGT1JNKFdBWUxBTkQpICYmICFkZWZpbmVkKEdUS19BUElfVkVSU0lP
Tl8yKQotI2luY2x1ZGUgIldheWxhbmREaXNwbGF5LmgiCisjaWYgUExBVEZPUk0oWDExKQorI2lu
Y2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgogI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlM
QU5EKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKICNlbmRpZgogCiAjaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKQEAgLTY0LDEzICs2NSwxNSBAQCBzdGF0aWMg
RUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOwotI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oV0FZTEFORCkgJiYgIWRlZmlu
ZWQoR1RLX0FQSV9WRVJTSU9OXzIpCi0gICAgICAgIGlmIChnZXREaXNwbGF5U3lzdGVtVHlwZSgp
ID09IERpc3BsYXlTeXN0ZW1UeXBlOjpXYXlsYW5kICYmIFdheWxhbmREaXNwbGF5OjppbnN0YW5j
ZSgpKQotICAgICAgICAgICAgZ1NoYXJlZEVHTERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KFdheWxh
bmREaXNwbGF5OjppbnN0YW5jZSgpLT5uYXRpdmVEaXNwbGF5KCkpOworCisgICAgICAgIGNvbnN0
IGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKTsK
KyNpZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5
bGFuZD4oc2hhcmVkRGlzcGxheSkpCisgICAgICAgICAgICBnU2hhcmVkRUdMRGlzcGxheSA9IGVn
bEdldERpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxh
eSkubmF0aXZlKCkpOwogICAgICAgICBlbHNlIC8vIE5vdGUgdGhhdCB0aGlzIGJyYW5jaCBjb250
aW51dGVzIG91dHNpZGUgdGhpcyAjaWYtZ3VhcmRlZCBzZWdtZW50LgogI2VuZGlmCiAjaWYgUExB
VEZPUk0oWDExKQotICAgICAgICAgICAgZ1NoYXJlZEVHTERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5
KEdMQ29udGV4dDo6c2hhcmVkWDExRGlzcGxheSgpKTsKKyAgICAgICAgICAgIGdTaGFyZWRFR0xE
aXNwbGF5ID0gZWdsR2V0RGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJl
ZERpc3BsYXkpLm5hdGl2ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICBnU2hhcmVkRUdMRGlzcGxh
eSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CiAjZW5kaWYKQEAgLTE4Niw3
ICsxODksOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0RUdMPiBHTENvbnRleHRFR0w6OmNy
ZWF0ZVBpeG1hcENvbnRleHQoRUdMQ29udGV4dCBzaGFyaQogICAgIGlmICghZWdsR2V0Q29uZmln
QXR0cmliKGRpc3BsYXksIGNvbmZpZywgRUdMX0RFUFRIX1NJWkUsICZkZXB0aCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQaXhtYXAoc2hh
cmVkWDExRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWRYMTFEaXNwbGF5KCkpLCAx
LCAxLCBkZXB0aCk7CisgICAgRGlzcGxheSogeDExRGlzcGxheSA9IGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5hdGl2ZSgpOwor
ICAgIFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFwKHgxMURpc3BsYXksIERlZmF1bHRSb290
V2luZG93KHgxMURpc3BsYXkpLCAxLCAxLCBkZXB0aCk7CiAgICAgaWYgKCFwaXhtYXApCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCmluZGV4IGM2NzBkMjEuLmY3NDY3YTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRH
TFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRl
eHRHTFguY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1EaXNwbGF5WDExLmgiCiAjaW5jbHVkZSA8R0wvZ2x4Lmg+CiAjaW5jbHVkZSA8Y2Fpcm8u
aD4KIApAQCAtMzMsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVl
X3B0cjxHTENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChYSUQg
d2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQogewotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBzaGFyZWRYMTFEaXNwbGF5KCk7CisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5h
dGl2ZSgpOwogICAgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgaWYgKCFYR2V0
V2luZG93QXR0cmlidXRlcyhkaXNwbGF5LCB3aW5kb3csICZhdHRyaWJ1dGVzKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC03Miw3ICs3Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRl
eHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQoR0xYQ29udGV4dCBzaGFy
CiAgICAgfTsKIAogICAgIGludCByZXR1cm5lZEVsZW1lbnRzOwotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBzaGFyZWRYMTFEaXNwbGF5KCk7CisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5h
dGl2ZSgpOwogICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlz
cGxheSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7CiAgICAgaWYg
KCFyZXR1cm5lZEVsZW1lbnRzKSB7CiAgICAgICAgIFhGcmVlKGNvbmZpZ3MpOwpAQCAtMTEyLDcg
KzExMyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3Jl
YXRlUGl4bWFwQ29udGV4dChHTFhDb250ZXh0IHNoYXJpCiAgICAgICAgIDAKICAgICB9OwogCi0g
ICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZFgxMURpc3BsYXkoKTsKKyAgICBEaXNwbGF5KiBk
aXNwbGF5ID0gZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXkoKSkubmF0aXZlKCk7CiAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBn
bFhDaG9vc2VWaXN1YWwoZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwgdmlzdWFsQXR0
cmlidXRlcyk7CiAgICAgaWYgKCF2aXN1YWxJbmZvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTE0Miw5ICsxNDMsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0R0xYPiBHTENvbnRl
eHRHTFg6OmNyZWF0ZVBpeG1hcENvbnRleHQoR0xYQ29udGV4dCBzaGFyaQogCiBzdGQ6OnVuaXF1
ZV9wdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRv
dywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCkKIHsKLSAgICBpZiAoIXNoYXJlZFgxMURpc3Bs
YXkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwogICAgIGlmICgh
aW5pdGlhbGl6ZWQpIHsKQEAgLTE5MSwyNCArMTg5LDI1IEBAIEdMQ29udGV4dEdMWDo6fkdMQ29u
dGV4dEdMWCgpCiAgICAgaWYgKG1fY2Fpcm9EZXZpY2UpCiAgICAgICAgIGNhaXJvX2RldmljZV9k
ZXN0cm95KG1fY2Fpcm9EZXZpY2UpOwogCisgICAgRGlzcGxheSogZGlzcGxheSA9IGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkpLm5h
dGl2ZSgpOwogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgLy8gVGhpcyBtYXkgYmUgbmVj
ZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3NlZCBzb3VyY2UgZHJp
dmVycy4gT3JpZ2luYWxseQogICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAzRCBjYW52YXMgaW1w
bGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9jYW52YXMzZC8KICAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsKLSAgICAg
ICAgZ2xYTWFrZUN1cnJlbnQoc2hhcmVkWDExRGlzcGxheSgpLCBOb25lLCBOb25lKTsKLSAgICAg
ICAgZ2xYRGVzdHJveUNvbnRleHQoc2hhcmVkWDExRGlzcGxheSgpLCBtX2NvbnRleHQpOworICAg
ICAgICBnbFhNYWtlQ3VycmVudChkaXNwbGF5LCBOb25lLCBOb25lKTsKKyAgICAgICAgZ2xYRGVz
dHJveUNvbnRleHQoZGlzcGxheSwgbV9jb250ZXh0KTsKICAgICB9CiAKICAgICBpZiAobV9wYnVm
ZmVyKSB7Ci0gICAgICAgIGdsWERlc3Ryb3lQYnVmZmVyKHNoYXJlZFgxMURpc3BsYXkoKSwgbV9w
YnVmZmVyKTsKKyAgICAgICAgZ2xYRGVzdHJveVBidWZmZXIoZGlzcGxheSwgbV9wYnVmZmVyKTsK
ICAgICAgICAgbV9wYnVmZmVyID0gMDsKICAgICB9CiAgICAgaWYgKG1fZ2x4UGl4bWFwKSB7Ci0g
ICAgICAgIGdsWERlc3Ryb3lHTFhQaXhtYXAoc2hhcmVkWDExRGlzcGxheSgpLCBtX2dseFBpeG1h
cCk7CisgICAgICAgIGdsWERlc3Ryb3lHTFhQaXhtYXAoZGlzcGxheSwgbV9nbHhQaXhtYXApOwog
ICAgICAgICBtX2dseFBpeG1hcCA9IDA7CiAgICAgfQogICAgIGlmIChtX3BpeG1hcCkgewotICAg
ICAgICBYRnJlZVBpeG1hcChzaGFyZWRYMTFEaXNwbGF5KCksIG1fcGl4bWFwKTsKKyAgICAgICAg
WEZyZWVQaXhtYXAoZGlzcGxheSwgbV9waXhtYXApOwogICAgICAgICBtX3BpeG1hcCA9IDA7CiAg
ICAgfQogfQpAQCAtMjI2LDcgKzIyNSw4IEBAIEludFNpemUgR0xDb250ZXh0R0xYOjpkZWZhdWx0
RnJhbWVCdWZmZXJTaXplKCkKICAgICBpbnQgeCwgeTsKICAgICBXaW5kb3cgcm9vdFdpbmRvdzsK
ICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgYm9yZGVyV2lkdGgsIGRlcHRoOwotICAg
IGlmICghWEdldEdlb21ldHJ5KHNoYXJlZFgxMURpc3BsYXkoKSwgbV93aW5kb3csICZyb290V2lu
ZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmJvcmRlcldpZHRoLCAmZGVwdGgpKQorICAg
IERpc3BsYXkqIGRpc3BsYXkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKKyAgICBpZiAoIVhHZXRHZW9tZXRy
eShkaXNwbGF5LCBtX3dpbmRvdywgJnJvb3RXaW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
LCAmYm9yZGVyV2lkdGgsICZkZXB0aCkpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAKICAg
ICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKQEAgLTI0MCwxOSArMjQwLDIwIEBAIGJv
b2wgR0xDb250ZXh0R0xYOjptYWtlQ29udGV4dEN1cnJlbnQoKQogICAgIGlmIChnbFhHZXRDdXJy
ZW50Q29udGV4dCgpID09IG1fY29udGV4dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCk7CiAgICAgaWYgKG1fd2luZG93KQotICAg
ICAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc2hhcmVkWDExRGlzcGxheSgpLCBtX3dpbmRvdywg
bV9jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KGRpc3BsYXksIG1fd2lu
ZG93LCBtX2NvbnRleHQpOwogCiAgICAgaWYgKG1fcGJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGds
WE1ha2VDdXJyZW50KHNoYXJlZFgxMURpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQpOwor
ICAgICAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlzcGxheSwgbV9wYnVmZmVyLCBtX2NvbnRl
eHQpOwogCi0gICAgcmV0dXJuIDo6Z2xYTWFrZUN1cnJlbnQoc2hhcmVkWDExRGlzcGxheSgpLCBt
X2dseFBpeG1hcCwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gOjpnbFhNYWtlQ3VycmVudChkaXNw
bGF5LCBtX2dseFBpeG1hcCwgbV9jb250ZXh0KTsKIH0KIAogdm9pZCBHTENvbnRleHRHTFg6OnN3
YXBCdWZmZXJzKCkKIHsKICAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGdsWFN3YXBCdWZmZXJz
KHNoYXJlZFgxMURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICBnbFhTd2FwQnVmZmVycyhk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eSgpKS5uYXRpdmUoKSwgbV93aW5kb3cpOwogfQogCiB2b2lkIEdMQ29udGV4dEdMWDo6d2FpdE5h
dGl2ZSgpCkBAIC0yNjYsNyArMjY3LDcgQEAgY2Fpcm9fZGV2aWNlX3QqIEdMQ29udGV4dEdMWDo6
Y2Fpcm9EZXZpY2UoKQogICAgICAgICByZXR1cm4gbV9jYWlyb0RldmljZTsKIAogI2lmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgbV9jYWlyb0RldmljZSA9IGNhaXJvX2dseF9k
ZXZpY2VfY3JlYXRlKHNoYXJlZFgxMURpc3BsYXkoKSwgbV9jb250ZXh0KTsKKyAgICBtX2NhaXJv
RGV2aWNlID0gY2Fpcm9fZ2x4X2RldmljZV9jcmVhdGUoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5
WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCksIG1fY29udGV4
dCk7CiAjZW5kaWYKIAogICAgIHJldHVybiBtX2NhaXJvRGV2aWNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IDQ5OTU1Mzku
LmIwMGI3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZS5jcHAKQEAgLTcxLDYgKzcxLDEyIEBACiAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9n
c3RnbGRpc3BsYXlfZWdsLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRl
ICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbGlmIFBMQVRGT1JNKFdBWUxBTkQpCisjaW5jbHVk
ZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5oIgorI2VuZGlmCisKIC8vIGdzdGdsYXBpLmggbWF5
IGluY2x1ZGUgZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAogLy8gZGVm
aW5lcyBOb25lLCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCiAjaWYgUExBVEZPUk0o
WDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKQEAgLTIyOCwxMiArMjM0LDExIEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW5zdXJlR3N0R0xDb250ZXh0KCkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIW1fZ2xEaXNwbGF5KSB7CisgICAgICAg
IGNvbnN0IGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXkoKTsKICNpZiBQTEFURk9STShYMTEpCi0gICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENv
bnRleHQ6OnNoYXJlZFgxMURpc3BsYXkoKTsKLSAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkaXNwbGF5KSk7Cisg
ICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25l
d193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5
KS5uYXRpdmUoKSkpOwogI2VsaWYgUExBVEZPUk0oV0FZTEFORCkKLSAgICAgICAgRUdMRGlzcGxh
eSBkaXNwbGF5ID0gV2F5bGFuZERpc3BsYXk6Omluc3RhbmNlKCktPmVnbERpc3BsYXkoKTsKLSAg
ICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3
X3dpdGhfZWdsX2Rpc3BsYXkoZGlzcGxheSkpOworICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2Fz
dDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwogI2Vu
ZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwCmluZGV4IDRiZTYyYmIuLjgwMTBiNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiWDExSGVscGVyLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3Bs
YXlYMTEuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBVc2VkIGZvciBoYW5kbGluZyBY
RXJyb3IuCkBAIC01MywyNSArNTUsNiBAQCBzdGF0aWMgaW50IGhhbmRsZVhQaXhtYXBDcmVhdGlv
bkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXN0cnVjdCBEaXNwbGF5Q29ubmVjdGlvbiB7Ci0gICAgRGlzcGxheUNvbm5lY3Rpb24oKQotICAg
IHsKLSAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwotCi0gICAgICAgIGlmICgh
bV9kaXNwbGF5KQotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0
aW9uIHdpdGggWCIpOwotICAgIH0KLQotICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgewot
ICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7Ci0gICAgfQotCi0gICAgRGlzcGxheSog
ZGlzcGxheSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQotcHJpdmF0ZToKLSAgICBEaXNwbGF5KiBt
X2Rpc3BsYXk7Ci19OwotCiBzdHJ1Y3QgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7CiAKICAgICBPZmZT
Y3JlZW5Sb290V2luZG93KCkKQEAgLTMzMSw5ICszMTQsNyBAQCBib29sIFgxMUhlbHBlcjo6aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKIAogRGlzcGxheSogWDExSGVscGVyOjpuYXRpdmVE
aXNwbGF5KCkKIHsKLSAgICAvLyBEaXNwbGF5IGNvbm5lY3Rpb24gd2lsbCBvbmx5IGJlIGJyb2tl
biBhdCBwcm9ncmFtIHNodXRkb3duLgotICAgIHN0YXRpYyBEaXNwbGF5Q29ubmVjdGlvbiBkaXNw
bGF5Q29ubmVjdGlvbjsKLSAgICByZXR1cm4gZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOwor
ICAgIHJldHVybiBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKIH0KIAogV2luZG93IFgxMUhlbHBlcjo6b2Zmc2Ny
ZWVuUm9vdFdpbmRvdygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93YXlsYW5kL1BsYXRmb3JtRGlzcGxheVdheWxhbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y2MWViCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3Bs
YXlXYXlsYW5kLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybURpc3BsYXlXYXlsYW5kLmgiCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorCisjaW5jbHVk
ZSAiR0xDb250ZXh0RUdMLmgiCisjaW5jbHVkZSAiV2F5bGFuZFN1cmZhY2UuaCIKKyNpbmNsdWRl
IDxjc3RyaW5nPgorI2luY2x1ZGUgPGdsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBzdHJ1Y3Qgd2xfcmVnaXN0cnlfbGlzdGVuZXIgUGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6
bV9yZWdpc3RyeUxpc3RlbmVyID0geworICAgIFBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Omdsb2Jh
bENhbGxiYWNrLAorICAgIFBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Omdsb2JhbFJlbW92ZUNhbGxi
YWNrCit9OworCit2b2lkIFBsYXRmb3JtRGlzcGxheVdheWxhbmQ6Omdsb2JhbENhbGxiYWNrKHZv
aWQqIGRhdGEsIHN0cnVjdCB3bF9yZWdpc3RyeSogcmVnaXN0cnksIHVpbnQzMl90IG5hbWUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZSwgdWludDMyX3QpCit7CisgICAgYXV0byBkaXNwbGF5ID0gc3Rh
dGljX2Nhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZCo+KGRhdGEpOworICAgIGlmICghc3RkOjpz
dHJjbXAoaW50ZXJmYWNlLCAid2xfY29tcG9zaXRvciIpKQorICAgICAgICBkaXNwbGF5LT5tX2Nv
bXBvc2l0b3IgPSBzdGF0aWNfY2FzdDxzdHJ1Y3Qgd2xfY29tcG9zaXRvcio+KHdsX3JlZ2lzdHJ5
X2JpbmQocmVnaXN0cnksIG5hbWUsICZ3bF9jb21wb3NpdG9yX2ludGVyZmFjZSwgMSkpOworICAg
IGVsc2UgaWYgKCFzdGQ6OnN0cmNtcChpbnRlcmZhY2UsICJ3bF93ZWJraXRndGsiKSkKKyAgICAg
ICAgZGlzcGxheS0+bV93ZWJraXRndGsgPSBzdGF0aWNfY2FzdDxzdHJ1Y3Qgd2xfd2Via2l0Z3Rr
Kj4od2xfcmVnaXN0cnlfYmluZChyZWdpc3RyeSwgbmFtZSwgJndsX3dlYmtpdGd0a19pbnRlcmZh
Y2UsIDEpKTsKK30KKwordm9pZCBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpnbG9iYWxSZW1vdmVD
YWxsYmFjayh2b2lkKiwgc3RydWN0IHdsX3JlZ2lzdHJ5KiwgdWludDMyX3QpCit7CisgICAgLy8g
RklYTUU6IGlmIHRoaXMgY2FuIGhhcHBlbiB3aXRob3V0IHRoZSBVSSBQcm9jZXNzIGdldHRpbmcg
c2h1dCBkb3duCisgICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgb3VyIGNhY2hlZCBk
aXNwbGF5IGluc3RhbmNlLgorfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1EaXNwbGF5V2F5
bGFuZD4gUGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3JlYXRlKCkKK3sKKyAgICBzdHJ1Y3Qgd2xf
ZGlzcGxheSogd2xEaXNwbGF5ID0gd2xfZGlzcGxheV9jb25uZWN0KCJ3ZWJraXRndGstd2F5bGFu
ZC1jb21wb3NpdG9yLXNvY2tldCIpOworICAgIGlmICghd2xEaXNwbGF5KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGlzcGxheSA9IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZv
cm1EaXNwbGF5V2F5bGFuZD4od2xEaXNwbGF5KTsKKyAgICBpZiAoIWRpc3BsYXktPmlzSW5pdGlh
bGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGOjptb3Zl
KGRpc3BsYXkpOworfQorCitQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kKHN0cnVjdCB3bF9kaXNwbGF5KiB3bERpc3BsYXkpCisgICAgOiBtX2Rpc3BsYXkod2xE
aXNwbGF5KQorICAgICwgbV9yZWdpc3RyeSh3bF9kaXNwbGF5X2dldF9yZWdpc3RyeShtX2Rpc3Bs
YXkpKQorICAgICwgbV9lZ2xDb25maWdDaG9zZW4oZmFsc2UpCit7CisgICAgd2xfcmVnaXN0cnlf
YWRkX2xpc3RlbmVyKG1fcmVnaXN0cnksICZtX3JlZ2lzdHJ5TGlzdGVuZXIsIHRoaXMpOworICAg
IHdsX2Rpc3BsYXlfcm91bmR0cmlwKG1fZGlzcGxheSk7CisKKyAgICBzdGF0aWMgY29uc3QgRUdM
aW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdM
X1dJTkRPV19CSVQsCisgICAgICAgIEVHTF9SRURfU0laRSwgMSwKKyAgICAgICAgRUdMX0dSRUVO
X1NJWkUsIDEsCisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDEsCisgICAgICAgIEVHTF9BTFBIQV9T
SVpFLCAxLAorICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQs
CisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKworICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERp
c3BsYXkobV9kaXNwbGF5KTsKKyAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZ
KSB7CisgICAgICAgIGdfd2FybmluZygiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZCBpbml0aWFsaXph
dGlvbjogZmFpbGVkIHRvIGFjcXVpcmUgRUdMIGRpc3BsYXkuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZWdsSW5pdGlhbGl6ZShtX2VnbERpc3BsYXksIDAsIDApID09IEVH
TF9GQUxTRSkgeworICAgICAgICBnX3dhcm5pbmcoIlBsYXRmb3JtRGlzcGxheVdheWxhbmQgaW5p
dGlhbGl6YXRpb246IGZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBFR0wgZGlzcGxheS4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlZ2xCaW5kQVBJKEVHTF9PUEVOR0xfRVNf
QVBJKSA9PSBFR0xfRkFMU0UpIHsKKyAgICAgICAgZ193YXJuaW5nKCJQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kIGluaXRpYWxpemF0aW9uOiBmYWlsZWQgdG8gc2V0IEVHTF9PUEVOR0xfRVNfQVBJIGFz
IHRoZSByZW5kZXJpbmcgQVBJLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdM
aW50IG51bWJlck9mQ29uZmlnczsKKyAgICBpZiAoIWVnbENob29zZUNvbmZpZyhtX2VnbERpc3Bs
YXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2VnbENvbmZpZywgMSwgJm51bWJlck9mQ29uZmlncykg
fHwgbnVtYmVyT2ZDb25maWdzICE9IDEpIHsKKyAgICAgICAgZ193YXJuaW5nKCJQbGF0Zm9ybURp
c3BsYXlXYXlsYW5kIGluaXRpYWxpemF0aW9uOiBmYWlsZWQgdG8gZmluZCB0aGUgZGVzaXJlZCBF
R0wgY29uZmlndXJhdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZWds
Q29uZmlnQ2hvc2VuID0gdHJ1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFdheWxhbmRTdXJmYWNl
PiBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kOjpjcmVhdGVTdXJmYWNlKGNvbnN0IEludFNpemUmIHNp
emUsIGludCB3aWRnZXRJZCkKK3sKKyAgICBzdHJ1Y3Qgd2xfc3VyZmFjZSogd2xTdXJmYWNlID0g
d2xfY29tcG9zaXRvcl9jcmVhdGVfc3VyZmFjZShtX2NvbXBvc2l0b3IpOworICAgIC8vIFdlIGtl
ZXAgdGhlIG1pbmltdW0gc2l6ZSBhdCAxeDFweCBzaW5jZSBNZXNhIHJldHVybnMgbnVsbCB2YWx1
ZXMgaW4gd2xfZWdsX3dpbmRvd19jcmVhdGUoKSBmb3IgemVybyB3aWR0aCBvciBoZWlnaHQuCisg
ICAgRUdMTmF0aXZlV2luZG93VHlwZSBuYXRpdmVXaW5kb3cgPSB3bF9lZ2xfd2luZG93X2NyZWF0
ZSh3bFN1cmZhY2UsIHN0ZDo6bWF4KDEsIHNpemUud2lkdGgoKSksIHN0ZDo6bWF4KDEsIHNpemUu
aGVpZ2h0KCkpKTsKKworICAgIHdsX3dlYmtpdGd0a19zZXRfc3VyZmFjZV9mb3Jfd2lkZ2V0KG1f
d2Via2l0Z3RrLCB3bFN1cmZhY2UsIHdpZGdldElkKTsKKyAgICB3bF9kaXNwbGF5X3JvdW5kdHJp
cChtX2Rpc3BsYXkpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2F5bGFuZFN1cmZh
Y2U+KHdsU3VyZmFjZSwgbmF0aXZlV2luZG93KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdMQ29u
dGV4dEVHTD4gUGxhdGZvcm1EaXNwbGF5V2F5bGFuZDo6Y3JlYXRlU2hhcmluZ0dMQ29udGV4dCgp
Cit7CisgICAgc3RydWN0IHdsX3N1cmZhY2UqIHdsU3VyZmFjZSA9IHdsX2NvbXBvc2l0b3JfY3Jl
YXRlX3N1cmZhY2UobV9jb21wb3NpdG9yKTsKKyAgICBFR0xOYXRpdmVXaW5kb3dUeXBlIG5hdGl2
ZVdpbmRvdyA9IHdsX2VnbF93aW5kb3dfY3JlYXRlKHdsU3VyZmFjZSwgMSwgMSk7CisgICAgcmV0
dXJuIEdMQ29udGV4dEVHTDo6Y3JlYXRlV2luZG93Q29udGV4dChuYXRpdmVXaW5kb3csIG51bGxw
dHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShX
QVlMQU5EKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5
bGFuZC9QbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93YXlsYW5kL1BsYXRmb3JtRGlzcGxheVdheWxhbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xOTU4OWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgK
QEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgIFBsYXRmb3JtRGlzcGxheVdheWxhbmRfaAorI2RlZmluZSAgUGxhdGZv
cm1EaXNwbGF5V2F5bGFuZF9oCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorCisjaW5jbHVkZSAi
UGxhdGZvcm1EaXNwbGF5LmgiCisjaW5jbHVkZSAiV2ViS2l0R3RrV2F5bGFuZENsaWVudFByb3Rv
Y29sLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHdheWxhbmQtY2xpZW50Lmg+Cisj
aW5jbHVkZSA8d2F5bGFuZC1lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR0xDb250ZXh0RUdMOworY2xhc3MgSW50U2l6ZTsKK2NsYXNz
IFdheWxhbmRTdXJmYWNlOworCitjbGFzcyBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kIGZpbmFsOiBw
dWJsaWMgUGxhdGZvcm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgflBsYXRm
b3JtRGlzcGxheVdheWxhbmQoKTsKKworICAgIHN0cnVjdCB3bF9kaXNwbGF5KiBuYXRpdmUoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3BsYXk7IH0KKyAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkoKSBj
b25zdCB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXls
YW5kU3VyZmFjZT4gY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiwgaW50IHdpZGdldElEKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRFR0w+IGNyZWF0ZVNoYXJpbmdHTENvbnRl
eHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHdsX3JlZ2lzdHJ5X2xp
c3RlbmVyIG1fcmVnaXN0cnlMaXN0ZW5lcjsKKyAgICBzdGF0aWMgdm9pZCBnbG9iYWxDYWxsYmFj
ayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqLCB1aW50MzJfdCBuYW1lLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90IHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGdsb2Jh
bFJlbW92ZUNhbGxiYWNrKHZvaWQqIGRhdGEsIHN0cnVjdCB3bF9yZWdpc3RyeSosIHVpbnQzMl90
IG5hbWUpOworCisgICAgUGxhdGZvcm1EaXNwbGF5V2F5bGFuZChzdHJ1Y3Qgd2xfZGlzcGxheSop
OworICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIHsgcmV0dXJuIG1fY29tcG9zaXRvciAmJiBtX3dl
YmtpdGd0ayAmJiBtX2VnbERpc3BsYXkgIT0gRUdMX05PX0RJU1BMQVkgJiYgbV9lZ2xDb25maWdD
aG9zZW47IH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRm
b3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZDsgfQorCisgICAgc3RydWN0IHdsX2Rpc3BsYXkqIG1f
ZGlzcGxheTsKKyAgICBzdHJ1Y3Qgd2xfcmVnaXN0cnkqIG1fcmVnaXN0cnk7CisgICAgc3RydWN0
IHdsX2NvbXBvc2l0b3IqIG1fY29tcG9zaXRvcjsKKyAgICBzdHJ1Y3Qgd2xfd2Via2l0Z3RrKiBt
X3dlYmtpdGd0azsKKworICAgIEVHTERpc3BsYXkgbV9lZ2xEaXNwbGF5OworICAgIEVHTENvbmZp
ZyBtX2VnbENvbmZpZzsKKyAgICBib29sIG1fZWdsQ29uZmlnQ2hvc2VuOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0FZTEFORCkKKworI2VuZGlm
IC8vIFBsYXRmb3JtRGlzcGxheVdheWxhbmRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1NDdhNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmREaXNwbGF5LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldheWxhbmREaXNw
bGF5LmgiCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdM
LmgiCi0jaW5jbHVkZSAiV2F5bGFuZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxjc3RyaW5nPgotI2lu
Y2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBzdHJ1Y3Qgd2xf
cmVnaXN0cnlfbGlzdGVuZXIgV2F5bGFuZERpc3BsYXk6Om1fcmVnaXN0cnlMaXN0ZW5lciA9IHsK
LSAgICBXYXlsYW5kRGlzcGxheTo6Z2xvYmFsQ2FsbGJhY2ssCi0gICAgV2F5bGFuZERpc3BsYXk6
Omdsb2JhbFJlbW92ZUNhbGxiYWNrCi19OwotCi12b2lkIFdheWxhbmREaXNwbGF5OjpnbG9iYWxD
YWxsYmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqIHJlZ2lzdHJ5LCB1aW50MzJf
dCBuYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90KQotewotICAgIGF1dG8gZGlz
cGxheSA9IHN0YXRpY19jYXN0PFdheWxhbmREaXNwbGF5Kj4oZGF0YSk7Ci0gICAgaWYgKCFzdGQ6
OnN0cmNtcChpbnRlcmZhY2UsICJ3bF9jb21wb3NpdG9yIikpCi0gICAgICAgIGRpc3BsYXktPm1f
Y29tcG9zaXRvciA9IHN0YXRpY19jYXN0PHN0cnVjdCB3bF9jb21wb3NpdG9yKj4od2xfcmVnaXN0
cnlfYmluZChyZWdpc3RyeSwgbmFtZSwgJndsX2NvbXBvc2l0b3JfaW50ZXJmYWNlLCAxKSk7Ci0g
ICAgZWxzZSBpZiAoIXN0ZDo6c3RyY21wKGludGVyZmFjZSwgIndsX3dlYmtpdGd0ayIpKQotICAg
ICAgICBkaXNwbGF5LT5tX3dlYmtpdGd0ayA9IHN0YXRpY19jYXN0PHN0cnVjdCB3bF93ZWJraXRn
dGsqPih3bF9yZWdpc3RyeV9iaW5kKHJlZ2lzdHJ5LCBuYW1lLCAmd2xfd2Via2l0Z3RrX2ludGVy
ZmFjZSwgMSkpOwotfQotCi12b2lkIFdheWxhbmREaXNwbGF5OjpnbG9iYWxSZW1vdmVDYWxsYmFj
ayh2b2lkKiwgc3RydWN0IHdsX3JlZ2lzdHJ5KiwgdWludDMyX3QpCi17Ci0gICAgLy8gRklYTUU6
IGlmIHRoaXMgY2FuIGhhcHBlbiB3aXRob3V0IHRoZSBVSSBQcm9jZXNzIGdldHRpbmcgc2h1dCBk
b3duCi0gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IGRlc3Ryb3kgb3VyIGNhY2hlZCBkaXNwbGF5
IGluc3RhbmNlLgotfQotCi1XYXlsYW5kRGlzcGxheSogV2F5bGFuZERpc3BsYXk6Omluc3RhbmNl
KCkKLXsKLSAgICBzdGF0aWMgV2F5bGFuZERpc3BsYXkqIGRpc3BsYXkgPSBudWxscHRyOwotICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKGluaXRpYWxpemVkKQot
ICAgICAgICByZXR1cm4gZGlzcGxheTsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBz
dHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5ID0gd2xfZGlzcGxheV9jb25uZWN0KCJ3ZWJraXRn
dGstd2F5bGFuZC1jb21wb3NpdG9yLXNvY2tldCIpOwotICAgIGlmICghd2xEaXNwbGF5KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRpc3BsYXkgPSBuZXcgV2F5bGFuZERpc3BsYXko
d2xEaXNwbGF5KTsKLSAgICBpZiAoIWRpc3BsYXktPmlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAg
ICBkZWxldGUgZGlzcGxheTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRpc3BsYXk7Ci19Ci0KLVdheWxhbmREaXNwbGF5OjpXYXlsYW5kRGlzcGxheShzdHJ1
Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5KQotICAgIDogbV9kaXNwbGF5KHdsRGlzcGxheSkKLSAg
ICAsIG1fcmVnaXN0cnkod2xfZGlzcGxheV9nZXRfcmVnaXN0cnkobV9kaXNwbGF5KSkKLSAgICAs
IG1fZWdsQ29uZmlnQ2hvc2VuKGZhbHNlKQotewotICAgIHdsX3JlZ2lzdHJ5X2FkZF9saXN0ZW5l
cihtX3JlZ2lzdHJ5LCAmbV9yZWdpc3RyeUxpc3RlbmVyLCB0aGlzKTsKLSAgICB3bF9kaXNwbGF5
X3JvdW5kdHJpcChtX2Rpc3BsYXkpOwotCi0gICAgc3RhdGljIGNvbnN0IEVHTGludCBjb25maWdB
dHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9XSU5ET1dfQklU
LAotICAgICAgICBFR0xfUkVEX1NJWkUsIDEsCi0gICAgICAgIEVHTF9HUkVFTl9TSVpFLCAxLAot
ICAgICAgICBFR0xfQkxVRV9TSVpFLCAxLAotICAgICAgICBFR0xfQUxQSEFfU0laRSwgMSwKLSAg
ICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgICAgICBF
R0xfTk9ORQotICAgIH07Ci0KLSAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KG1fZGlz
cGxheSk7Ci0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewotICAgICAg
ICBnX3dhcm5pbmcoIldheWxhbmREaXNwbGF5IGluaXRpYWxpemF0aW9uOiBmYWlsZWQgdG8gYWNx
dWlyZSBFR0wgZGlzcGxheS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChl
Z2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCkgPT0gRUdMX0ZBTFNFKSB7Ci0gICAgICAg
IGdfd2FybmluZygiV2F5bGFuZERpc3BsYXkgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBpbml0
aWFsaXplIHRoZSBFR0wgZGlzcGxheS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChlZ2xCaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAg
ICAgZ193YXJuaW5nKCJXYXlsYW5kRGlzcGxheSBpbml0aWFsaXphdGlvbjogZmFpbGVkIHRvIHNl
dCBFR0xfT1BFTkdMX0VTX0FQSSBhcyB0aGUgcmVuZGVyaW5nIEFQSS4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEVHTGludCBudW1iZXJPZkNvbmZpZ3M7Ci0gICAgaWYgKCFlZ2xD
aG9vc2VDb25maWcobV9lZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAmbV9lZ2xDb25maWcs
IDEsICZudW1iZXJPZkNvbmZpZ3MpIHx8IG51bWJlck9mQ29uZmlncyAhPSAxKSB7Ci0gICAgICAg
IGdfd2FybmluZygiV2F5bGFuZERpc3BsYXkgaW5pdGlhbGl6YXRpb246IGZhaWxlZCB0byBmaW5k
IHRoZSBkZXNpcmVkIEVHTCBjb25maWd1cmF0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9lZ2xDb25maWdDaG9zZW4gPSB0cnVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
V2F5bGFuZFN1cmZhY2U+IFdheWxhbmREaXNwbGF5OjpjcmVhdGVTdXJmYWNlKGNvbnN0IEludFNp
emUmIHNpemUsIGludCB3aWRnZXRJZCkKLXsKLSAgICBzdHJ1Y3Qgd2xfc3VyZmFjZSogd2xTdXJm
YWNlID0gd2xfY29tcG9zaXRvcl9jcmVhdGVfc3VyZmFjZShtX2NvbXBvc2l0b3IpOwotICAgIC8v
IFdlIGtlZXAgdGhlIG1pbmltdW0gc2l6ZSBhdCAxeDFweCBzaW5jZSBNZXNhIHJldHVybnMgbnVs
bCB2YWx1ZXMgaW4gd2xfZWdsX3dpbmRvd19jcmVhdGUoKSBmb3IgemVybyB3aWR0aCBvciBoZWln
aHQuCi0gICAgRUdMTmF0aXZlV2luZG93VHlwZSBuYXRpdmVXaW5kb3cgPSB3bF9lZ2xfd2luZG93
X2NyZWF0ZSh3bFN1cmZhY2UsIHN0ZDo6bWF4KDEsIHNpemUud2lkdGgoKSksIHN0ZDo6bWF4KDEs
IHNpemUuaGVpZ2h0KCkpKTsKLQotICAgIHdsX3dlYmtpdGd0a19zZXRfc3VyZmFjZV9mb3Jfd2lk
Z2V0KG1fd2Via2l0Z3RrLCB3bFN1cmZhY2UsIHdpZGdldElkKTsKLSAgICB3bF9kaXNwbGF5X3Jv
dW5kdHJpcChtX2Rpc3BsYXkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2F5bGFu
ZFN1cmZhY2U+KHdsU3VyZmFjZSwgbmF0aXZlV2luZG93KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PEdMQ29udGV4dEVHTD4gV2F5bGFuZERpc3BsYXk6OmNyZWF0ZVNoYXJpbmdHTENvbnRleHQoKQot
ewotICAgIHN0cnVjdCB3bF9zdXJmYWNlKiB3bFN1cmZhY2UgPSB3bF9jb21wb3NpdG9yX2NyZWF0
ZV9zdXJmYWNlKG1fY29tcG9zaXRvcik7Ci0gICAgRUdMTmF0aXZlV2luZG93VHlwZSBuYXRpdmVX
aW5kb3cgPSB3bF9lZ2xfd2luZG93X2NyZWF0ZSh3bFN1cmZhY2UsIDEsIDEpOwotICAgIHJldHVy
biBHTENvbnRleHRFR0w6OmNyZWF0ZVdpbmRvd0NvbnRleHQobmF0aXZlV2luZG93LCBudWxscHRy
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0FZ
TEFORCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxh
bmQvV2F5bGFuZERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dh
eWxhbmQvV2F5bGFuZERpc3BsYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRi
YjBmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXls
YW5kL1dheWxhbmREaXNwbGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgV2F5bGFu
ZERpc3BsYXlfaAotI2RlZmluZSAgV2F5bGFuZERpc3BsYXlfaAotCi0jaWYgUExBVEZPUk0oV0FZ
TEFORCkKLQotI2luY2x1ZGUgIldlYktpdEd0a1dheWxhbmRDbGllbnRQcm90b2NvbC5oIgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3YXlsYW5kLWNsaWVudC5oPgotCi0jaW5jbHVkZSA8
d2F5bGFuZC1lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR0xDb250ZXh0RUdMOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFdheWxhbmRT
dXJmYWNlOwotCi1jbGFzcyBXYXlsYW5kRGlzcGxheSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFdh
eWxhbmREaXNwbGF5KiBpbnN0YW5jZSgpOwotCi0gICAgc3RydWN0IHdsX2Rpc3BsYXkqIG5hdGl2
ZURpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXk7IH0KLSAgICBFR0xEaXNwbGF5IGVn
bERpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXlsYW5kU3VyZmFjZT4gY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiwgaW50
IHdpZGdldElEKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRFR0w+IGNyZWF0ZVNo
YXJpbmdHTENvbnRleHQoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHds
X3JlZ2lzdHJ5X2xpc3RlbmVyIG1fcmVnaXN0cnlMaXN0ZW5lcjsKLSAgICBzdGF0aWMgdm9pZCBn
bG9iYWxDYWxsYmFjayh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd2xfcmVnaXN0cnkqLCB1aW50MzJfdCBu
YW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2UsIHVpbnQzMl90IHZlcnNpb24pOwotICAgIHN0YXRp
YyB2b2lkIGdsb2JhbFJlbW92ZUNhbGxiYWNrKHZvaWQqIGRhdGEsIHN0cnVjdCB3bF9yZWdpc3Ry
eSosIHVpbnQzMl90IG5hbWUpOwotCi0gICAgV2F5bGFuZERpc3BsYXkoc3RydWN0IHdsX2Rpc3Bs
YXkqKTsKLSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0b3IgJiYg
bV93ZWJraXRndGsgJiYgbV9lZ2xEaXNwbGF5ICE9IEVHTF9OT19ESVNQTEFZICYmIG1fZWdsQ29u
ZmlnQ2hvc2VuOyB9Ci0KLSAgICBzdHJ1Y3Qgd2xfZGlzcGxheSogbV9kaXNwbGF5OwotICAgIHN0
cnVjdCB3bF9yZWdpc3RyeSogbV9yZWdpc3RyeTsKLSAgICBzdHJ1Y3Qgd2xfY29tcG9zaXRvciog
bV9jb21wb3NpdG9yOwotICAgIHN0cnVjdCB3bF93ZWJraXRndGsqIG1fd2Via2l0Z3RrOwotCi0g
ICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Ci0gICAgRUdMQ29uZmlnIG1fZWdsQ29uZmlnOwot
ICAgIGJvb2wgbV9lZ2xDb25maWdDaG9zZW47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXQVlMQU5EKQotCi0jZW5kaWYgLy8gV2F5bGFuZERpc3Bs
YXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1Bs
YXRmb3JtRGlzcGxheVgxMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy94
MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44YWIwMjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgorCisjaWYgUExBVEZPUk0oWDExKQor
I2luY2x1ZGUgPFgxMS9YbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1E
aXNwbGF5WDExOjpQbGF0Zm9ybURpc3BsYXlYMTEoKQorICAgIDogbV9kaXNwbGF5KFhPcGVuRGlz
cGxheShudWxscHRyKSkKKyAgICAsIG1fb3duZWREaXNwbGF5KHRydWUpCit7Cit9CisKK1BsYXRm
b3JtRGlzcGxheVgxMTo6UGxhdGZvcm1EaXNwbGF5WDExKERpc3BsYXkqIGRpc3BsYXkpCisgICAg
OiBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fb3duZWREaXNwbGF5KGZhbHNlKQoreworfQor
CitQbGF0Zm9ybURpc3BsYXlYMTE6On5QbGF0Zm9ybURpc3BsYXlYMTEoKQoreworICAgIGlmICht
X293bmVkRGlzcGxheSkKKyAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShYMTEpCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3Bs
YXlYMTEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDdkOGFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MveDExL1Bs
YXRmb3JtRGlzcGxheVgxMS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgSWdhbGlhIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1EaXNwbGF5WDExX2gKKyNkZWZp
bmUgUGxhdGZvcm1EaXNwbGF5WDExX2gKKworI2lmIFBMQVRGT1JNKFgxMSkKKworI2luY2x1ZGUg
IlBsYXRmb3JtRGlzcGxheS5oIgorCit0eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybURpc3BsYXlYMTEgZmluYWwg
OiBwdWJsaWMgUGxhdGZvcm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybURpc3BsYXlY
MTEoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXlYMTEoRGlzcGxheSopOworICAgIHZpcnR1YWwgflBs
YXRmb3JtRGlzcGxheVgxMSgpOworCisgICAgRGlzcGxheSogbmF0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5OyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMTsgfQorCisgICAg
RGlzcGxheSogbV9kaXNwbGF5OworICAgIGJvb2wgbV9vd25lZERpc3BsYXk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExBVEZPUk1fRElT
UExBWShQbGF0Zm9ybURpc3BsYXlYMTEsIFgxMSkKKworI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkK
KworI2VuZGlmIC8vIFBsYXRmb3JtRGlzcGxheVgxMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrVXRpbGl0aWVzLmNwcAppbmRleCBmYmUwYTNmLi4wYzZhMzJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcApAQCAtMjQsMTMgKzI0LDYg
QEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR2xpYlV0aWxpdGllcy5oPgogCi0jaWYgUExBVEZPUk0oWDExKQotI2luY2x1ZGUgPGdk
ay9nZGt4Lmg+Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXQVlMQU5EKSAmJiAhZGVmaW5lZChHVEtf
QVBJX1ZFUlNJT05fMikKLSNpbmNsdWRlIDxnZGsvZ2Rrd2F5bGFuZC5oPgotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Q
b2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQpAQCAtNjEsMjgg
KzU0LDYgQEAgYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3
aWRnZXQpCiAgICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtf
SVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7CiB9
CiAKLURpc3BsYXlTeXN0ZW1UeXBlIGdldERpc3BsYXlTeXN0ZW1UeXBlKCkKLXsKLSNpZiBkZWZp
bmVkKEdUS19BUElfVkVSU0lPTl8yKQotICAgIHJldHVybiBEaXNwbGF5U3lzdGVtVHlwZTo6WDEx
OwotI2Vsc2UKLSAgICBzdGF0aWMgRGlzcGxheVN5c3RlbVR5cGUgdHlwZSA9IFtdIHsKLSAgICAg
ICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRf
ZGlzcGxheShnZGtfZGlzcGxheV9tYW5hZ2VyX2dldCgpKTsKLSNpZiBQTEFURk9STShYMTEpCi0g
ICAgICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpCi0gICAgICAgICAgICByZXR1
cm4gRGlzcGxheVN5c3RlbVR5cGU6OlgxMTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFdBWUxBTkQp
Ci0gICAgICAgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZKGRpc3BsYXkpKQotICAgICAgICAg
ICAgcmV0dXJuIERpc3BsYXlTeXN0ZW1UeXBlOjpXYXlsYW5kOwotI2VuZGlmCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlzcGxheVN5c3RlbVR5cGU6Olgx
MTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIHR5cGU7Ci0jZW5kaWYKLX0KLQogI2lmIGRlZmluZWQo
REVWRUxPUE1FTlRfQlVJTEQpCiBzdGF0aWMgQ1N0cmluZyB0b3BMZXZlbFBhdGgoKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCmluZGV4IDU5NWMwZDYuLmMy
YTQzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRp
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKQEAg
LTI4LDEzICsyOCw2IEBAIGNsYXNzIEludFBvaW50OwogSW50UG9pbnQgY29udmVydFdpZGdldFBv
aW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpOwogYm9vbCB3aWRn
ZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0Kik7CiAKLWVudW0gY2xhc3MgRGlz
cGxheVN5c3RlbVR5cGUgewotICAgIFgxMSwKLSAgICBXYXlsYW5kCi19OwotCi1EaXNwbGF5U3lz
dGVtVHlwZSBnZXREaXNwbGF5U3lzdGVtVHlwZSgpOwotCiAjaWYgZGVmaW5lZChERVZFTE9QTUVO
VF9CVUlMRCkKIENTdHJpbmcgd2Via2l0QnVpbGREaXJlY3RvcnkoKTsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDRjYjc0Y2YuLjVjYjFmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAx
NS0wNS0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS11bRUZMXSBVbmlmeSBwbGF0Zm9ybSBkaXNwbGF5IGhhbmRsaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ1MTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVJl
YWxpemUpOiBVc2UgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkKKyAgICAgICAgdG8g
Y2hlY2t0IHRoZSBkaXNwbGF5IHR5cGUuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmNyZWF0ZUJhY2tlbmQp
OiBQYXNzIHRoZSBuYXRpdmUgWDExIHNoYXJlZAorICAgICAgICBkaXNwbGF5IHRvIEJhY2tpbmdT
dG9yZUJhY2tlbmRDYWlyb1gxMS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW46OngxMUhvc3REaXNwbGF5KTogUmV0dXJuIHRoZSBuYXRpdmUgWDExCisgICAgICAgIHNo
YXJlZCBkaXNwbGF5LgorCiAyMDE1LTA0LTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTmV0d29yayBDYWNoZTogSW1wbGVtZW50
IFNoYXJlYWJsZVJlc291cmNlIGZvciBTb3VwIGFuZCBlbmFibGUgaXQgZm9yIEdUSyBwbGF0Zm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwCmluZGV4IDNhY2ZhODYuLjFkNzMwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTU0
LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJk
SGVscGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3BsYXkuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNp
bmNsdWRlIDxnZGsvZ2RrLmg+CkBAIC0zMjAsOCArMzIxLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIFdlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAKICNpZiBVU0UoUkVESVJFQ1RFRF9Y
Q09NUE9TSVRFX1dJTkRPVykKLSAgICBHZGtEaXNwbGF5KiBkaXNwbGF5ID0gZ2RrX2Rpc3BsYXlf
bWFuYWdlcl9nZXRfZGVmYXVsdF9kaXNwbGF5KGdka19kaXNwbGF5X21hbmFnZXJfZ2V0KCkpOwot
ICAgIGlmIChHREtfSVNfWDExX0RJU1BMQVkoZGlzcGxheSkpIHsKKyAgICBpZiAoUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6
WDExKSB7CiAgICAgICAgIHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6Y3JlYXRlKAogICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dp
bmRvdyh3aWRnZXQpLAogICAgICAgICAgICAgW3dlYlZpZXddIHsKQEAgLTExMzMsOCArMTEzMyw3
IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSwgV2ViUHJvCiAjaWYgUExBVEZPUk0oV0FZTEFORCkKICAgICAv
LyBGSVhNRTogQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdW5kZXIgV2F5bGFuZCBpcyBub3QgeWV0
IHN1cHBvcnRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE1ODAzCi0gICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJf
Z2V0X2RlZmF1bHRfZGlzcGxheShnZGtfZGlzcGxheV9tYW5hZ2VyX2dldCgpKTsKLSAgICBpZiAo
R0RLX0lTX1dBWUxBTkRfRElTUExBWShkaXNwbGF5KSkKKyAgICBpZiAoUGxhdGZvcm1EaXNwbGF5
OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFu
ZCkKICAgICAgICAgcHJlZmVyZW5jZXMtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
KGZhbHNlKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Y2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAppbmRleCA2NTU4ZGFmLi5iZDgwYjM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5j
cHAKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oWDEx
KSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQogI2luY2x1ZGUgPFdlYkNvcmUvQmFja2lu
Z1N0b3JlQmFja2VuZENhaXJvWDExLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3Bs
YXlYMTEuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2VuZGlmCiAKQEAgLTQ4LDExICs0OSwx
MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHN0ZDo6dW5pcXVlX3B0cjxCYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm8+IEJhY2tpbmdTdG9yZTo6Y3JlYXRlQmFja2VuZCgpCiB7CiAjaWYgUExBVEZPUk0o
R1RLKSAmJiBQTEFURk9STShYMTEpCi0gICAgR2RrRGlzcGxheSogZGlzcGxheSA9IGdka19kaXNw
bGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRfZGlzcGxheShnZGtfZGlzcGxheV9tYW5hZ2VyX2dldCgp
KTsKLSAgICBpZiAoR0RLX0lTX1gxMV9ESVNQTEFZKGRpc3BsYXkpKSB7CisgICAgY29uc3QgYXV0
byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpOworICAg
IGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7CiAgICAgICAgIEdk
a1Zpc3VhbCogdmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKG1fd2ViUGFnZVByb3h5LnZp
ZXdXaWRnZXQoKSk7CiAgICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3Zpc3VhbF9nZXRf
c2NyZWVuKHZpc3VhbCk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJhY2tpbmdT
dG9yZUJhY2tlbmRDYWlyb1gxMT4oR0RLX1NDUkVFTl9YRElTUExBWShzY3JlZW4pLCBHREtfV0lO
RE9XX1hJRChnZGtfc2NyZWVuX2dldF9yb290X3dpbmRvdyhzY3JlZW4pKSwKKyAgICAgICAgQVNT
RVJUKGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkg
PT0gR0RLX1NDUkVFTl9YRElTUExBWShzY3JlZW4pKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8QmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExPihkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpLCBHREtfV0lORE9XX1hJRChnZGtfc2Ny
ZWVuX2dldF9yb290X3dpbmRvdyhzY3JlZW4pKSwKICAgICAgICAgICAgIEdES19WSVNVQUxfWFZJ
U1VBTCh2aXN1YWwpLCBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpLCBtX3NpemUsIG1fZGV2
aWNlU2NhbGVGYWN0b3IpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBl
UGx1Z2luWDExLmNwcAppbmRleCA3ODdiZmE5Li4zN2Y0NzkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDEx
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDEx
L05ldHNjYXBlUGx1Z2luWDExLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYkV2
ZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybURpc3Bs
YXlYMTEuaD4KIAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDxndGsvZ3RrLmg+CkBAIC0x
MDMsMTMgKzEwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByb290V2luZG93SUQo
KQogCiBEaXNwbGF5KiBOZXRzY2FwZVBsdWdpbjo6eDExSG9zdERpc3BsYXkoKQogewotI2lmIFBM
QVRGT1JNKEdUSykKLSAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSk7Ci0jZWxpZiBQTEFURk9STShFRkwpICYmIGRlZmluZWQoSEFWRV9FQ09S
RV9YKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dl
dCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKKyAgICByZXR1cm4gZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKSkubmF0
aXZlKCk7CiB9CiAKICNpZiBQTEFURk9STShHVEspCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>