<?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>231670</bug_id>
          
          <creation_ts>2021-10-13 05:43:28 -0700</creation_ts>
          <short_desc>[GLIB] Simplify SleepDisabler by checking if we are under sandbox</short_desc>
          <delta_ts>2021-10-18 13:20:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pgriffis</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1803714</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-13 05:43:28 -0700</bug_when>
    <thetext>Current implementation always tries to connect to ScreenSaver interface and if that fails tries with the portal one. It would be simpler to check if we are under sandbox and it avoids a connection that we know it&apos;s always going to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803716</commentid>
    <comment_count>1</comment_count>
      <attachid>441062</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-13 05:52:47 -0700</bug_when>
    <thetext>Created attachment 441062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803717</commentid>
    <comment_count>2</comment_count>
      <attachid>441063</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-13 06:01:41 -0700</bug_when>
    <thetext>Created attachment 441063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803766</commentid>
    <comment_count>3</comment_count>
      <attachid>441063</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-13 07:57:55 -0700</bug_when>
    <thetext>Comment on attachment 441063
Patch

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

&gt; Source/WTF/ChangeLog:10
&gt; +        whether portal sandbox should be used. WEBKIT_USE_PORTAL environment variable can be used to force the use of
&gt; +        portals when not running under the sandbox.

Hmmmm. I do like the changes to SleepDisabler.cpp. Picking one API or the other to use does seem nicer. Thing is, many of the portals are good to use always, including when not sandboxed. So checking whether we&apos;re sandboxed first isn&apos;t *generally* recommended or necessary. I would normally actually try the portal API first, since that is the more modern API, and use the original API only as a fallback if the portal API is not available. But I&apos;m pretty sure the inhibit portal is different and just does not work at all if the application is not sandboxed: it will fail if it can&apos;t read the non-falsifiable app ID from ./flatpak-info or wherever snap stores it. So while some portals are OK to use always, this one is not. Then there are some other portals that you *really* want to use always. E.g. for WebRTC stuff, we would always prefer to use the portal for desktop sharing or webcam access, because the portals are the preferred method to talk to Pipewire. I could imagine Pipewire might decide to claim v4l2 for itself in the future, to block other apps from using it and ensure it&apos;s always available for Pipewire. Another example: some apps that relied on gnome-shell&apos;s screen recorder D-Bus API instead of using the portal are just now discovering that they&apos;re blocked in GNOME 41. So we have:

 * Some portals that we always want to use, where using the original non-portal APIs is undesirable even when not sandboxed
 * Some portals that are OK to use when not sandboxed, but also OK to ignore and use the original host APIs
 * Some portals that must only be used when sandboxed and will fail when not sandboxed (pretty sure this is true for the Inhibit portal)

It seems like an xdg-desktop-portal design failure to have three different cases here, but whatever. The implication for this patch is that having WTF::shouldUsePortal probably doesn&apos;t make sense, since the right behavior depends on the particular portal in question. I thought about suggesting that you move it to SleepDisabler.cpp instead, and have that as a policy decision specific to the SleepDisabler code rather than assuming it will make sense for every use of any desktop portal anywhere in WebKit. But maybe it would be simpler to just rename it to WTF::mustUsePortal (or WTF::mustUseDesktopPortal) to indicate only the case where you really always have to use portals. Then code that talks to portals can decide for itself whether or not to use WTF::mustUsePortal/mustUseDesktopPortal, since this naming implies it is OK to use the portal anyway even if it returns false, whereas the name WTF::shouldUsePortal implies the code should use the portal only if it returns true.

&gt; Source/WTF/wtf/glib/Sandbox.cpp:27
&gt; +#include &lt;wtf/glib/Sandbox.h&gt;

Alternative names:

wtf/glib/Containers.h?
wtf/glib/IsInside.h?
wtf/glib/MustUseDesktopPortal.h?

&gt; Source/WTF/wtf/glib/Sandbox.cpp:35
&gt; +    return g_file_test(&quot;/.flatpak-info&quot;, G_FILE_TEST_EXISTS);

Hm, it sould test for snap too, since we should also generally use portals when running under snap. But not under docker, since portals do not expect to be used from docker, even though docker is also a sandbox.

I think I would move isInsideDocker, isInsideFlatpak, and isInsideSnap to here from ProcessLauncherGLib.cpp, then rename shouldUsePortal to mustUseDesktopPortal, and have it check isInsideFlatpak || isInsideSnap, but not isInsideDocker.

&gt; Source/WebCore/PAL/ChangeLog:9
&gt; +        one. It&apos;s simpler to check if we are under sandbox and it avoids a connection that we know it&apos;s always going to

is always going</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804180</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-14 00:47:40 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Comment on attachment 441063 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441063&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:10
&gt; &gt; +        whether portal sandbox should be used. WEBKIT_USE_PORTAL environment variable can be used to force the use of
&gt; &gt; +        portals when not running under the sandbox.
&gt; 
&gt; Hmmmm. I do like the changes to SleepDisabler.cpp. Picking one API or the
&gt; other to use does seem nicer. Thing is, many of the portals are good to use
&gt; always, including when not sandboxed.

Why? If I&apos;m not wrong, using the portal normally requires more DBus messages than using the original DBus service directly.

&gt; So checking whether we&apos;re sandboxed
&gt; first isn&apos;t *generally* recommended or necessary.

I took this approach from GTK4 for what is worth.

&gt; I would normally actually
&gt; try the portal API first, since that is the more modern API, and use the
&gt; original API only as a fallback if the portal API is not available. But I&apos;m
&gt; pretty sure the inhibit portal is different and just does not work at all if
&gt; the application is not sandboxed: it will fail if it can&apos;t read the
&gt; non-falsifiable app ID from ./flatpak-info or wherever snap stores it. So
&gt; while some portals are OK to use always, this one is not. Then there are
&gt; some other portals that you *really* want to use always. E.g. for WebRTC
&gt; stuff, we would always prefer to use the portal for desktop sharing or
&gt; webcam access, because the portals are the preferred method to talk to
&gt; Pipewire. I could imagine Pipewire might decide to claim v4l2 for itself in
&gt; the future, to block other apps from using it and ensure it&apos;s always
&gt; available for Pipewire. Another example: some apps that relied on
&gt; gnome-shell&apos;s screen recorder D-Bus API instead of using the portal are just
&gt; now discovering that they&apos;re blocked in GNOME 41. So we have:
&gt; 
&gt;  * Some portals that we always want to use, where using the original
&gt; non-portal APIs is undesirable even when not sandboxed
&gt;  * Some portals that are OK to use when not sandboxed, but also OK to ignore
&gt; and use the original host APIs
&gt;  * Some portals that must only be used when sandboxed and will fail when not
&gt; sandboxed (pretty sure this is true for the Inhibit portal)
&gt; 
&gt; It seems like an xdg-desktop-portal design failure to have three different
&gt; cases here, but whatever. The implication for this patch is that having
&gt; WTF::shouldUsePortal probably doesn&apos;t make sense, since the right behavior
&gt; depends on the particular portal in question. I thought about suggesting
&gt; that you move it to SleepDisabler.cpp instead, and have that as a policy
&gt; decision specific to the SleepDisabler code rather than assuming it will
&gt; make sense for every use of any desktop portal anywhere in WebKit. But maybe
&gt; it would be simpler to just rename it to WTF::mustUsePortal (or
&gt; WTF::mustUseDesktopPortal) to indicate only the case where you really always
&gt; have to use portals. Then code that talks to portals can decide for itself
&gt; whether or not to use WTF::mustUsePortal/mustUseDesktopPortal, since this
&gt; naming implies it is OK to use the portal anyway even if it returns false,
&gt; whereas the name WTF::shouldUsePortal implies the code should use the portal
&gt; only if it returns true.
&gt; 
&gt; &gt; Source/WTF/wtf/glib/Sandbox.cpp:27
&gt; &gt; +#include &lt;wtf/glib/Sandbox.h&gt;
&gt; 
&gt; Alternative names:
&gt; 
&gt; wtf/glib/Containers.h?
&gt; wtf/glib/IsInside.h?
&gt; wtf/glib/MustUseDesktopPortal.h?

What&apos;s wrong with Sandbox.h?

&gt; &gt; Source/WTF/wtf/glib/Sandbox.cpp:35
&gt; &gt; +    return g_file_test(&quot;/.flatpak-info&quot;, G_FILE_TEST_EXISTS);
&gt; 
&gt; Hm, it sould test for snap too, since we should also generally use portals
&gt; when running under snap. But not under docker, since portals do not expect
&gt; to be used from docker, even though docker is also a sandbox.
&gt; 
&gt; I think I would move isInsideDocker, isInsideFlatpak, and isInsideSnap to
&gt; here from ProcessLauncherGLib.cpp, then rename shouldUsePortal to
&gt; mustUseDesktopPortal, and have it check isInsideFlatpak || isInsideSnap, but
&gt; not isInsideDocker.
&gt;
&gt; &gt; Source/WebCore/PAL/ChangeLog:9
&gt; &gt; +        one. It&apos;s simpler to check if we are under sandbox and it avoids a connection that we know it&apos;s always going to
&gt; 
&gt; is always going</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804241</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-14 06:11:22 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; Why? If I&apos;m not wrong, using the portal normally requires more DBus messages
&gt; than using the original DBus service directly.

It doesn&apos;t matter. I normally prefer to use newer things and fall back to older things only if the newer thing is not present. If the newer API works in all cases, that keeps the code simpler. But in this case, the newer API does not work in all cases, so you really need to choose, which is why your changes to SleepDisablerGLib.cpp look good.

&gt; &gt; So checking whether we&apos;re sandboxed
&gt; &gt; first isn&apos;t *generally* recommended or necessary.
&gt; 
&gt; I took this approach from GTK4 for what is worth.

Right, but GTK does not do screen sharing or camera access, so our needs are different.

&gt; What&apos;s wrong with Sandbox.h?

The naming is OK as your patch is now, but it won&apos;t make as much sense aftre my suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804243</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-14 06:17:50 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; Why? If I&apos;m not wrong, using the portal normally requires more DBus messages
&gt; &gt; than using the original DBus service directly.
&gt; 
&gt; It doesn&apos;t matter. I normally prefer to use newer things and fall back to
&gt; older things only if the newer thing is not present. If the newer API works
&gt; in all cases, that keeps the code simpler. But in this case, the newer API
&gt; does not work in all cases, so you really need to choose, which is why your
&gt; changes to SleepDisablerGLib.cpp look good.

I don&apos;t think it&apos;s a matter of new vs old APIs, AFAIK portals where created for sandboxed applications, no?

&gt; &gt; &gt; So checking whether we&apos;re sandboxed
&gt; &gt; &gt; first isn&apos;t *generally* recommended or necessary.
&gt; &gt; 
&gt; &gt; I took this approach from GTK4 for what is worth.
&gt; 
&gt; Right, but GTK does not do screen sharing or camera access, so our needs are
&gt; different.

If we prefer to use portals for screen sharing and camera access we can simply avoid the shouldUsePortal check in those particular cases, since we already know we should use portals.
 
&gt; &gt; What&apos;s wrong with Sandbox.h?
&gt; 
&gt; The naming is OK as your patch is now, but it won&apos;t make as much sense aftre
&gt; my suggested changes.

Why? Your suggestions are still related to sandboxing, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804255</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-14 07:13:41 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; If we prefer to use portals for screen sharing and camera access we can
&gt; simply avoid the shouldUsePortal check in those particular cases, since we
&gt; already know we should use portals.

OK, fine.

Note: something is wrong with the API tests EWS.

(In reply to Carlos Garcia Campos from comment #6)
&gt; Why? Your suggestions are still related to sandboxing, no?

I suppose. Testing for containerization frameworks vs. testing for actual sandboxing is a little different, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804813</commentid>
    <comment_count>8</comment_count>
      <attachid>441063</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-15 08:19:21 -0700</bug_when>
    <thetext>Comment on attachment 441063
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/glib/Sandbox.cpp:35
&gt;&gt;&gt; +    return g_file_test(&quot;/.flatpak-info&quot;, G_FILE_TEST_EXISTS);
&gt;&gt; 
&gt;&gt; Hm, it sould test for snap too, since we should also generally use portals when running under snap. But not under docker, since portals do not expect to be used from docker, even though docker is also a sandbox.
&gt;&gt; 
&gt;&gt; I think I would move isInsideDocker, isInsideFlatpak, and isInsideSnap to here from ProcessLauncherGLib.cpp, then rename shouldUsePortal to mustUseDesktopPortal, and have it check isInsideFlatpak || isInsideSnap, but not isInsideDocker.
&gt; 
&gt; 

Anyway, you&apos;ve convinced me on everything else, but still need to fix isRunningInSandbox. At minimum, test for snap as well. But probably better to delete it and just directly call isInsideFlatpak/isInsideSnap from shouldUsePortal, and not have isRunningInSandbox at all.

Definitely do not implement isInsideFlatpak using isRunningInSandbox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805239</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-16 01:32:15 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; Comment on attachment 441063 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441063&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/wtf/glib/Sandbox.cpp:35
&gt; &gt;&gt;&gt; +    return g_file_test(&quot;/.flatpak-info&quot;, G_FILE_TEST_EXISTS);
&gt; &gt;&gt; 
&gt; &gt;&gt; Hm, it sould test for snap too, since we should also generally use portals when running under snap. But not under docker, since portals do not expect to be used from docker, even though docker is also a sandbox.
&gt; &gt;&gt; 
&gt; &gt;&gt; I think I would move isInsideDocker, isInsideFlatpak, and isInsideSnap to here from ProcessLauncherGLib.cpp, then rename shouldUsePortal to mustUseDesktopPortal, and have it check isInsideFlatpak || isInsideSnap, but not isInsideDocker.
&gt; &gt; 
&gt; &gt; 
&gt; 
&gt; Anyway, you&apos;ve convinced me on everything else, but still need to fix
&gt; isRunningInSandbox. At minimum, test for snap as well. But probably better
&gt; to delete it and just directly call isInsideFlatpak/isInsideSnap from
&gt; shouldUsePortal, and not have isRunningInSandbox at all.
&gt; 
&gt; Definitely do not implement isInsideFlatpak using isRunningInSandbox.

isInsideFlatpak is not exactly the same in this case, that caches the result and it&apos;s used by the process launcher to see if we are already under flatpak. If we are not under flatpak false will be cached, but then the bubblewrap launcher will create the flatpak-info, but isInsideFlatpak will return false. That&apos;s why isInsideSandbox doesn&apos;t cache the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805272</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-16 09:37:26 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #9)
&gt; isInsideFlatpak is not exactly the same in this case, that caches the result
&gt; and it&apos;s used by the process launcher to see if we are already under
&gt; flatpak. 

&gt; If we are not under flatpak false will be cached, but then the
&gt; bubblewrap launcher will create the flatpak-info, but isInsideFlatpak will
&gt; return false. That&apos;s why isInsideSandbox doesn&apos;t cache the result.

The .flatpak-info is created in the filesystem namespace of the sandboxed subprocess that is going to be launched. The UI process won&apos;t see it. Both isInsideSandbox and isInsideFlatpak would behave the same: you&apos;re just doing extra work in the case of isInsideSandbox.

You can safely change isInsideSandbox to cache its result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805489</commentid>
    <comment_count>11</comment_count>
      <attachid>441571</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-18 01:54:05 -0700</bug_when>
    <thetext>Created attachment 441571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805547</commentid>
    <comment_count>12</comment_count>
      <attachid>441571</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-10-18 05:51:06 -0700</bug_when>
    <thetext>Comment on attachment 441571
Patch

I left some comments about the helper functions, but as the code was just
moved around it&apos;s fine—but if you feel like changing them before landing,
that would be neat :)


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

&gt; Source/WTF/wtf/glib/Sandbox.cpp:39
&gt; +    return *ret;

It should not be needed to use std::optional here, you can just:

   bool isInsideFlatpak()
   {
       static bool ret = g_file_test(&quot;/.flatpak-info&quot;, G_FILE_TEST_EXISTS);
       return ret;
   }

The C++11 specification guarantees that a static local is initialized only
once when program control flow goes through it, and that it is thread-safe
(amusingly, manually checking the optional is not thread-safe :D)

The same applies to the other checks below.

&gt; Source/WTF/wtf/glib/Sandbox.cpp:70
&gt; +    return usePortal[0] != &apos;0&apos;;

This one is a bit trickier, but one can use a lambda that gets invoked
immediately to initialize the static value:

    bool shouldUsePortal() {
        static bool ret = ([]() -&gt; bool {
            // do checks, return true/false
        })();
        return ret;
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805554</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-18 06:18:43 -0700</bug_when>
    <thetext>Committed r284370 (243155@main): &lt;https://commits.webkit.org/243155@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805555</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-18 06:19:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/84367775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805698</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-10-18 13:20:04 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #12)
&gt; The C++11 specification guarantees that a static local is initialized only
&gt; once when program control flow goes through it, and that it is thread-safe
&gt; (amusingly, manually checking the optional is not thread-safe :D)

Remember Apple ports use some compiler flag to disable the threadsafety guarantee (presumably it has a noticeable perf impact?), so you can only rely on this in Linux-specific code, never in cross-platform code. (In this case, it&apos;s fine only because these functions are GLib-specific.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441062</attachid>
            <date>2021-10-13 05:52:47 -0700</date>
            <delta_ts>2021-10-13 06:01:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-sleep-disabler.diff</filename>
            <type>text/plain</type>
            <size>20671</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMGM2MGQxOWFhMTVlLi44ODgwNGU2YTA2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjEtMTAtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNoZWNraW5nIGlmIHdlIGFy
ZSB1bmRlciBzYW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzE2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgaXNSdW5uaW5nSW5TYW5kYm94KCkgYW5kIHNob3VsZFVzZVBvcnRhbCgpIHRv
IGNoZWNrIHdoZXRoZXIgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgdW5kZXIgc2FuZGJveCBh
bmQKKyAgICAgICAgd2hldGhlciBwb3J0YWwgc2FuZGJveCBzaG91bGQgYmUgdXNlZC4gV0VCS0lU
X1VTRV9QT1JUQUwgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhl
IHVzZSBvZgorICAgICAgICBwb3J0YWxzIHdoZW4gbm90IHJ1bm5pbmcgdW5kZXIgdGhlIHNhbmRi
b3guCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogd3RmL2ds
aWIvU2FuZGJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjppc1J1bm5pbmdJblNhbmRib3gp
OgorICAgICAgICAoV1RGOjpzaG91bGRVc2VQb3J0YWwpOgorICAgICAgICAqIHd0Zi9nbGliL1Nh
bmRib3guaDogQWRkZWQuCisKIDIwMjEtMTAtMTIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ugc3RkOjp2YXJpYW50IGluc3RlYWQgb2Yg
V1RGOjpWYXJpYW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDRhMTJiNWE0MzkzZi4u
M2U2MTQ1NmM5YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOSw2ICs5LDcgQEAg
bGlzdChBUFBFTkQgV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgZ2xpYi9HVHlwZWRlZnMuaAogICAg
IGdsaWIvR1VuaXF1ZVB0ci5oCiAgICAgZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaAorICAg
IGdsaWIvU2FuZGJveC5oCiAgICAgZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmgKICAgICBnbGliL1dU
RkdUeXBlLmgKICkKQEAgLTM0LDYgKzM1LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAg
ICBnbGliL0dSZWZQdHIuY3BwCiAgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKICAgICBnbGli
L1J1bkxvb3BHTGliLmNwcAorICAgIGdsaWIvU2FuZGJveC5jcHAKICAgICBnbGliL1NvY2tldENv
bm5lY3Rpb24uY3BwCiAgICAgZ2xpYi9VUkxHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1NhbmRib3guY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9TYW5kYm94LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNlNTFjOWFmNTc0MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU2FuZGJveC5jcHAKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8d3RmL2dsaWIvU2FuZGJveC5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworYm9vbCBpc1J1bm5pbmdJblNhbmRib3goKQoreworICAgIHJldHVy
biBnX2ZpbGVfdGVzdCgiLy5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworfQor
Citib29sIHNob3VsZFVzZVBvcnRhbCgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZVBv
cnRhbCA9IG51bGxwdHI7CisgICAgaWYgKFVOTElLRUxZKCF1c2VQb3J0YWwpKSB7CisgICAgICAg
IHVzZVBvcnRhbCA9IGlzUnVubmluZ0luU2FuZGJveCgpID8gIjEiIDogZ19nZXRlbnYoIldFQktJ
VF9VU0VfUE9SVEFMIik7CisgICAgICAgIGlmICghdXNlUG9ydGFsKQorICAgICAgICAgICAgdXNl
UG9ydGFsID0gIjAiOworICAgIH0KKyAgICByZXR1cm4gdXNlUG9ydGFsWzBdICE9ICcwJzsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1Nh
bmRib3guaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU2FuZGJveC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmViN2FiOGNlMTc1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvZ2xpYi9TYW5kYm94LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdURiB7CisKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGlzUnVubmluZ0luU2Fu
ZGJveCgpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2hvdWxkVXNlUG9ydGFsKCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmlzUnVubmluZ0luU2FuZGJveDsKK3VzaW5n
IFdURjo6c2hvdWxkVXNlUG9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNmJlNGRiNDBhNmZj
Li5hYzA1NDZiZWVjNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIx
LTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBEaXNhYmxlciBieSBjaGVja2luZyBpZiB3ZSBhcmUg
dW5kZXIgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMxNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgdHJpZXMgdG8gY29ubmVjdCB0byBT
Y3JlZW5TYXZlciBpbnRlcmZhY2UgYW5kIGlmIHRoYXQgZmFpbHMgdHJpZXMgd2l0aCB0aGUgcG9y
dGFsCisgICAgICAgIG9uZS4gSXQncyBzaW1wbGVyIHRvIGNoZWNrIGlmIHdlIGFyZSB1bmRlciBz
YW5kYm94IGFuZCBpdCBhdm9pZHMgYSBjb25uZWN0aW9uIHRoYXQgd2Uga25vdyBpdCdzIGFsd2F5
cyBnb2luZyB0bworICAgICAgICBmYWlsLgorCisgICAgICAgICogcGFsL3N5c3RlbS9nbGliL1Ns
ZWVwRGlzYWJsZXJHTGliLmNwcDoKKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OlNs
ZWVwRGlzYWJsZXJHTGliKToKKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OmFjcXVp
cmVJbmhpYml0b3IpOgorICAgICAgICAoUEFMOjpTbGVlcERpc2FibGVyR0xpYjo6cmVsZWFzZUlu
aGliaXRvcik6CisgICAgICAgIChQQUw6OlNsZWVwRGlzYWJsZXJHTGliOjphY3F1aXJlSW5oaWJp
dG9yVmlhU2NyZWVuU2F2ZXJQcm94eSk6IERlbGV0ZWQuCisgICAgICAgIChQQUw6OlNsZWVwRGlz
YWJsZXJHTGliOjphY3F1aXJlSW5oaWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OnJlbGVhc2VJbmhpYml0b3JWaWFT
Y3JlZW5TYXZlclByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdM
aWI6OnJlbGVhc2VJbmhpYml0b3JWaWFJbmhpYml0UG9ydGFsUHJveHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBhbC9zeXN0ZW0vZ2xpYi9TbGVlcERpc2FibGVyR0xpYi5oOgorCiAyMDIxLTEwLTEy
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUg
c29tZSBzdGFnZWQgVmlzaW9uS2l0Q29yZSBTUEkgaW50byBWaXNpb25LaXRDb3JlU1BJLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxl
ckdMaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zeXN0ZW0vZ2xpYi9TbGVlcERpc2Fi
bGVyR0xpYi5jcHAKaW5kZXggNmY5MjJlMTE4YWZkLi45MTUxY2RkOWI4ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdM
aWIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1NhbmRib3guaD4K
IAogbmFtZXNwYWNlIFBBTCB7CiAKQEAgLTQ5LDQ5ICs1MCwyOSBAQCBTbGVlcERpc2FibGVyR0xp
Yjo6U2xlZXBEaXNhYmxlckdMaWIoY29uc3QgY2hhciogcmVhc29uLCBUeXBlIHR5cGUpCiAgICAg
Ly8gZXZlciBuZWVkIHRoaXMgZGlzdGluY3Rpb24sIHdoaWNoIHNlZW1zIHVubGlrZWx5LCB0aGVu
IHdlJ2xsIG5lZWQgdG8KICAgICAvLyBhdWRpdCBhbGwgdXNlIG9mIFNsZWVwRGlzYWJsZXIuCiAK
LSAgICAvLyBGaXJzdCwgdHJ5IHRvIHVzZSB0aGUgU2NyZWVuU2F2ZXIgQVBJLgorICAgIGNvbnN0
IGNoYXIqIGJ1c05hbWUgPSBzaG91bGRVc2VQb3J0YWwoKSA/ICJvcmcuZnJlZWRlc2t0b3AucG9y
dGFsLkRlc2t0b3AiIDogIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciI7CisgICAgY29uc3Qg
Y2hhciogb2JqZWN0UGF0aCA9IHNob3VsZFVzZVBvcnRhbCgpID8gIi9vcmcvZnJlZWRlc2t0b3Av
cG9ydGFsL2Rlc2t0b3AiIDogIi9vcmcvZnJlZWRlc2t0b3AvU2NyZWVuU2F2ZXIiOworICAgIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUgPSBzaG91bGRVc2VQb3J0YWwoKSA/ICJvcmcuZnJlZWRl
c2t0b3AucG9ydGFsLkluaGliaXQiIDogIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciI7CiAg
ICAgZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzKEdfQlVTX1RZUEVfU0VTU0lPTiwgc3RhdGljX2Nh
c3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVS
VElFUyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfQ09OTkVDVF9TSUdOQUxTKSwKLSAgICAg
ICAgbnVsbHB0ciwgIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciIsICIvb3JnL2ZyZWVkZXNr
dG9wL1NjcmVlblNhdmVyIiwgIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciIsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksCi0gICAgICAgIFtdKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYo
Z19kYnVzX3Byb3h5X25ld19mb3JfYnVzX2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkp
OwotICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJP
UiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICBudWxscHRyLCBidXNOYW1lLCBvYmpl
Y3RQYXRoLCBpbnRlcmZhY2VOYW1lLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2JqZWN0Kiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfZmluaXNoKHJlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCks
IEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvKiBzZWxmID0gc3RhdGljX2Nhc3Q8U2xlZXBEaXNhYmxlckdMaWIqPih1
c2VyRGF0YSk7CisgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBuYW1lT3duZXIoZ19kYnVzX3Byb3h5X2dldF9uYW1lX293bmVyKHByb3h5LmdldCgpKSk7
CisgICAgICAgICAgICBpZiAobmFtZU93bmVyKSB7CisgICAgICAgICAgICAgICAgc2VsZi0+bV9z
Y3JlZW5TYXZlclByb3h5ID0gV1RGTW92ZShwcm94eSk7CisgICAgICAgICAgICAgICAgc2VsZi0+
YWNxdWlyZUluaGliaXRvcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgYXV0byogc2VsZiA9IHN0YXRpY19jYXN0PFNsZWVwRGlzYWJsZXJHTGliKj4odXNlckRhdGEp
OwotICAgICAgICAgICAgaWYgKHByb3h5KSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5kZXIgRmxh
dHBhaywgd2UnbGwgZ2V0IGEgdXNlbGVzcyBwcm94eSB3aXRoIG5vIG5hbWUgb3duZXIuCi0gICAg
ICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBuYW1lT3duZXIoZ19kYnVzX3Byb3h5X2dldF9u
YW1lX293bmVyKHByb3h5LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVPd25lcikg
ewotICAgICAgICAgICAgICAgICAgICBzZWxmLT5tX3NjcmVlblNhdmVyUHJveHkgPSBXVEZNb3Zl
KHByb3h5KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi0+YWNxdWlyZUluaGliaXRvcigpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEl0IGZhaWxlZC4gVHJ5IHRvIHVzZSB0
aGUgRmxhdHBhayBwb3J0YWwgaW5zdGVhZC4KLSAgICAgICAgICAgIGdfZGJ1c19wcm94eV9uZXdf
Zm9yX2J1cyhHX0JVU19UWVBFX1NFU1NJT04sIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4o
R19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9MT0FEX1BST1BFUlRJRVMgfCBHX0RCVVNfUFJPWFlf
RkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyksCi0gICAgICAgICAgICAgICAgbnVsbHB0ciwg
Im9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRh
bC9kZXNrdG9wIiwgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuSW5oaWJpdCIsIHNlbGYtPm1fY2Fu
Y2VsbGFibGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgW10oR09iamVjdCosIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIEdSZWZQdHI8R0RC
dXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzX2Zpbmlz
aChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExF
RCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYXV0byogc2VsZiA9IHN0YXRpY19jYXN0PFNsZWVwRGlzYWJsZXJHTGliKj4odXNlckRhdGEp
OwotICAgICAgICAgICAgICAgICAgICBpZiAocHJveHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZU93bmVyKGdfZGJ1c19wcm94eV9nZXRfbmFtZV9vd25l
cihwcm94eS5nZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVPd25lcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1faW5oaWJpdFBvcnRhbFByb3h5
ID0gV1RGTW92ZShwcm94eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YWNx
dWlyZUluaGliaXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEdpdmUgdXAuIERvbid0IHdhcm4gdGhlIHVzZXI6IHRoaXMgaXMgZXhw
ZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYtPm1fY2FuY2VsbGFibGUgPSBudWxscHRy
OwotICAgICAgICAgICAgfSwgc2VsZik7Ci0gICAgICAgIH0sIHRoaXMpOworICAgICAgICAvLyBH
aXZlIHVwLiBEb24ndCB3YXJuIHRoZSB1c2VyOiB0aGlzIGlzIGV4cGVjdGVkLgorICAgICAgICBz
ZWxmLT5tX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKKyAgICB9LCB0aGlzKTsKIH0KIAogU2xlZXBE
aXNhYmxlckdMaWI6On5TbGVlcERpc2FibGVyR0xpYigpCkBAIC0xMDQsMTA1ICs4NSw2NyBAQCBT
bGVlcERpc2FibGVyR0xpYjo6flNsZWVwRGlzYWJsZXJHTGliKCkKIAogdm9pZCBTbGVlcERpc2Fi
bGVyR0xpYjo6YWNxdWlyZUluaGliaXRvcigpCiB7Ci0gICAgaWYgKG1fc2NyZWVuU2F2ZXJQcm94
eSkgewotICAgICAgICBBU1NFUlQoIW1faW5oaWJpdFBvcnRhbFByb3h5KTsKLSAgICAgICAgYWNx
dWlyZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJveHkoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQobV9pbmhpYml0UG9ydGFsUHJveHkpOwotICAgICAgICBhY3F1aXJlSW5oaWJpdG9y
VmlhSW5oaWJpdFBvcnRhbFByb3h5KCk7Ci0gICAgfQotfQotCi12b2lkIFNsZWVwRGlzYWJsZXJH
TGliOjphY3F1aXJlSW5oaWJpdG9yVmlhU2NyZWVuU2F2ZXJQcm94eSgpCi17Ci0gICAgZ19kYnVz
X3Byb3h5X2NhbGwobV9zY3JlZW5TYXZlclByb3h5LmdldCgpLCAiSW5oaWJpdCIsIGdfdmFyaWFu
dF9uZXcoIihzcykiLCBnX2dldF9wcmduYW1lKCksIG1fcmVhc29uLmRhdGEoKSksCi0gICAgICAg
IEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2Jq
ZWN0KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVm
UHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9m
aW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAg
ICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+KHVzZXJEYXRh
KTsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIkNh
bGxpbmcgJXMuSW5oaWJpdCBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9pbnRlcmZhY2Vf
bmFtZShHX0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAiKHUpIiwgJnNlbGYtPm1fc2Ny
ZWVuU2F2ZXJDb29raWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bV9jYW5j
ZWxsYWJsZSA9IG51bGxwdHI7Ci0gICAgICAgIH0sIHRoaXMpOwotfQotCi12b2lkIFNsZWVwRGlz
YWJsZXJHTGliOjphY3F1aXJlSW5oaWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KCkKLXsKLSAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInJlYXNvbiIsIGdfdmFyaWFudF9uZXdfc3RyaW5nKG1fcmVh
c29uLmRhdGEoKSkpOwotICAgIGdfZGJ1c19wcm94eV9jYWxsKG1faW5oaWJpdFBvcnRhbFByb3h5
LmdldCgpLCAiSW5oaWJpdCIsIGdfdmFyaWFudF9uZXcoIihzdUBhe3N2fSkiLCAiIiAvKiBubyB3
aW5kb3cgKi8sIDggLyogaWRsZSAqLywgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSks
Ci0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgp
LCBbXShHT2JqZWN0KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJE
YXRhKSB7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
ICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJv
eHlfY2FsbF9maW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKLSAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9f
RVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+
KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnX3dh
cm5pbmcoIkNhbGxpbmcgJXMuSW5oaWJpdCBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9p
bnRlcmZhY2VfbmFtZShHX0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAg
ICBHVmFyaWFudCogcGFyYW1ldGVyczsKKyAgICBpZiAoc2hvdWxkVXNlUG9ydGFsKCkpIHsKKyAg
ICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGdfdmFyaWFudF9idWlsZGVy
X2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgICAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInJlYXNvbiIsIGdfdmFyaWFudF9uZXdf
c3RyaW5nKG1fcmVhc29uLmRhdGEoKSkpOworICAgICAgICBwYXJhbWV0ZXJzID0gZ192YXJpYW50
X25ldygiKHN1QGF7c3Z9KSIsICIiIC8qIG5vIHdpbmRvdyAqLywgOCAvKiBpZGxlICovLCBnX3Zh
cmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFyYW1l
dGVycyA9IGdfdmFyaWFudF9uZXcoIihzcykiLCBnX2dldF9wcmduYW1lKCksIG1fcmVhc29uLmRh
dGEoKSk7CisKKyAgICBnX2RidXNfcHJveHlfY2FsbChtX3NjcmVlblNhdmVyUHJveHkuZ2V0KCks
ICJJbmhpYml0IiwgcGFyYW1ldGVycywgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIG1fY2Fu
Y2VsbGFibGUuZ2V0KCksIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfY2FsbF9maW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+KHVzZXJE
YXRhKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ193YXJuaW5nKCJDYWxsaW5n
ICVzLkluaGliaXQgZmFpbGVkOiAlcyIsIGdfZGJ1c19wcm94eV9nZXRfaW50ZXJmYWNlX25hbWUo
R19EQlVTX1BST1hZKHByb3h5KSksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFVz
ZVBvcnRhbCgpKQogICAgICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0
KCksICIobykiLCAmc2VsZi0+bV9pbmhpYml0UG9ydGFsUmVxdWVzdE9iamVjdFBhdGgub3V0UHRy
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bV9jYW5jZWxsYWJsZSA9IG51
bGxwdHI7Ci0gICAgICAgIH0sIHRoaXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0KCksICIodSkiLCAmc2VsZi0+bV9zY3Jl
ZW5TYXZlckNvb2tpZSk7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+bV9jYW5jZWxsYWJsZSA9
IG51bGxwdHI7CisgICAgfSwgdGhpcyk7CiB9CiAKIHZvaWQgU2xlZXBEaXNhYmxlckdMaWI6OnJl
bGVhc2VJbmhpYml0b3IoKQogewotICAgIGlmIChtX3NjcmVlblNhdmVyUHJveHkpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2luaGliaXRQb3J0YWxQcm94eSk7Ci0gICAgICAgIHJlbGVhc2VJbmhpYml0
b3JWaWFTY3JlZW5TYXZlclByb3h5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1f
aW5oaWJpdFBvcnRhbFByb3h5KTsKLSAgICAgICAgcmVsZWFzZUluaGliaXRvclZpYUluaGliaXRQ
b3J0YWxQcm94eSgpOwotICAgIH0KLX0KLQotdm9pZCBTbGVlcERpc2FibGVyR0xpYjo6cmVsZWFz
ZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJveHkoKQotewotICAgIEFTU0VSVChtX3NjcmVlblNh
dmVyQ29va2llKTsKLQotICAgIGdfZGJ1c19wcm94eV9jYWxsKG1fc2NyZWVuU2F2ZXJQcm94eS5n
ZXQoKSwgIlVuSW5oaWJpdCIsIGdfdmFyaWFudF9uZXcoIih1KSIsIG1fc2NyZWVuU2F2ZXJDb29r
aWUpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgbnVsbHB0ciwgW10oR09i
amVjdCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikgeworICAgIGlmICgh
c2hvdWxkVXNlUG9ydGFsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fc2NyZWVuU2F2ZXJDb29raWUp
OworICAgICAgICBnX2RidXNfcHJveHlfY2FsbChtX3NjcmVlblNhdmVyUHJveHkuZ2V0KCksICJV
bkluaGliaXQiLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBtX3NjcmVlblNhdmVyQ29va2llKSwgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIG51bGxwdHIsIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpIHsKICAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKICAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVl
ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChHX0RCVVNfUFJPWFkocHJveHkp
LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwogICAgICAgICAgICAgaWYgKGVycm9yKQogICAg
ICAgICAgICAgICAgIGdfd2FybmluZygiQ2FsbGluZyAlcy5VbkluaGliaXQgZmFpbGVkOiAlcyIs
IGdfZGJ1c19wcm94eV9nZXRfaW50ZXJmYWNlX25hbWUoR19EQlVTX1BST1hZKHByb3h5KSksIGVy
cm9yLT5tZXNzYWdlKTsKLSAgICB9LCBudWxscHRyKTsKLX0KKyAgICAgICAgfSwgbnVsbHB0cik7
CiAKLXZvaWQgU2xlZXBEaXNhYmxlckdMaWI6OnJlbGVhc2VJbmhpYml0b3JWaWFJbmhpYml0UG9y
dGFsUHJveHkoKQotewotICAgIEFTU0VSVChtX2luaGliaXRQb3J0YWxSZXF1ZXN0T2JqZWN0UGF0
aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBBU1NFUlQobV9pbmhpYml0UG9ydGFs
UmVxdWVzdE9iamVjdFBhdGgpOwogICAgIGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1cyhHX0JVU19U
WVBFX1NFU1NJT04sIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZM
QUdTX0RPX05PVF9MT0FEX1BST1BFUlRJRVMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NP
Tk5FQ1RfU0lHTkFMUyksCi0gICAgICAgIG51bGxwdHIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFs
LkRlc2t0b3AiLCBtX2luaGliaXRQb3J0YWxSZXF1ZXN0T2JqZWN0UGF0aC5nZXQoKSwgIm9yZy5m
cmVlZGVza3RvcC5wb3J0YWwuUmVxdWVzdCIsIG51bGxwdHIsCi0gICAgICAgIFtdKEdPYmplY3Qq
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpIHsKKyAgICAgICAgbnVsbHB0ciwgIm9y
Zy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsIG1faW5oaWJpdFBvcnRhbFJlcXVlc3RPYmpl
Y3RQYXRoLmdldCgpLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiwgbnVsbHB0ciwg
W10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikgeworICAgICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4g
cmVxdWVzdFByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19maW5pc2go
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAg
ICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgb3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5S
ZXF1ZXN0IHByb3h5OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChyZXF1ZXN0UHJveHkpOworICAgICAgICBnX2Ri
dXNfcHJveHlfY2FsbChyZXF1ZXN0UHJveHkuZ2V0KCksICJDbG9zZSIsIGdfdmFyaWFudF9uZXco
IigpIiksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBudWxscHRyLCBbXShHT2JqZWN0KiBw
cm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyKSB7CiAgICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+
IHJlcXVlc3RQcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfZmluaXNo
KHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgb3JnLmZyZWVkZXNrdG9w
LnBvcnRhbC5SZXF1ZXN0IHByb3h5OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0
UHJveHkpOwotICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2NhbGwocmVxdWVzdFByb3h5LmdldCgp
LCAiQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIoKSIpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAt
MSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBbXShHT2JqZWN0KiBwcm94eSwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIGdwb2ludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4g
cmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19Q
Uk9YWShwcm94eSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfd2FybmluZygiQ2FsbGlu
ZyAlcy5DbG9zZSBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9pbnRlcmZhY2VfbmFtZShH
X0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0s
IG51bGxwdHIpOworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFsdWUgPSBh
ZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19QUk9YWShwcm94eSksIHJl
c3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAg
ICAgICAgICAgZ193YXJuaW5nKCJDYWxsaW5nICVzLkNsb3NlIGZhaWxlZDogJXMiLCBnX2RidXNf
cHJveHlfZ2V0X2ludGVyZmFjZV9uYW1lKEdfREJVU19QUk9YWShwcm94eSkpLCBlcnJvci0+bWVz
c2FnZSk7CiAgICAgICAgIH0sIG51bGxwdHIpOworICAgIH0sIG51bGxwdHIpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVt
L2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVt
L2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaAppbmRleCBiMTgwZDRkNjdjZGIuLjhkYmY5NTc5NGMx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zeXN0ZW0vZ2xpYi9TbGVlcERp
c2FibGVyR0xpYi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xl
ZXBEaXNhYmxlckdMaWIuaApAQCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR0RCdXNQ
cm94eSBHREJ1c1Byb3h5OwogCiBuYW1lc3BhY2UgUEFMIHsKIAotY2xhc3MgU2xlZXBEaXNhYmxl
ckdMaWIgOiBwdWJsaWMgU2xlZXBEaXNhYmxlciB7CitjbGFzcyBTbGVlcERpc2FibGVyR0xpYiBm
aW5hbCA6IHB1YmxpYyBTbGVlcERpc2FibGVyIHsKIHB1YmxpYzoKICAgICBTbGVlcERpc2FibGVy
R0xpYihjb25zdCBjaGFyKiwgVHlwZSk7CiAgICAgdmlydHVhbCB+U2xlZXBEaXNhYmxlckdMaWIo
KTsKQEAgLTUxLDEwICs1MSw3IEBAIHByaXZhdGU6CiAKICAgICBHUmVmUHRyPEdEQnVzUHJveHk+
IG1fc2NyZWVuU2F2ZXJQcm94eTsKICAgICB1bnNpZ25lZCBtX3NjcmVlblNhdmVyQ29va2llIHsg
MCB9OwotCi0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBtX2luaGliaXRQb3J0YWxQcm94eTsKICAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IG1faW5oaWJpdFBvcnRhbFJlcXVlc3RPYmplY3RQYXRoOwot
CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CiAgICAgQ1N0cmluZyBt
X3JlYXNvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZhMDczYjkzYWJjMy4uZDM1OGIzN2M2MzE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBEaXNh
YmxlciBieSBjaGVja2luZyBpZiB3ZSBhcmUgdW5kZXIgc2FuZGJveAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNjcwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xp
Yi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aXNJbnNpZGVGbGF0
cGFrKTogVXNlIFdURjo6aXNSdW5uaW5nSW5TYW5kYm94KCkuCisKIDIwMjEtMTAtMTIgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0J1aWxkLXRpbWUgcGVyZl0g
Rm9yd2FyZC1kZWNsYXJlIG1vcmUgdGhpbmdzIGluIERvY3VtZW50LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hl
ckdMaWIuY3BwCmluZGV4IDFjNTc1ZTI5OGI0MC4uOWM1MmUzYWI5YTgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xh
dW5jaGVyR0xpYi5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDx3dGYvVW5pU3RkRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9TYW5kYm94Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC04MSw3ICs4Miw3IEBAIHN0YXRpYyBib29sIGlzSW5zaWRlRmxhdHBhaygpCiAgICAg
aWYgKHJldCkKICAgICAgICAgcmV0dXJuICpyZXQ7CiAKLSAgICByZXQgPSBnX2ZpbGVfdGVzdCgi
Ly5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworICAgIHJldCA9IGlzUnVubmlu
Z0luU2FuZGJveCgpOwogICAgIHJldHVybiAqcmV0OwogfQogCg==
</data>
<flag name="commit-queue"
          id="465182"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441063</attachid>
            <date>2021-10-13 06:01:41 -0700</date>
            <delta_ts>2021-10-18 01:54:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-sleep-disabler.diff</filename>
            <type>text/plain</type>
            <size>21298</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMGM2MGQxOWFhMTVlLi4yMjY1ODE0Y2FlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MjEtMTAtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNoZWNraW5nIGlmIHdlIGFy
ZSB1bmRlciBzYW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzE2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgaXNSdW5uaW5nSW5TYW5kYm94KCkgYW5kIHNob3VsZFVzZVBvcnRhbCgpIHRv
IGNoZWNrIHdoZXRoZXIgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgdW5kZXIgc2FuZGJveCBh
bmQKKyAgICAgICAgd2hldGhlciBwb3J0YWwgc2FuZGJveCBzaG91bGQgYmUgdXNlZC4gV0VCS0lU
X1VTRV9QT1JUQUwgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhl
IHVzZSBvZgorICAgICAgICBwb3J0YWxzIHdoZW4gbm90IHJ1bm5pbmcgdW5kZXIgdGhlIHNhbmRi
b3guCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIHd0Zi9nbGliL1NhbmRib3guY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6aXNSdW5uaW5nSW5TYW5kYm94KToKKyAgICAgICAgKFdURjo6c2hvdWxk
VXNlUG9ydGFsKToKKyAgICAgICAgKiB3dGYvZ2xpYi9TYW5kYm94Lmg6IEFkZGVkLgorCiAyMDIx
LTEwLTEyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVXNlIHN0ZDo6dmFyaWFudCBpbnN0ZWFkIG9mIFdURjo6VmFyaWFudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCA0YTEyYjVhNDM5M2YuLjNlNjE0NTZjOWFjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTksNiArOSw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNf
SEVBREVSUwogICAgIGdsaWIvR1R5cGVkZWZzLmgKICAgICBnbGliL0dVbmlxdWVQdHIuaAogICAg
IGdsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5LmgKKyAgICBnbGliL1NhbmRib3guaAogICAgIGds
aWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZHVHlwZS5oCiApCkBAIC0zNCw2ICsz
NSw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZ2xpYi9HUmVmUHRyLmNwcAogICAg
IGdsaWIvR1NvY2tldE1vbml0b3IuY3BwCiAgICAgZ2xpYi9SdW5Mb29wR0xpYi5jcHAKKyAgICBn
bGliL1NhbmRib3guY3BwCiAgICAgZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmNwcAogICAgIGdsaWIv
VVJMR0xpYi5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21h
a2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCA2NDNlZjBmY2RmNGYu
LmNiYjAwMThhZTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21h
a2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTcsNiArNyw3IEBA
IGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogICAgIGdsaWIvR1R5cGVkZWZzLmgKICAg
ICBnbGliL0dVbmlxdWVQdHIuaAogICAgIGdsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5LmgKKyAg
ICBnbGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9X
VEZHVHlwZS5oCiAKQEAgLTI1LDYgKzI2LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAg
ICBnbGliL0dSZWZQdHIuY3BwCiAgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKICAgICBnbGli
L1J1bkxvb3BHTGliLmNwcAorICAgIGdsaWIvU2FuZGJveC5jcHAKICAgICBnbGliL1NvY2tldENv
bm5lY3Rpb24uY3BwCiAgICAgZ2xpYi9VUkxHTGliLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nbGliL1NhbmRib3guY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9TYW5kYm94LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNlNTFjOWFmNTc0MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU2FuZGJveC5jcHAKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8d3RmL2dsaWIvU2FuZGJveC5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworYm9vbCBpc1J1bm5pbmdJblNhbmRib3goKQoreworICAgIHJldHVy
biBnX2ZpbGVfdGVzdCgiLy5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworfQor
Citib29sIHNob3VsZFVzZVBvcnRhbCgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZVBv
cnRhbCA9IG51bGxwdHI7CisgICAgaWYgKFVOTElLRUxZKCF1c2VQb3J0YWwpKSB7CisgICAgICAg
IHVzZVBvcnRhbCA9IGlzUnVubmluZ0luU2FuZGJveCgpID8gIjEiIDogZ19nZXRlbnYoIldFQktJ
VF9VU0VfUE9SVEFMIik7CisgICAgICAgIGlmICghdXNlUG9ydGFsKQorICAgICAgICAgICAgdXNl
UG9ydGFsID0gIjAiOworICAgIH0KKyAgICByZXR1cm4gdXNlUG9ydGFsWzBdICE9ICcwJzsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1Nh
bmRib3guaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU2FuZGJveC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmViN2FiOGNlMTc1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvZ2xpYi9TYW5kYm94LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdURiB7CisKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGlzUnVubmluZ0luU2Fu
ZGJveCgpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2hvdWxkVXNlUG9ydGFsKCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmlzUnVubmluZ0luU2FuZGJveDsKK3VzaW5n
IFdURjo6c2hvdWxkVXNlUG9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNmJlNGRiNDBhNmZj
Li5hYzA1NDZiZWVjNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIx
LTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBEaXNhYmxlciBieSBjaGVja2luZyBpZiB3ZSBhcmUg
dW5kZXIgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMxNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgdHJpZXMgdG8gY29ubmVjdCB0byBT
Y3JlZW5TYXZlciBpbnRlcmZhY2UgYW5kIGlmIHRoYXQgZmFpbHMgdHJpZXMgd2l0aCB0aGUgcG9y
dGFsCisgICAgICAgIG9uZS4gSXQncyBzaW1wbGVyIHRvIGNoZWNrIGlmIHdlIGFyZSB1bmRlciBz
YW5kYm94IGFuZCBpdCBhdm9pZHMgYSBjb25uZWN0aW9uIHRoYXQgd2Uga25vdyBpdCdzIGFsd2F5
cyBnb2luZyB0bworICAgICAgICBmYWlsLgorCisgICAgICAgICogcGFsL3N5c3RlbS9nbGliL1Ns
ZWVwRGlzYWJsZXJHTGliLmNwcDoKKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OlNs
ZWVwRGlzYWJsZXJHTGliKToKKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OmFjcXVp
cmVJbmhpYml0b3IpOgorICAgICAgICAoUEFMOjpTbGVlcERpc2FibGVyR0xpYjo6cmVsZWFzZUlu
aGliaXRvcik6CisgICAgICAgIChQQUw6OlNsZWVwRGlzYWJsZXJHTGliOjphY3F1aXJlSW5oaWJp
dG9yVmlhU2NyZWVuU2F2ZXJQcm94eSk6IERlbGV0ZWQuCisgICAgICAgIChQQUw6OlNsZWVwRGlz
YWJsZXJHTGliOjphY3F1aXJlSW5oaWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdMaWI6OnJlbGVhc2VJbmhpYml0b3JWaWFT
Y3JlZW5TYXZlclByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdM
aWI6OnJlbGVhc2VJbmhpYml0b3JWaWFJbmhpYml0UG9ydGFsUHJveHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBhbC9zeXN0ZW0vZ2xpYi9TbGVlcERpc2FibGVyR0xpYi5oOgorCiAyMDIxLTEwLTEy
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUg
c29tZSBzdGFnZWQgVmlzaW9uS2l0Q29yZSBTUEkgaW50byBWaXNpb25LaXRDb3JlU1BJLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxl
ckdMaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zeXN0ZW0vZ2xpYi9TbGVlcERpc2Fi
bGVyR0xpYi5jcHAKaW5kZXggNmY5MjJlMTE4YWZkLi45MTUxY2RkOWI4ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdM
aWIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1NhbmRib3guaD4K
IAogbmFtZXNwYWNlIFBBTCB7CiAKQEAgLTQ5LDQ5ICs1MCwyOSBAQCBTbGVlcERpc2FibGVyR0xp
Yjo6U2xlZXBEaXNhYmxlckdMaWIoY29uc3QgY2hhciogcmVhc29uLCBUeXBlIHR5cGUpCiAgICAg
Ly8gZXZlciBuZWVkIHRoaXMgZGlzdGluY3Rpb24sIHdoaWNoIHNlZW1zIHVubGlrZWx5LCB0aGVu
IHdlJ2xsIG5lZWQgdG8KICAgICAvLyBhdWRpdCBhbGwgdXNlIG9mIFNsZWVwRGlzYWJsZXIuCiAK
LSAgICAvLyBGaXJzdCwgdHJ5IHRvIHVzZSB0aGUgU2NyZWVuU2F2ZXIgQVBJLgorICAgIGNvbnN0
IGNoYXIqIGJ1c05hbWUgPSBzaG91bGRVc2VQb3J0YWwoKSA/ICJvcmcuZnJlZWRlc2t0b3AucG9y
dGFsLkRlc2t0b3AiIDogIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciI7CisgICAgY29uc3Qg
Y2hhciogb2JqZWN0UGF0aCA9IHNob3VsZFVzZVBvcnRhbCgpID8gIi9vcmcvZnJlZWRlc2t0b3Av
cG9ydGFsL2Rlc2t0b3AiIDogIi9vcmcvZnJlZWRlc2t0b3AvU2NyZWVuU2F2ZXIiOworICAgIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUgPSBzaG91bGRVc2VQb3J0YWwoKSA/ICJvcmcuZnJlZWRl
c2t0b3AucG9ydGFsLkluaGliaXQiIDogIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciI7CiAg
ICAgZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzKEdfQlVTX1RZUEVfU0VTU0lPTiwgc3RhdGljX2Nh
c3Q8R0RCdXNQcm94eUZsYWdzPihHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0xPQURfUFJPUEVS
VElFUyB8IEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfQ09OTkVDVF9TSUdOQUxTKSwKLSAgICAg
ICAgbnVsbHB0ciwgIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciIsICIvb3JnL2ZyZWVkZXNr
dG9wL1NjcmVlblNhdmVyIiwgIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5TYXZlciIsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksCi0gICAgICAgIFtdKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYo
Z19kYnVzX3Byb3h5X25ld19mb3JfYnVzX2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkp
OwotICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJP
UiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICBudWxscHRyLCBidXNOYW1lLCBvYmpl
Y3RQYXRoLCBpbnRlcmZhY2VOYW1lLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2JqZWN0Kiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfZmluaXNoKHJlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCks
IEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvKiBzZWxmID0gc3RhdGljX2Nhc3Q8U2xlZXBEaXNhYmxlckdMaWIqPih1
c2VyRGF0YSk7CisgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBuYW1lT3duZXIoZ19kYnVzX3Byb3h5X2dldF9uYW1lX293bmVyKHByb3h5LmdldCgpKSk7
CisgICAgICAgICAgICBpZiAobmFtZU93bmVyKSB7CisgICAgICAgICAgICAgICAgc2VsZi0+bV9z
Y3JlZW5TYXZlclByb3h5ID0gV1RGTW92ZShwcm94eSk7CisgICAgICAgICAgICAgICAgc2VsZi0+
YWNxdWlyZUluaGliaXRvcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgYXV0byogc2VsZiA9IHN0YXRpY19jYXN0PFNsZWVwRGlzYWJsZXJHTGliKj4odXNlckRhdGEp
OwotICAgICAgICAgICAgaWYgKHByb3h5KSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5kZXIgRmxh
dHBhaywgd2UnbGwgZ2V0IGEgdXNlbGVzcyBwcm94eSB3aXRoIG5vIG5hbWUgb3duZXIuCi0gICAg
ICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBuYW1lT3duZXIoZ19kYnVzX3Byb3h5X2dldF9u
YW1lX293bmVyKHByb3h5LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVPd25lcikg
ewotICAgICAgICAgICAgICAgICAgICBzZWxmLT5tX3NjcmVlblNhdmVyUHJveHkgPSBXVEZNb3Zl
KHByb3h5KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi0+YWNxdWlyZUluaGliaXRvcigpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEl0IGZhaWxlZC4gVHJ5IHRvIHVzZSB0
aGUgRmxhdHBhayBwb3J0YWwgaW5zdGVhZC4KLSAgICAgICAgICAgIGdfZGJ1c19wcm94eV9uZXdf
Zm9yX2J1cyhHX0JVU19UWVBFX1NFU1NJT04sIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4o
R19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9MT0FEX1BST1BFUlRJRVMgfCBHX0RCVVNfUFJPWFlf
RkxBR1NfRE9fTk9UX0NPTk5FQ1RfU0lHTkFMUyksCi0gICAgICAgICAgICAgICAgbnVsbHB0ciwg
Im9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRh
bC9kZXNrdG9wIiwgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuSW5oaWJpdCIsIHNlbGYtPm1fY2Fu
Y2VsbGFibGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgW10oR09iamVjdCosIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIEdSZWZQdHI8R0RC
dXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19mb3JfYnVzX2Zpbmlz
aChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExF
RCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYXV0byogc2VsZiA9IHN0YXRpY19jYXN0PFNsZWVwRGlzYWJsZXJHTGliKj4odXNlckRhdGEp
OwotICAgICAgICAgICAgICAgICAgICBpZiAocHJveHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZU93bmVyKGdfZGJ1c19wcm94eV9nZXRfbmFtZV9vd25l
cihwcm94eS5nZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVPd25lcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1faW5oaWJpdFBvcnRhbFByb3h5
ID0gV1RGTW92ZShwcm94eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YWNx
dWlyZUluaGliaXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEdpdmUgdXAuIERvbid0IHdhcm4gdGhlIHVzZXI6IHRoaXMgaXMgZXhw
ZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYtPm1fY2FuY2VsbGFibGUgPSBudWxscHRy
OwotICAgICAgICAgICAgfSwgc2VsZik7Ci0gICAgICAgIH0sIHRoaXMpOworICAgICAgICAvLyBH
aXZlIHVwLiBEb24ndCB3YXJuIHRoZSB1c2VyOiB0aGlzIGlzIGV4cGVjdGVkLgorICAgICAgICBz
ZWxmLT5tX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKKyAgICB9LCB0aGlzKTsKIH0KIAogU2xlZXBE
aXNhYmxlckdMaWI6On5TbGVlcERpc2FibGVyR0xpYigpCkBAIC0xMDQsMTA1ICs4NSw2NyBAQCBT
bGVlcERpc2FibGVyR0xpYjo6flNsZWVwRGlzYWJsZXJHTGliKCkKIAogdm9pZCBTbGVlcERpc2Fi
bGVyR0xpYjo6YWNxdWlyZUluaGliaXRvcigpCiB7Ci0gICAgaWYgKG1fc2NyZWVuU2F2ZXJQcm94
eSkgewotICAgICAgICBBU1NFUlQoIW1faW5oaWJpdFBvcnRhbFByb3h5KTsKLSAgICAgICAgYWNx
dWlyZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJveHkoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQobV9pbmhpYml0UG9ydGFsUHJveHkpOwotICAgICAgICBhY3F1aXJlSW5oaWJpdG9y
VmlhSW5oaWJpdFBvcnRhbFByb3h5KCk7Ci0gICAgfQotfQotCi12b2lkIFNsZWVwRGlzYWJsZXJH
TGliOjphY3F1aXJlSW5oaWJpdG9yVmlhU2NyZWVuU2F2ZXJQcm94eSgpCi17Ci0gICAgZ19kYnVz
X3Byb3h5X2NhbGwobV9zY3JlZW5TYXZlclByb3h5LmdldCgpLCAiSW5oaWJpdCIsIGdfdmFyaWFu
dF9uZXcoIihzcykiLCBnX2dldF9wcmduYW1lKCksIG1fcmVhc29uLmRhdGEoKSksCi0gICAgICAg
IEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2Jq
ZWN0KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVm
UHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9m
aW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAg
ICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+KHVzZXJEYXRh
KTsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIkNh
bGxpbmcgJXMuSW5oaWJpdCBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9pbnRlcmZhY2Vf
bmFtZShHX0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAiKHUpIiwgJnNlbGYtPm1fc2Ny
ZWVuU2F2ZXJDb29raWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bV9jYW5j
ZWxsYWJsZSA9IG51bGxwdHI7Ci0gICAgICAgIH0sIHRoaXMpOwotfQotCi12b2lkIFNsZWVwRGlz
YWJsZXJHTGliOjphY3F1aXJlSW5oaWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KCkKLXsKLSAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInJlYXNvbiIsIGdfdmFyaWFudF9uZXdfc3RyaW5nKG1fcmVh
c29uLmRhdGEoKSkpOwotICAgIGdfZGJ1c19wcm94eV9jYWxsKG1faW5oaWJpdFBvcnRhbFByb3h5
LmdldCgpLCAiSW5oaWJpdCIsIGdfdmFyaWFudF9uZXcoIihzdUBhe3N2fSkiLCAiIiAvKiBubyB3
aW5kb3cgKi8sIDggLyogaWRsZSAqLywgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSks
Ci0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgp
LCBbXShHT2JqZWN0KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJE
YXRhKSB7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
ICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJv
eHlfY2FsbF9maW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKLSAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9f
RVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+
KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnX3dh
cm5pbmcoIkNhbGxpbmcgJXMuSW5oaWJpdCBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9p
bnRlcmZhY2VfbmFtZShHX0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAg
ICBHVmFyaWFudCogcGFyYW1ldGVyczsKKyAgICBpZiAoc2hvdWxkVXNlUG9ydGFsKCkpIHsKKyAg
ICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGdfdmFyaWFudF9idWlsZGVy
X2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgICAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInJlYXNvbiIsIGdfdmFyaWFudF9uZXdf
c3RyaW5nKG1fcmVhc29uLmRhdGEoKSkpOworICAgICAgICBwYXJhbWV0ZXJzID0gZ192YXJpYW50
X25ldygiKHN1QGF7c3Z9KSIsICIiIC8qIG5vIHdpbmRvdyAqLywgOCAvKiBpZGxlICovLCBnX3Zh
cmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFyYW1l
dGVycyA9IGdfdmFyaWFudF9uZXcoIihzcykiLCBnX2dldF9wcmduYW1lKCksIG1fcmVhc29uLmRh
dGEoKSk7CisKKyAgICBnX2RidXNfcHJveHlfY2FsbChtX3NjcmVlblNhdmVyUHJveHkuZ2V0KCks
ICJJbmhpYml0IiwgcGFyYW1ldGVycywgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIG1fY2Fu
Y2VsbGFibGUuZ2V0KCksIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfY2FsbF9maW5pc2goR19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2FibGVyR0xpYio+KHVzZXJE
YXRhKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZ193YXJuaW5nKCJDYWxsaW5n
ICVzLkluaGliaXQgZmFpbGVkOiAlcyIsIGdfZGJ1c19wcm94eV9nZXRfaW50ZXJmYWNlX25hbWUo
R19EQlVTX1BST1hZKHByb3h5KSksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFVz
ZVBvcnRhbCgpKQogICAgICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0
KCksICIobykiLCAmc2VsZi0+bV9pbmhpYml0UG9ydGFsUmVxdWVzdE9iamVjdFBhdGgub3V0UHRy
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bV9jYW5jZWxsYWJsZSA9IG51
bGxwdHI7Ci0gICAgICAgIH0sIHRoaXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0KCksICIodSkiLCAmc2VsZi0+bV9zY3Jl
ZW5TYXZlckNvb2tpZSk7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+bV9jYW5jZWxsYWJsZSA9
IG51bGxwdHI7CisgICAgfSwgdGhpcyk7CiB9CiAKIHZvaWQgU2xlZXBEaXNhYmxlckdMaWI6OnJl
bGVhc2VJbmhpYml0b3IoKQogewotICAgIGlmIChtX3NjcmVlblNhdmVyUHJveHkpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2luaGliaXRQb3J0YWxQcm94eSk7Ci0gICAgICAgIHJlbGVhc2VJbmhpYml0
b3JWaWFTY3JlZW5TYXZlclByb3h5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1f
aW5oaWJpdFBvcnRhbFByb3h5KTsKLSAgICAgICAgcmVsZWFzZUluaGliaXRvclZpYUluaGliaXRQ
b3J0YWxQcm94eSgpOwotICAgIH0KLX0KLQotdm9pZCBTbGVlcERpc2FibGVyR0xpYjo6cmVsZWFz
ZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJveHkoKQotewotICAgIEFTU0VSVChtX3NjcmVlblNh
dmVyQ29va2llKTsKLQotICAgIGdfZGJ1c19wcm94eV9jYWxsKG1fc2NyZWVuU2F2ZXJQcm94eS5n
ZXQoKSwgIlVuSW5oaWJpdCIsIGdfdmFyaWFudF9uZXcoIih1KSIsIG1fc2NyZWVuU2F2ZXJDb29r
aWUpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgbnVsbHB0ciwgW10oR09i
amVjdCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikgeworICAgIGlmICgh
c2hvdWxkVXNlUG9ydGFsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fc2NyZWVuU2F2ZXJDb29raWUp
OworICAgICAgICBnX2RidXNfcHJveHlfY2FsbChtX3NjcmVlblNhdmVyUHJveHkuZ2V0KCksICJV
bkluaGliaXQiLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBtX3NjcmVlblNhdmVyQ29va2llKSwgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIG51bGxwdHIsIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpIHsKICAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKICAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVl
ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChHX0RCVVNfUFJPWFkocHJveHkp
LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwogICAgICAgICAgICAgaWYgKGVycm9yKQogICAg
ICAgICAgICAgICAgIGdfd2FybmluZygiQ2FsbGluZyAlcy5VbkluaGliaXQgZmFpbGVkOiAlcyIs
IGdfZGJ1c19wcm94eV9nZXRfaW50ZXJmYWNlX25hbWUoR19EQlVTX1BST1hZKHByb3h5KSksIGVy
cm9yLT5tZXNzYWdlKTsKLSAgICB9LCBudWxscHRyKTsKLX0KKyAgICAgICAgfSwgbnVsbHB0cik7
CiAKLXZvaWQgU2xlZXBEaXNhYmxlckdMaWI6OnJlbGVhc2VJbmhpYml0b3JWaWFJbmhpYml0UG9y
dGFsUHJveHkoKQotewotICAgIEFTU0VSVChtX2luaGliaXRQb3J0YWxSZXF1ZXN0T2JqZWN0UGF0
aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBBU1NFUlQobV9pbmhpYml0UG9ydGFs
UmVxdWVzdE9iamVjdFBhdGgpOwogICAgIGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1cyhHX0JVU19U
WVBFX1NFU1NJT04sIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZM
QUdTX0RPX05PVF9MT0FEX1BST1BFUlRJRVMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NP
Tk5FQ1RfU0lHTkFMUyksCi0gICAgICAgIG51bGxwdHIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFs
LkRlc2t0b3AiLCBtX2luaGliaXRQb3J0YWxSZXF1ZXN0T2JqZWN0UGF0aC5nZXQoKSwgIm9yZy5m
cmVlZGVza3RvcC5wb3J0YWwuUmVxdWVzdCIsIG51bGxwdHIsCi0gICAgICAgIFtdKEdPYmplY3Qq
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpIHsKKyAgICAgICAgbnVsbHB0ciwgIm9y
Zy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsIG1faW5oaWJpdFBvcnRhbFJlcXVlc3RPYmpl
Y3RQYXRoLmdldCgpLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiwgbnVsbHB0ciwg
W10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikgeworICAgICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4g
cmVxdWVzdFByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19maW5pc2go
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAg
ICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgb3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5S
ZXF1ZXN0IHByb3h5OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChyZXF1ZXN0UHJveHkpOworICAgICAgICBnX2Ri
dXNfcHJveHlfY2FsbChyZXF1ZXN0UHJveHkuZ2V0KCksICJDbG9zZSIsIGdfdmFyaWFudF9uZXco
IigpIiksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBudWxscHRyLCBbXShHT2JqZWN0KiBw
cm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyKSB7CiAgICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+
IHJlcXVlc3RQcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2Zvcl9idXNfZmluaXNo
KHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgb3JnLmZyZWVkZXNrdG9w
LnBvcnRhbC5SZXF1ZXN0IHByb3h5OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0
UHJveHkpOwotICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2NhbGwocmVxdWVzdFByb3h5LmdldCgp
LCAiQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIoKSIpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAt
MSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBbXShHT2JqZWN0KiBwcm94eSwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIGdwb2ludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4g
cmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19Q
Uk9YWShwcm94eSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfd2FybmluZygiQ2FsbGlu
ZyAlcy5DbG9zZSBmYWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9pbnRlcmZhY2VfbmFtZShH
X0RCVVNfUFJPWFkocHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0s
IG51bGxwdHIpOworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFsdWUgPSBh
ZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19QUk9YWShwcm94eSksIHJl
c3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAg
ICAgICAgICAgZ193YXJuaW5nKCJDYWxsaW5nICVzLkNsb3NlIGZhaWxlZDogJXMiLCBnX2RidXNf
cHJveHlfZ2V0X2ludGVyZmFjZV9uYW1lKEdfREJVU19QUk9YWShwcm94eSkpLCBlcnJvci0+bWVz
c2FnZSk7CiAgICAgICAgIH0sIG51bGxwdHIpOworICAgIH0sIG51bGxwdHIpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVt
L2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVt
L2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaAppbmRleCBiMTgwZDRkNjdjZGIuLjhkYmY5NTc5NGMx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zeXN0ZW0vZ2xpYi9TbGVlcERp
c2FibGVyR0xpYi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lzdGVtL2dsaWIvU2xl
ZXBEaXNhYmxlckdMaWIuaApAQCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR0RCdXNQ
cm94eSBHREJ1c1Byb3h5OwogCiBuYW1lc3BhY2UgUEFMIHsKIAotY2xhc3MgU2xlZXBEaXNhYmxl
ckdMaWIgOiBwdWJsaWMgU2xlZXBEaXNhYmxlciB7CitjbGFzcyBTbGVlcERpc2FibGVyR0xpYiBm
aW5hbCA6IHB1YmxpYyBTbGVlcERpc2FibGVyIHsKIHB1YmxpYzoKICAgICBTbGVlcERpc2FibGVy
R0xpYihjb25zdCBjaGFyKiwgVHlwZSk7CiAgICAgdmlydHVhbCB+U2xlZXBEaXNhYmxlckdMaWIo
KTsKQEAgLTUxLDEwICs1MSw3IEBAIHByaXZhdGU6CiAKICAgICBHUmVmUHRyPEdEQnVzUHJveHk+
IG1fc2NyZWVuU2F2ZXJQcm94eTsKICAgICB1bnNpZ25lZCBtX3NjcmVlblNhdmVyQ29va2llIHsg
MCB9OwotCi0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBtX2luaGliaXRQb3J0YWxQcm94eTsKICAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IG1faW5oaWJpdFBvcnRhbFJlcXVlc3RPYmplY3RQYXRoOwot
CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CiAgICAgQ1N0cmluZyBt
X3JlYXNvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZhMDczYjkzYWJjMy4uZDM1OGIzN2M2MzE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTEwLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBEaXNh
YmxlciBieSBjaGVja2luZyBpZiB3ZSBhcmUgdW5kZXIgc2FuZGJveAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNjcwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xp
Yi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aXNJbnNpZGVGbGF0
cGFrKTogVXNlIFdURjo6aXNSdW5uaW5nSW5TYW5kYm94KCkuCisKIDIwMjEtMTAtMTIgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0J1aWxkLXRpbWUgcGVyZl0g
Rm9yd2FyZC1kZWNsYXJlIG1vcmUgdGhpbmdzIGluIERvY3VtZW50LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hl
ckdMaWIuY3BwCmluZGV4IDFjNTc1ZTI5OGI0MC4uOWM1MmUzYWI5YTgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xh
dW5jaGVyR0xpYi5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDx3dGYvVW5pU3RkRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR0xpYlV0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9TYW5kYm94Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC04MSw3ICs4Miw3IEBAIHN0YXRpYyBib29sIGlzSW5zaWRlRmxhdHBhaygpCiAgICAg
aWYgKHJldCkKICAgICAgICAgcmV0dXJuICpyZXQ7CiAKLSAgICByZXQgPSBnX2ZpbGVfdGVzdCgi
Ly5mbGF0cGFrLWluZm8iLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworICAgIHJldCA9IGlzUnVubmlu
Z0luU2FuZGJveCgpOwogICAgIHJldHVybiAqcmV0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441571</attachid>
            <date>2021-10-18 01:54:05 -0700</date>
            <delta_ts>2021-10-18 05:51:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-sleep-disabled.diff</filename>
            <type>text/plain</type>
            <size>23230</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMDAwZDY5ZDUxNjYwLi44ZjkzNDQ5ZWE0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MjEtMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHTElCXSBTaW1wbGlmeSBTbGVlcERpc2FibGVyIGJ5IGNoZWNraW5nIGlmIHdlIGFy
ZSB1bmRlciBzYW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzE2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb3ZlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHJ1bm5pbmcgaW5zaWRlIGEgc2FuZGJv
eCBhbmQgYWRkIHNob3VsZFVzZVBvcnRhbCgpIHRvIGNoZWNrIHdoZXRoZXIgcG9ydGFsIHNhbmRi
b3gKKyAgICAgICAgc2hvdWxkIGJlIHVzZWQuIFdFQktJVF9VU0VfUE9SVEFMIGVudmlyb25tZW50
IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoZSB1c2Ugb2YgcG9ydGFscyB3aGVuIG5v
dCBydW5uaW5nCisgICAgICAgIHVuZGVyIHRoZSBzYW5kYm94LgorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAg
ICAgKiB3dGYvZ2xpYi9TYW5kYm94LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OmlzSW5zaWRl
RmxhdHBhayk6CisgICAgICAgIChXVEY6OmlzSW5zaWRlRG9ja2VyKToKKyAgICAgICAgKFdURjo6
aXNJbnNpZGVTbmFwKToKKyAgICAgICAgKFdURjo6c2hvdWxkVXNlUG9ydGFsKToKKyAgICAgICAg
KiB3dGYvZ2xpYi9TYW5kYm94Lmg6IEFkZGVkLgorCiAyMDIxLTEwLTE3ICBEZWFuIEphY2tzb24g
IDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViWFJdIFN0dWJzIGZvciBXZWJYUiBIYW5k
IElucHV0IE1vZHVsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4MDkwZTkxNjBhMzUu
LjdmNmY3NzIyZDJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTgsNiArOCw3IEBA
IGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogICAgIGdsaWIvR1R5cGVkZWZzLmgKICAg
ICBnbGliL0dVbmlxdWVQdHIuaAogICAgIGdsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5LmgKKyAg
ICBnbGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9X
VEZHVHlwZS5oCiApCkBAIC0zMiw2ICszMyw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgZ2xpYi9HUmVmUHRyLmNwcAogICAgIGdsaWIvR1NvY2tldE1vbml0b3IuY3BwCiAgICAgZ2xp
Yi9SdW5Mb29wR0xpYi5jcHAKKyAgICBnbGliL1NhbmRib3guY3BwCiAgICAgZ2xpYi9Tb2NrZXRD
b25uZWN0aW9uLmNwcAogICAgIGdsaWIvVVJMR0xpYi5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdQRS5j
bWFrZQppbmRleCBmYjhiYjNlZTY2MzIuLmQ0ZDI0MTUxN2E1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1X
UEUuY21ha2UKQEAgLTYsNiArNiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIGdsaWIvR1R5cGVkZWZzLmgKICAgICBnbGliL0dVbmlxdWVQdHIuaAogICAgIGdsaWIvUnVu
TG9vcFNvdXJjZVByaW9yaXR5LmgKKyAgICBnbGliL1NhbmRib3guaAogICAgIGdsaWIvU29ja2V0
Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZHVHlwZS5oCiAKQEAgLTIzLDYgKzI0LDcgQEAgbGlz
dChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBnbGliL0dSZWZQdHIuY3BwCiAgICAgZ2xpYi9HU29j
a2V0TW9uaXRvci5jcHAKICAgICBnbGliL1J1bkxvb3BHTGliLmNwcAorICAgIGdsaWIvU2FuZGJv
eC5jcHAKICAgICBnbGliL1NvY2tldENvbm5lY3Rpb24uY3BwCiAgICAgZ2xpYi9VUkxHTGliLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1NhbmRib3guY3BwIGIvU291cmNl
L1dURi93dGYvZ2xpYi9TYW5kYm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLmRmMmVlNDRhZDdlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvU2FuZGJveC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvU2FuZGJveC5oPgor
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorCituYW1lc3BhY2UgV1RG
IHsKKworYm9vbCBpc0luc2lkZUZsYXRwYWsoKQoreworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PGJvb2w+IHJldDsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0ID0gZ19maWxlX3Rlc3QoIi8u
ZmxhdHBhay1pbmZvIiwgR19GSUxFX1RFU1RfRVhJU1RTKTsKKyAgICByZXR1cm4gKnJldDsKK30K
KworYm9vbCBpc0luc2lkZURvY2tlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gcmV0OworICAgIGlmICghcmV0KQorICAgICAgICByZXQgPSBnX2ZpbGVfdGVzdCgiLy5kb2Nr
ZXJlbnYiLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworICAgIHJldHVybiAqcmV0OworfQorCitib29s
IGlzSW5zaWRlU25hcCgpCit7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcmV0Owor
ICAgIGlmICghcmV0KSB7CisgICAgICAgIC8vIFRoZSAiU05BUCIgZW52aXJvbm1lbnQgdmFyaWFi
bGUgaXMgbm90IHVubGlrZWx5IHRvIGJlIHNldCBmb3IvYnkgc29tZXRoaW5nIG90aGVyCisgICAg
ICAgIC8vIHRoYW4gU25hcCwgc28gY2hlY2sgYSBjb3VwbGUgb2YgYWRkaXRpb25hbCB2YXJpYWJs
ZXMgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLgorICAgICAgICAvLyBTZWU6IGh0dHBzOi8vc25h
cGNyYWZ0LmlvL2RvY3MvZW52aXJvbm1lbnQtdmFyaWFibGVzCisgICAgICAgIHJldCA9IGdfZ2V0
ZW52KCJTTkFQIikgJiYgZ19nZXRlbnYoIlNOQVBfTkFNRSIpICYmIGdfZ2V0ZW52KCJTTkFQX1JF
VklTSU9OIik7CisgICAgfQorICAgIHJldHVybiAqcmV0OworfQorCitib29sIHNob3VsZFVzZVBv
cnRhbCgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZVBvcnRhbCA9IG51bGxwdHI7Cisg
ICAgaWYgKFVOTElLRUxZKCF1c2VQb3J0YWwpKSB7CisgICAgICAgIHVzZVBvcnRhbCA9IGlzSW5z
aWRlRmxhdHBhaygpIHx8IGlzSW5zaWRlU25hcCgpID8gIjEiIDogZ19nZXRlbnYoIldFQktJVF9V
U0VfUE9SVEFMIik7CisgICAgICAgIGlmICghdXNlUG9ydGFsKQorICAgICAgICAgICAgdXNlUG9y
dGFsID0gIjAiOworICAgIH0KKyAgICByZXR1cm4gdXNlUG9ydGFsWzBdICE9ICcwJzsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1NhbmRi
b3guaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU2FuZGJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uODE3ZTEyYTdhMDQxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvZ2xpYi9TYW5kYm94LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFt
ZXNwYWNlIFdURiB7CisKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGlzSW5zaWRlRmxhdHBhaygp
OworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbnNpZGVEb2NrZXIoKTsKK1dURl9FWFBPUlRf
UFJJVkFURSBib29sIGlzSW5zaWRlU25hcCgpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2hv
dWxkVXNlUG9ydGFsKCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmlzSW5z
aWRlRmxhdHBhazsKK3VzaW5nIFdURjo6aXNJbnNpZGVEb2NrZXI7Cit1c2luZyBXVEY6OmlzSW5z
aWRlU25hcDsKK3VzaW5nIFdURjo6c2hvdWxkVXNlUG9ydGFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5k
ZXggMzEzMjFiNmY2MGFlLi43MmFmODllOWZhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI0IEBACisyMDIxLTEwLTE4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR0xJQl0gU2ltcGxpZnkgU2xlZXBEaXNhYmxlciBieSBjaGVj
a2luZyBpZiB3ZSBhcmUgdW5kZXIgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNjcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgdHJpZXMg
dG8gY29ubmVjdCB0byBTY3JlZW5TYXZlciBpbnRlcmZhY2UgYW5kIGlmIHRoYXQgZmFpbHMgdHJp
ZXMgd2l0aCB0aGUgcG9ydGFsCisgICAgICAgIG9uZS4gSXQncyBzaW1wbGVyIHRvIGNoZWNrIGlm
IHdlIGFyZSB1bmRlciBzYW5kYm94IGFuZCBpdCBhdm9pZHMgYSBjb25uZWN0aW9uIHRoYXQgd2Ug
a25vdyBpcyBhbHdheXMgZ29pbmcgdG8KKyAgICAgICAgZmFpbC4KKworICAgICAgICAqIHBhbC9z
eXN0ZW0vZ2xpYi9TbGVlcERpc2FibGVyR0xpYi5jcHA6CisgICAgICAgIChQQUw6OlNsZWVwRGlz
YWJsZXJHTGliOjpTbGVlcERpc2FibGVyR0xpYik6CisgICAgICAgIChQQUw6OlNsZWVwRGlzYWJs
ZXJHTGliOjphY3F1aXJlSW5oaWJpdG9yKToKKyAgICAgICAgKFBBTDo6U2xlZXBEaXNhYmxlckdM
aWI6OnJlbGVhc2VJbmhpYml0b3IpOgorICAgICAgICAoUEFMOjpTbGVlcERpc2FibGVyR0xpYjo6
YWNxdWlyZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJveHkpOiBEZWxldGVkLgorICAgICAgICAo
UEFMOjpTbGVlcERpc2FibGVyR0xpYjo6YWNxdWlyZUluaGliaXRvclZpYUluaGliaXRQb3J0YWxQ
cm94eSk6IERlbGV0ZWQuCisgICAgICAgIChQQUw6OlNsZWVwRGlzYWJsZXJHTGliOjpyZWxlYXNl
SW5oaWJpdG9yVmlhU2NyZWVuU2F2ZXJQcm94eSk6IERlbGV0ZWQuCisgICAgICAgIChQQUw6OlNs
ZWVwRGlzYWJsZXJHTGliOjpyZWxlYXNlSW5oaWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwYWwvc3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaDoK
KwogMjAyMS0xMC0xNyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIEJ1aWxkIGZpeCAjMzogQWRvcHQgYXR0cmlidXRpb24gQVZDYXB0dXJlU2Vzc2lvbiBTUEkg
Zm9yIEdQVSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3N5c3Rl
bS9nbGliL1NsZWVwRGlzYWJsZXJHTGliLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3lz
dGVtL2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuY3BwCmluZGV4IDZmOTIyZTExOGFmZC4uOTE1MWNk
ZDliODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3N5c3RlbS9nbGliL1Ns
ZWVwRGlzYWJsZXJHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3N5c3RlbS9n
bGliL1NsZWVwRGlzYWJsZXJHTGliLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8
Z2lvL2dpby5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9TYW5kYm94Lmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00OSw0OSArNTAsMjkg
QEAgU2xlZXBEaXNhYmxlckdMaWI6OlNsZWVwRGlzYWJsZXJHTGliKGNvbnN0IGNoYXIqIHJlYXNv
biwgVHlwZSB0eXBlKQogICAgIC8vIGV2ZXIgbmVlZCB0aGlzIGRpc3RpbmN0aW9uLCB3aGljaCBz
ZWVtcyB1bmxpa2VseSwgdGhlbiB3ZSdsbCBuZWVkIHRvCiAgICAgLy8gYXVkaXQgYWxsIHVzZSBv
ZiBTbGVlcERpc2FibGVyLgogCi0gICAgLy8gRmlyc3QsIHRyeSB0byB1c2UgdGhlIFNjcmVlblNh
dmVyIEFQSS4KKyAgICBjb25zdCBjaGFyKiBidXNOYW1lID0gc2hvdWxkVXNlUG9ydGFsKCkgPyAi
b3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiA6ICJvcmcuZnJlZWRlc2t0b3AuU2NyZWVu
U2F2ZXIiOworICAgIGNvbnN0IGNoYXIqIG9iamVjdFBhdGggPSBzaG91bGRVc2VQb3J0YWwoKSA/
ICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wIiA6ICIvb3JnL2ZyZWVkZXNrdG9wL1Nj
cmVlblNhdmVyIjsKKyAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lID0gc2hvdWxkVXNlUG9y
dGFsKCkgPyAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5JbmhpYml0IiA6ICJvcmcuZnJlZWRlc2t0
b3AuU2NyZWVuU2F2ZXIiOwogICAgIGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1cyhHX0JVU19UWVBF
X1NFU1NJT04sIHN0YXRpY19jYXN0PEdEQnVzUHJveHlGbGFncz4oR19EQlVTX1BST1hZX0ZMQUdT
X0RPX05PVF9MT0FEX1BST1BFUlRJRVMgfCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0NPTk5F
Q1RfU0lHTkFMUyksCi0gICAgICAgIG51bGxwdHIsICJvcmcuZnJlZWRlc2t0b3AuU2NyZWVuU2F2
ZXIiLCAiL29yZy9mcmVlZGVza3RvcC9TY3JlZW5TYXZlciIsICJvcmcuZnJlZWRlc2t0b3AuU2Ny
ZWVuU2F2ZXIiLCBtX2NhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICBbXShHT2JqZWN0KiwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+
IHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZm9yX2J1c19maW5pc2gocmVzdWx0
LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJy
b3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgbnVs
bHB0ciwgYnVzTmFtZSwgb2JqZWN0UGF0aCwgaW50ZXJmYWNlTmFtZSwgbV9jYW5jZWxsYWJsZS5n
ZXQoKSwgW10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdSZWZQ
dHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19mb3JfYnVz
X2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICBpZiAoZ19lcnJvcl9t
YXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byogc2VsZiA9IHN0YXRpY19jYXN0PFNs
ZWVwRGlzYWJsZXJHTGliKj4odXNlckRhdGEpOworICAgICAgICBpZiAocHJveHkpIHsKKyAgICAg
ICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZU93bmVyKGdfZGJ1c19wcm94eV9nZXRfbmFtZV9v
d25lcihwcm94eS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKG5hbWVPd25lcikgeworICAgICAg
ICAgICAgICAgIHNlbGYtPm1fc2NyZWVuU2F2ZXJQcm94eSA9IFdURk1vdmUocHJveHkpOworICAg
ICAgICAgICAgICAgIHNlbGYtPmFjcXVpcmVJbmhpYml0b3IoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2Fi
bGVyR0xpYio+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGlmIChwcm94eSkgewotICAgICAgICAg
ICAgICAgIC8vIFVuZGVyIEZsYXRwYWssIHdlJ2xsIGdldCBhIHVzZWxlc3MgcHJveHkgd2l0aCBu
byBuYW1lIG93bmVyLgotICAgICAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZU93bmVy
KGdfZGJ1c19wcm94eV9nZXRfbmFtZV9vd25lcihwcm94eS5nZXQoKSkpOwotICAgICAgICAgICAg
ICAgIGlmIChuYW1lT3duZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi0+bV9zY3JlZW5T
YXZlclByb3h5ID0gV1RGTW92ZShwcm94eSk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmFj
cXVpcmVJbmhpYml0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBJdCBm
YWlsZWQuIFRyeSB0byB1c2UgdGhlIEZsYXRwYWsgcG9ydGFsIGluc3RlYWQuCi0gICAgICAgICAg
ICBnX2RidXNfcHJveHlfbmV3X2Zvcl9idXMoR19CVVNfVFlQRV9TRVNTSU9OLCBzdGF0aWNfY2Fz
dDxHREJ1c1Byb3h5RmxhZ3M+KEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJU
SUVTIHwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9DT05ORUNUX1NJR05BTFMpLAotICAgICAg
ICAgICAgICAgIG51bGxwdHIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLkRlc2t0b3AiLCAiL29y
Zy9mcmVlZGVza3RvcC9wb3J0YWwvZGVza3RvcCIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLklu
aGliaXQiLCBzZWxmLT5tX2NhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICAgICAgICAgIFtdKEdP
YmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICAgICAg
ICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94
eV9uZXdfZm9yX2J1c19maW5pc2gocmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwg
R19JT19FUlJPUl9DQU5DRUxMRUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIHNlbGYgPSBzdGF0aWNfY2FzdDxTbGVlcERpc2Fi
bGVyR0xpYio+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3h5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IG5hbWVPd25lcihnX2RidXNf
cHJveHlfZ2V0X25hbWVfb3duZXIocHJveHkuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChuYW1lT3duZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5t
X2luaGliaXRQb3J0YWxQcm94eSA9IFdURk1vdmUocHJveHkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYtPmFjcXVpcmVJbmhpYml0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwLiBEb24ndCB3YXJuIHRo
ZSB1c2VyOiB0aGlzIGlzIGV4cGVjdGVkLgotICAgICAgICAgICAgICAgICAgICBzZWxmLT5tX2Nh
bmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0sIHNlbGYpOwotICAgICAgICB9LCB0
aGlzKTsKKyAgICAgICAgLy8gR2l2ZSB1cC4gRG9uJ3Qgd2FybiB0aGUgdXNlcjogdGhpcyBpcyBl
eHBlY3RlZC4KKyAgICAgICAgc2VsZi0+bV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgfSwg
dGhpcyk7CiB9CiAKIFNsZWVwRGlzYWJsZXJHTGliOjp+U2xlZXBEaXNhYmxlckdMaWIoKQpAQCAt
MTA0LDEwNSArODUsNjcgQEAgU2xlZXBEaXNhYmxlckdMaWI6On5TbGVlcERpc2FibGVyR0xpYigp
CiAKIHZvaWQgU2xlZXBEaXNhYmxlckdMaWI6OmFjcXVpcmVJbmhpYml0b3IoKQogewotICAgIGlm
IChtX3NjcmVlblNhdmVyUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKCFtX2luaGliaXRQb3J0YWxQ
cm94eSk7Ci0gICAgICAgIGFjcXVpcmVJbmhpYml0b3JWaWFTY3JlZW5TYXZlclByb3h5KCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1faW5oaWJpdFBvcnRhbFByb3h5KTsKLSAgICAg
ICAgYWNxdWlyZUluaGliaXRvclZpYUluaGliaXRQb3J0YWxQcm94eSgpOwotICAgIH0KLX0KLQot
dm9pZCBTbGVlcERpc2FibGVyR0xpYjo6YWNxdWlyZUluaGliaXRvclZpYVNjcmVlblNhdmVyUHJv
eHkoKQotewotICAgIGdfZGJ1c19wcm94eV9jYWxsKG1fc2NyZWVuU2F2ZXJQcm94eS5nZXQoKSwg
IkluaGliaXQiLCBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgZ19nZXRfcHJnbmFtZSgpLCBtX3JlYXNv
bi5kYXRhKCkpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwgW10oR09iamVjdCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9p
bnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYo
Z19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19QUk9YWShwcm94eSksIHJlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdl
dCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBhdXRvKiBzZWxmID0gc3RhdGljX2Nhc3Q8U2xlZXBEaXNh
YmxlckdMaWIqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICAgICAgZ193YXJuaW5nKCJDYWxsaW5nICVzLkluaGliaXQgZmFpbGVkOiAlcyIsIGdfZGJ1c19w
cm94eV9nZXRfaW50ZXJmYWNlX25hbWUoR19EQlVTX1BST1hZKHByb3h5KSksIGVycm9yLT5tZXNz
YWdlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5W
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZ192YXJpYW50X2dldChyZXR1cm5WYWx1ZS5nZXQoKSwg
Iih1KSIsICZzZWxmLT5tX3NjcmVlblNhdmVyQ29va2llKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHNlbGYtPm1fY2FuY2VsbGFibGUgPSBudWxscHRyOwotICAgICAgICB9LCB0aGlzKTsK
LX0KLQotdm9pZCBTbGVlcERpc2FibGVyR0xpYjo6YWNxdWlyZUluaGliaXRvclZpYUluaGliaXRQ
b3J0YWxQcm94eSgpCi17Ci0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJp
YW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAg
Z192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJyZWFzb24iLCBnX3Zhcmlh
bnRfbmV3X3N0cmluZyhtX3JlYXNvbi5kYXRhKCkpKTsKLSAgICBnX2RidXNfcHJveHlfY2FsbCht
X2luaGliaXRQb3J0YWxQcm94eS5nZXQoKSwgIkluaGliaXQiLCBnX3ZhcmlhbnRfbmV3KCIoc3VA
YXtzdn0pIiwgIiIgLyogbm8gd2luZG93ICovLCA4IC8qIGlkbGUgKi8sIGdfdmFyaWFudF9idWls
ZGVyX2VuZCgmYnVpbGRlcikpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwg
bV9jYW5jZWxsYWJsZS5nZXQoKSwgW10oR09iamVjdCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOwotICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFsdWUgPSBh
ZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19QUk9YWShwcm94eSksIHJl
c3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVz
KGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBhdXRvKiBzZWxmID0gc3RhdGljX2Nhc3Q8
U2xlZXBEaXNhYmxlckdMaWIqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0g
ICAgICAgICAgICAgICAgZ193YXJuaW5nKCJDYWxsaW5nICVzLkluaGliaXQgZmFpbGVkOiAlcyIs
IGdfZGJ1c19wcm94eV9nZXRfaW50ZXJmYWNlX25hbWUoR19EQlVTX1BST1hZKHByb3h5KSksIGVy
cm9yLT5tZXNzYWdlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZSk7CisgICAgR1ZhcmlhbnQqIHBhcmFtZXRlcnM7CisgICAgaWYgKHNob3Vs
ZFVzZVBvcnRhbCgpKSB7CisgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgICAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNU
KTsKKyAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJyZWFz
b24iLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyhtX3JlYXNvbi5kYXRhKCkpKTsKKyAgICAgICAgcGFy
YW1ldGVycyA9IGdfdmFyaWFudF9uZXcoIihzdUBhe3N2fSkiLCAiIiAvKiBubyB3aW5kb3cgKi8s
IDggLyogaWRsZSAqLywgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSk7CisgICAgfSBl
bHNlCisgICAgICAgIHBhcmFtZXRlcnMgPSBnX3ZhcmlhbnRfbmV3KCIoc3MpIiwgZ19nZXRfcHJn
bmFtZSgpLCBtX3JlYXNvbi5kYXRhKCkpOworCisgICAgZ19kYnVzX3Byb3h5X2NhbGwobV9zY3Jl
ZW5TYXZlclByb3h5LmdldCgpLCAiSW5oaWJpdCIsIHBhcmFtZXRlcnMsIEdfREJVU19DQUxMX0ZM
QUdTX05PTkUsIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2JqZWN0KiBwcm94eSwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFs
dWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKEdfREJVU19QUk9YWShwcm94
eSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgIGlmIChnX2Vycm9yX21hdGNo
ZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBzZWxmID0gc3RhdGljX2Nhc3Q8U2xlZXBE
aXNhYmxlckdMaWIqPih1c2VyRGF0YSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAg
IGdfd2FybmluZygiQ2FsbGluZyAlcy5JbmhpYml0IGZhaWxlZDogJXMiLCBnX2RidXNfcHJveHlf
Z2V0X2ludGVyZmFjZV9uYW1lKEdfREJVU19QUk9YWShwcm94eSkpLCBlcnJvci0+bWVzc2FnZSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRVc2VQb3J0YWwoKSkKICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHJldHVyblZhbHVlLmdldCgpLCAiKG8pIiwgJnNlbGYtPm1faW5oaWJpdFBvcnRhbFJlcXVl
c3RPYmplY3RQYXRoLm91dFB0cigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlbGYt
Pm1fY2FuY2VsbGFibGUgPSBudWxscHRyOwotICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAi
KHUpIiwgJnNlbGYtPm1fc2NyZWVuU2F2ZXJDb29raWUpOworICAgICAgICB9CisgICAgICAgIHNl
bGYtPm1fY2FuY2VsbGFibGUgPSBudWxscHRyOworICAgIH0sIHRoaXMpOwogfQogCiB2b2lkIFNs
ZWVwRGlzYWJsZXJHTGliOjpyZWxlYXNlSW5oaWJpdG9yKCkKIHsKLSAgICBpZiAobV9zY3JlZW5T
YXZlclByb3h5KSB7Ci0gICAgICAgIEFTU0VSVCghbV9pbmhpYml0UG9ydGFsUHJveHkpOwotICAg
ICAgICByZWxlYXNlSW5oaWJpdG9yVmlhU2NyZWVuU2F2ZXJQcm94eSgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChtX2luaGliaXRQb3J0YWxQcm94eSk7Ci0gICAgICAgIHJlbGVhc2VJ
bmhpYml0b3JWaWFJbmhpYml0UG9ydGFsUHJveHkoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2xlZXBE
aXNhYmxlckdMaWI6OnJlbGVhc2VJbmhpYml0b3JWaWFTY3JlZW5TYXZlclByb3h5KCkKLXsKLSAg
ICBBU1NFUlQobV9zY3JlZW5TYXZlckNvb2tpZSk7Ci0KLSAgICBnX2RidXNfcHJveHlfY2FsbCht
X3NjcmVlblNhdmVyUHJveHkuZ2V0KCksICJVbkluaGliaXQiLCBnX3ZhcmlhbnRfbmV3KCIodSki
LCBtX3NjcmVlblNhdmVyQ29va2llKSwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwg
LTEsIG51bGxwdHIsIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3Bv
aW50ZXIpIHsKKyAgICBpZiAoIXNob3VsZFVzZVBvcnRhbCgpKSB7CisgICAgICAgIEFTU0VSVCht
X3NjcmVlblNhdmVyQ29va2llKTsKKyAgICAgICAgZ19kYnVzX3Byb3h5X2NhbGwobV9zY3JlZW5T
YXZlclByb3h5LmdldCgpLCAiVW5JbmhpYml0IiwgZ192YXJpYW50X25ldygiKHUpIiwgbV9zY3Jl
ZW5TYXZlckNvb2tpZSksIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBudWxscHRyLCBbXShH
T2JqZWN0KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyKSB7CiAgICAgICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgICAgICAgICBHUmVmUHRyPEdW
YXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9maW5pc2go
R19EQlVTX1BST1hZKHByb3h5KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKICAgICAgICAg
ICAgIGlmIChlcnJvcikKICAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIkNhbGxpbmcgJXMuVW5J
bmhpYml0IGZhaWxlZDogJXMiLCBnX2RidXNfcHJveHlfZ2V0X2ludGVyZmFjZV9uYW1lKEdfREJV
U19QUk9YWShwcm94eSkpLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgfSwgbnVsbHB0cik7Ci19Cisg
ICAgICAgIH0sIG51bGxwdHIpOwogCi12b2lkIFNsZWVwRGlzYWJsZXJHTGliOjpyZWxlYXNlSW5o
aWJpdG9yVmlhSW5oaWJpdFBvcnRhbFByb3h5KCkKLXsKLSAgICBBU1NFUlQobV9pbmhpYml0UG9y
dGFsUmVxdWVzdE9iamVjdFBhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgQVNT
RVJUKG1faW5oaWJpdFBvcnRhbFJlcXVlc3RPYmplY3RQYXRoKTsKICAgICBnX2RidXNfcHJveHlf
bmV3X2Zvcl9idXMoR19CVVNfVFlQRV9TRVNTSU9OLCBzdGF0aWNfY2FzdDxHREJ1c1Byb3h5Rmxh
Z3M+KEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfTE9BRF9QUk9QRVJUSUVTIHwgR19EQlVTX1BS
T1hZX0ZMQUdTX0RPX05PVF9DT05ORUNUX1NJR05BTFMpLAotICAgICAgICBudWxscHRyLCAib3Jn
LmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiwgbV9pbmhpYml0UG9ydGFsUmVxdWVzdE9iamVj
dFBhdGguZ2V0KCksICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlcXVlc3QiLCBudWxscHRyLAot
ICAgICAgICBbXShHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyKSB7Cisg
ICAgICAgIG51bGxwdHIsICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLkRlc2t0b3AiLCBtX2luaGli
aXRQb3J0YWxSZXF1ZXN0T2JqZWN0UGF0aC5nZXQoKSwgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwu
UmVxdWVzdCIsIG51bGxwdHIsIFtdKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3Bv
aW50ZXIpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBH
UmVmUHRyPEdEQnVzUHJveHk+IHJlcXVlc3RQcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlf
bmV3X2Zvcl9idXNfZmluaXNoKHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgIGlm
IChlcnJvcikgeworICAgICAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gY3JlYXRlIG9yZy5m
cmVlZGVza3RvcC5wb3J0YWwuUmVxdWVzdCBwcm94eTogJXMiLCBlcnJvci0+bWVzc2FnZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQocmVxdWVzdFBy
b3h5KTsKKyAgICAgICAgZ19kYnVzX3Byb3h5X2NhbGwocmVxdWVzdFByb3h5LmdldCgpLCAiQ2xv
c2UiLCBnX3ZhcmlhbnRfbmV3KCIoKSIpLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgbnVs
bHB0ciwgW10oR09iamVjdCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikg
ewogICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICAgICAg
R1JlZlB0cjxHREJ1c1Byb3h5PiByZXF1ZXN0UHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5
X25ld19mb3JfYnVzX2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gY3Jl
YXRlIG9yZy5mcmVlZGVza3RvcC5wb3J0YWwuUmVxdWVzdCBwcm94eTogJXMiLCBlcnJvci0+bWVz
c2FnZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBBU1NFUlQocmVxdWVzdFByb3h5KTsKLSAgICAgICAgICAgIGdfZGJ1c19wcm94eV9jYWxs
KHJlcXVlc3RQcm94eS5nZXQoKSwgIkNsb3NlIiwgZ192YXJpYW50X25ldygiKCkiKSwgR19EQlVT
X0NBTExfRkxBR1NfTk9ORSwgLTEsIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgW10oR09iamVj
dCogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlcikgewotICAgICAgICAgICAg
ICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9j
YWxsX2ZpbmlzaChHX0RCVVNfUFJPWFkocHJveHkpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBnX3dhcm5pbmcoIkNhbGxpbmcgJXMuQ2xvc2UgZmFpbGVkOiAlcyIsIGdfZGJ1c19wcm94eV9n
ZXRfaW50ZXJmYWNlX25hbWUoR19EQlVTX1BST1hZKHByb3h5KSksIGVycm9yLT5tZXNzYWdlKTsK
LSAgICAgICAgICAgICAgICB9LCBudWxscHRyKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R1Zhcmlh
bnQ+IHJldHVyblZhbHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChHX0RC
VVNfUFJPWFkocHJveHkpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAg
aWYgKGVycm9yKQorICAgICAgICAgICAgICAgIGdfd2FybmluZygiQ2FsbGluZyAlcy5DbG9zZSBm
YWlsZWQ6ICVzIiwgZ19kYnVzX3Byb3h5X2dldF9pbnRlcmZhY2VfbmFtZShHX0RCVVNfUFJPWFko
cHJveHkpKSwgZXJyb3ItPm1lc3NhZ2UpOwogICAgICAgICB9LCBudWxscHRyKTsKKyAgICB9LCBu
dWxscHRyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3N5c3RlbS9nbGliL1NsZWVwRGlzYWJsZXJHTGliLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3N5c3RlbS9nbGliL1NsZWVwRGlzYWJsZXJHTGliLmgKaW5kZXggYjE4MGQ0
ZDY3Y2RiLi44ZGJmOTU3OTRjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
c3lzdGVtL2dsaWIvU2xlZXBEaXNhYmxlckdMaWIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3N5c3RlbS9nbGliL1NsZWVwRGlzYWJsZXJHTGliLmgKQEAgLTM1LDcgKzM1LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0dEQnVzUHJveHkgR0RCdXNQcm94eTsKIAogbmFtZXNwYWNlIFBBTCB7CiAK
LWNsYXNzIFNsZWVwRGlzYWJsZXJHTGliIDogcHVibGljIFNsZWVwRGlzYWJsZXIgeworY2xhc3Mg
U2xlZXBEaXNhYmxlckdMaWIgZmluYWwgOiBwdWJsaWMgU2xlZXBEaXNhYmxlciB7CiBwdWJsaWM6
CiAgICAgU2xlZXBEaXNhYmxlckdMaWIoY29uc3QgY2hhciosIFR5cGUpOwogICAgIHZpcnR1YWwg
flNsZWVwRGlzYWJsZXJHTGliKCk7CkBAIC01MSwxMCArNTEsNyBAQCBwcml2YXRlOgogCiAgICAg
R1JlZlB0cjxHREJ1c1Byb3h5PiBtX3NjcmVlblNhdmVyUHJveHk7CiAgICAgdW5zaWduZWQgbV9z
Y3JlZW5TYXZlckNvb2tpZSB7IDAgfTsKLQotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gbV9pbmhp
Yml0UG9ydGFsUHJveHk7CiAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtX2luaGliaXRQb3J0YWxS
ZXF1ZXN0T2JqZWN0UGF0aDsKLQogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOwogICAgIENTdHJpbmcgbV9yZWFzb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwOTZhNWRkYzQ0NWEu
LjIzOTgzMDExNmY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0xMC0xOCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dMSUJd
IFNpbXBsaWZ5IFNsZWVwRGlzYWJsZXIgYnkgY2hlY2tpbmcgaWYgd2UgYXJlIHVuZGVyIHNhbmRi
b3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTY3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
ZnVuY3Rpb25zIHRvIGNoZWNrIGlmIHJ1bm5pbmcgaW5zaWRlIGEgc2FuZGJveCB0byBXVEYuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6aXNJbnNpZGVEb2NrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0Ojppc0luc2lkZUZsYXRwYWspOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0Ojppc0lu
c2lkZVNuYXApOiBEZWxldGVkLgorCiAyMDIxLTEwLTE3ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHpl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4ICMzOiBBZG9wdCBhdHRyaWJ1dGlvbiBB
VkNhcHR1cmVTZXNzaW9uIFNQSSBmb3IgR1BVIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIu
Y3BwCmluZGV4IDM1YWY1ZTM1ZjEwMS4uODVlYjg1NDMxNzQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVy
R0xpYi5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvU2FuZGJveC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjMsNDEgKzY0
LDYgQEAgc3RhdGljIGJvb2wgaXNGbGF0cGFrU3Bhd25Vc2FibGUoKQogfQogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoQlVCQkxFV1JBUF9TQU5EQk9YKQotc3RhdGljIGJvb2wgaXNJbnNpZGVEb2NrZXIo
KQotewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGJvb2w+IHJldDsKLSAgICBpZiAocmV0KQot
ICAgICAgICByZXR1cm4gKnJldDsKLQotICAgIHJldCA9IGdfZmlsZV90ZXN0KCIvLmRvY2tlcmVu
diIsIEdfRklMRV9URVNUX0VYSVNUUyk7Ci0gICAgcmV0dXJuICpyZXQ7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzSW5zaWRlRmxhdHBhaygpCi17Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
cmV0OwotICAgIGlmIChyZXQpCi0gICAgICAgIHJldHVybiAqcmV0OwotCi0gICAgcmV0ID0gZ19m
aWxlX3Rlc3QoIi8uZmxhdHBhay1pbmZvIiwgR19GSUxFX1RFU1RfRVhJU1RTKTsKLSAgICByZXR1
cm4gKnJldDsKLX0KLQotc3RhdGljIGJvb2wgaXNJbnNpZGVTbmFwKCkKLXsKLSAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxib29sPiByZXQ7Ci0gICAgaWYgKHJldCkKLSAgICAgICAgcmV0dXJuICpy
ZXQ7Ci0KLSAgICAvLyBUaGUgIlNOQVAiIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCB1bmxp
a2VseSB0byBiZSBzZXQgZm9yL2J5IHNvbWV0aGluZyBvdGhlcgotICAgIC8vIHRoYW4gU25hcCwg
c28gY2hlY2sgYSBjb3VwbGUgb2YgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYXZvaWQgZmFsc2Ug
cG9zaXRpdmVzLgotICAgIC8vIFNlZTogaHR0cHM6Ly9zbmFwY3JhZnQuaW8vZG9jcy9lbnZpcm9u
bWVudC12YXJpYWJsZXMKLSAgICByZXQgPSBnX2dldGVudigiU05BUCIpICYmIGdfZ2V0ZW52KCJT
TkFQX05BTUUiKSAmJiBnX2dldGVudigiU05BUF9SRVZJU0lPTiIpOwotICAgIHJldHVybiAqcmV0
OwotfQotI2VuZGlmCi0KIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKIHsK
ICAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6Q29ubmVj
dGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6Q29ubmVjdGlv
bk9wdGlvbnM6OlNldENsb2V4ZWNPblNlcnZlcik7Cg==
</data>
<flag name="review"
          id="465883"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>