<?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>131357</bug_id>
          
          <creation_ts>2014-04-08 06:54:30 -0700</creation_ts>
          <short_desc>[GTK] Plugin process crashes when loading totem plugin</short_desc>
          <delta_ts>2014-04-09 09:56:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998547</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 06:54:30 -0700</bug_when>
    <thetext>The problem is that totem plugin uses functions NPN_Foo, that are defined inside totem as wrappers for NPNetscapeFuncs. Those functions are also defined in WebCore (npapi.cpp), and it seems the plugin process ends up calling the WebCore ones, and crashes because the NPNetscapeFuncs in WebCore are not initialized (and conflicts with the ones defined in Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp which are passed to the plugin in NP_Initialize). 
Most of the plugins functions in WebCore are actually only used WebKit1, so I think we shouldn&apos;t build some of those files in WebKit2. Maybe we can split WebCore more and add WebCorePlugins library, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998575</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 08:32:30 -0700</bug_when>
    <thetext>Could we just wait until we remove the WebKit1 port and the files to the platform source lists?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998578</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 08:36:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Could we just wait until we remove the WebKit1 port and the files to the platform source lists?

I want to fix this in the stable branches as well. Are browsers supposed to export NPN functions? or should plugins use the NPNetscapeFuncs struct passed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998579</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 08:37:51 -0700</bug_when>
    <thetext>Note that this is not specific to totem plugin, but to any plugin that defines the NPN functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998580</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 08:44:38 -0700</bug_when>
    <thetext>I wonder if there&apos;s a way to hide all WebCore symbols from the plugin. Perhaps this is an issue with the way we are linking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998592</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 09:13:57 -0700</bug_when>
    <thetext>Forgot the bt:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff640ea5d in WebCore::PluginView::getValue(NPNVariable, void*) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
(gdb) bt
#0  0x00007ffff640ea5d in WebCore::PluginView::getValue(NPNVariable, void*) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#1  0x00007fffe157e12e in totemPlugin::Init(char*, unsigned short, short, char**, char**, _NPSavedData*) () from /usr/lib/mozilla/plugins/libtotem-mully-plugin.so
#2  0x00007fffe157b973 in ?? () from /usr/lib/mozilla/plugins/libtotem-mully-plugin.so
#3  0x00007ffff5a8e968 in WebKit::NetscapePlugin::initialize(WebKit::Plugin::Parameters const&amp;) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#4  0x00007ffff596158c in WebKit::PluginControllerProxy::initialize(WebKit::PluginCreationParameters const&amp;) ()
   from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#5  0x00007ffff596566d in WebKit::WebProcessConnection::createPluginInternal(WebKit::PluginCreationParameters const&amp;, bool&amp;, bool&amp;, unsigned int&amp;) ()
   from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#6  0x00007ffff5965890 in WebKit::WebProcessConnection::createPlugin(WebKit::PluginCreationParameters const&amp;, WTF::PassRefPtr&lt;Messages::WebProcessConnection::CreatePlugin::DelayedReply&gt;) ()
   from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#7  0x00007ffff5b468a1 in void IPC::handleMessageDelayed&lt;Messages::WebProcessConnection::CreatePlugin, WebKit::WebProcessConnection, void (WebKit::WebProcessConnection::*)(WebKit::PluginCreationParameters const&amp;, WTF::PassRefPtr&lt;Messages::WebProcessConnection::CreatePlugin::DelayedReply&gt;)&gt;(IPC::Connection*, IPC::MessageDecoder&amp;, std::unique_ptr&lt;IPC::MessageEncoder, std::default_delete&lt;IPC::MessageEncoder&gt; &gt;&amp;, WebKit::WebProcessConnection*, void (WebKit::WebProcessConnection::*)(WebKit::PluginCreationParameters const&amp;, WTF::PassRefPtr&lt;Messages::WebProcessConnection::CreatePlugin::DelayedReply&gt;)) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#8  0x00007ffff5b46690 in WebKit::WebProcessConnection::didReceiveSyncWebProcessConnectionMessage(IPC::Connection*, IPC::MessageDecoder&amp;, std::unique_ptr&lt;IPC::MessageEncoder, std::default_delete&lt;IPC::MessageEncoder&gt; &gt;&amp;) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#9  0x00007ffff5964b6b in WebKit::WebProcessConnection::didReceiveSyncMessage(IPC::Connection*, IPC::MessageDecoder&amp;, std::unique_ptr&lt;IPC::MessageEncoder, std::default_delete&lt;IPC::MessageEncoder&gt; &gt;&amp;) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#10 0x00007ffff59588da in IPC::Connection::dispatchSyncMessage(IPC::MessageDecoder&amp;) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#11 0x00007ffff59589f5 in IPC::Connection::dispatchMessage(std::unique_ptr&lt;IPC::MessageDecoder, std::default_delete&lt;IPC::MessageDecoder&gt; &gt;) ()
   from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#12 0x00007ffff5959c2d in IPC::Connection::SyncMessageState::dispatchMessages(IPC::Connection*) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#13 0x00007ffff5b8ad87 in WTF::RunLoop::performWork() () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#14 0x00007ffff5bbc4f8 in WTF::GMainLoopSource::voidCallback() () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#15 0x00007ffff5bbc529 in WTF::GMainLoopSource::voidSourceCallback(WTF::GMainLoopSource*) () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#16 0x00007ffff136e715 in g_main_dispatch (context=0x64b020) at gmain.c:3066
#17 g_main_context_dispatch (context=context@entry=0x64b020) at gmain.c:3641
#18 0x00007ffff136ea78 in g_main_context_iterate (context=0x64b020, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3712
#19 0x00007ffff136ed3a in g_main_loop_run (loop=0x6f8fa0) at gmain.c:3906
#20 0x00007ffff5ad4ecf in PluginProcessMainUnix () from WebKit/WebKitBuild/Release/lib/libwebkit2gtk-3.0.so.25
#21 0x00007ffff3facb45 in __libc_start_main (main=0x400700 &lt;main&gt;, argc=3, argv=0x7fffffffd818, init=&lt;optimized out&gt;, fini=&lt;optimized out&gt;, rtld_fini=&lt;optimized out&gt;, 
    stack_end=0x7fffffffd808) at libc-start.c:287
#22 0x0000000000400733 in _start ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998600</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 09:20:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I wonder if there&apos;s a way to hide all WebCore symbols from the plugin. Perhaps this is an issue with the way we are linking.

That depends on whether browsers are expected to export NPN API or not</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998602</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 09:24:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Note that this is not specific to totem plugin, but to any plugin that defines the NPN functions

What NPN function is totem implementing? I believe that NPN_Whatever is reserved for the browser. The Mozilla plugin documentation says: 

&quot;Browser methods are functions implemented by Gecko; the plug-in calls these functions. The names of all the browser functions in the API begin with NPN_, for example, NPN_Write.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998606</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 09:31:38 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; Note that this is not specific to totem plugin, but to any plugin that defines the NPN functions
&gt; 
&gt; What NPN function is totem implementing? I believe that NPN_Whatever is reserved for the browser. The Mozilla plugin documentation says: 
&gt; 
&gt; &quot;Browser methods are functions implemented by Gecko; the plug-in calls these functions. The names of all the browser functions in the API begin with NPN_, for example, NPN_Write.&quot;

All of them, they are just wrappers around the NPNetscapeFuncs. The problem is that the NPN functions we are currently exporting in WebKit2 are the WebCore ones, so even if totem didn&apos;t implement those functions, it would end up calling the wrong methods. Only plugins using the NPNetscapeFuncs struct directly currently work in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999189</commentid>
    <comment_count>9</comment_count>
      <attachid>228963</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-09 08:39:18 -0700</bug_when>
    <thetext>Created attachment 228963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999191</commentid>
    <comment_count>10</comment_count>
      <attachid>228963</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-09 08:42:43 -0700</bug_when>
    <thetext>Comment on attachment 228963
Patch

I&apos;m really glad to see Source/WebCore/plugins/gtk/gtk2xtbin.c finally bite the dust, though perhaps one day we will need Xt plugin support in WebKit2 :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999201</commentid>
    <comment_count>11</comment_count>
      <attachid>228964</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-09 09:17:57 -0700</bug_when>
    <thetext>Created attachment 228964
Try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999208</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-09 09:54:00 -0700</bug_when>
    <thetext>Committed r167016: &lt;http://trac.webkit.org/changeset/167016&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999210</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-09 09:56:49 -0700</bug_when>
    <thetext>I&apos;ll rework it in the stable branches to move the implementation to Source/WebKit/gtk like mac does</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228963</attachid>
            <date>2014-04-09 08:39:18 -0700</date>
            <delta_ts>2014-04-09 09:17:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-plugins.diff</filename>
            <type>text/plain</type>
            <size>73942</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmQ3OGFkOS4uMjQxOWUxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIwODEsNyArMjA4MSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbHVn
aW5zL1BsdWdpbkRlYnVnLmNwcAogICAgIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5jcHAKICAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKLSAgICBwbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAogICAgIHJlbmRlcmlu
Zy9CaWRpUnVuLmNwcApAQCAtMjYwOCwxMiArMjYwNyw3IEBAIGlmIChFTkFCTEVfU1FMX0RBVEFC
QVNFKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmNwcAotICAgICAgICBwbHVnaW5zL25wYXBpLmNwcAotICAgICkKLWVsc2UgKCkKK2lm
IChOT1QgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3BwCiAgICAgICAg
IHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjEwMDczYi4uNDJjMThj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA0LTA5ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBQbHVnaW4gcHJv
Y2VzcyBjcmFzaGVzIHdoZW4gbG9hZGluZyB0b3RlbSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTM1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBuZXRzY2FwZSBwbHVnaW4gaW1w
bGVtZW50YXRpb24gZnJvbSBXZWJDb3JlIHRoYXQgd2FzIG9ubHkKKyAgICAgICAgdXNlZCBieSBX
ZWJLaXQxLiBUaGlzIHJlbW92ZXMgdGhlIGNvbmZsaWN0IGJldHdlZW4gdGhlIFdlYkNvcmUgTlBO
CisgICAgICAgIHN5bWJvbHMgYW5kIHRoZSBvbmVzIHVzZWQgYnkgdGhlIHBsdWdpbnMuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToK
KyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcDoKKyAgICAgICAgKiBwbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbHVnaW5zL2d0ay9ndGsy
eHRiaW4uYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbHVnaW5zL2d0ay94ZW1iZWQuaDogUmVtb3ZlZC4KKwogMjAxNC0w
NC0wOCAgQ29ucmFkIFNodWx0eiAgPGNvbnJhZF9zaHVsdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IG5pbCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBvYmplY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IDNiZDkyZjIuLjJjMjA1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0xOTMsNiArMTkzLDkgQEAgZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCisgICAgICAgIHBsdWdpbnMvbnBhcGkuY3BwCisKICAgICAgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKICAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjYjI5MTFmLi4zZDNjYWM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjEsNyArMjEsNiBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vbmV0d29yay9zb3VwIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2d0ayIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9pY3UiCi0gICAgIiR7V0VCQ09SRV9E
SVJ9L3BsdWdpbnMvZ3RrIgogKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKQEAgLTE0
MCw2ICsxMzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAogCiAgICAgcGxhdGZv
cm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKKworICAgIHBsdWdpbnMv
UGx1Z2luUGFja2FnZU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKICkK
IAogbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKQEAgLTI1MiwyOSArMjU0
LDYgQEAgaWYgKFdURl9VU0VfR0VPQ0xVRTIpCiAgICAgKQogZW5kaWYgKCkKIAotaWYgKEVOQUJM
RV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwot
ICAgICAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAotICAgICAgICBwbHVnaW5zL1BsdWdp
bkRlYnVnLmNwcAotICAgICAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCi0gICAgICAgIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcAotICAgICAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCi0g
ICAgKQotCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKLSAgICAg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKLSAgICAgICAgcGx1Z2lucy9ndGsv
UGx1Z2luVmlld0d0ay5jcHAKLSAgICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKLQotICAg
ICAgICBwbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAotICAgICkKLWVsc2UgKCkKLSAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdl
Tm9uZS5jcHAKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKLSAgICApCi1lbmRp
ZiAoKQotCiBsaXN0KEFQUEVORCBXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTCiAgICAg
JHtXRUJDT1JFX0RJUn0vY3NzL21lZGlhQ29udHJvbHNHdGsuY3NzCiApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IGEwZmEwMjIuLmM4NzY4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNt
YWtlCkBAIC03Myw2ICs3Myw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogaWYgKEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgICAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgICAgIHBsdWdpbnMvbnBhcGku
Y3BwCiAKICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAK
ICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKaW5kZXggOWRjMDI0ZS4uZGY3OWRjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQogLy8gcG9ydHMgdXNpbmcg
UGx1Z2luVmlldywgYnV0IHVudGlsIHRoZW4sIGlmIG5ldyBmdW5jdGlvbnMgbGlrZSB0aGlzIGFy
ZSAKIC8vIGFkZGVkLCBwbGVhc2UgbWFrZSBzdXJlIHRoZXkgaGF2ZSB0aGUgcHJvcGVyIHBsYXRm
b3JtICNpZnMgc28gdGhhdCBjaGFuZ2VzCiAvLyBkbyBub3QgYnJlYWsgcG9ydHMgd2hvIGNvbXBp
bGUgYm90aCB0aGlzIGZpbGUgYW5kIFBsdWdpblZpZXcuY3BwLiAgIAotI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShFRkwpIHx8IE9TKFdJTkNFKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8
fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgT1MoV0lOQ0UpCiAjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB2b2lkIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShOUFApCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUzZWQzYi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFu
dGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5vdmVsbCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAi
UGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAg
aWYgKCFsb2FkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5QX0dldE1JTUVEZXNj
cmlwdGlvbkZ1bmNQdHIgTlBfR2V0TUlNRURlc2NyaXB0aW9uID0gMDsKLSAgICBOUFBfR2V0VmFs
dWVQcm9jUHRyIE5QUF9HZXRWYWx1ZSA9IDA7Ci0KLSAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1
bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZOUF9HZXRNSU1FRGVzY3JpcHRp
b24pOwotICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQq
KikmTlBQX0dldFZhbHVlKTsKLQotICAgIGlmICghTlBfR2V0TUlNRURlc2NyaXB0aW9uIHx8ICFO
UFBfR2V0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqIGJ1ZmZlciA9
IDA7Ci0gICAgTlBFcnJvciBlcnIgPSBOUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJp
bmcsICZidWZmZXIpOwotICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIG1f
bmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyKTsKLQotICAgIGJ1ZmZlciA9IDA7Ci0gICAg
ZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgJmJ1ZmZl
cik7Ci0gICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBtX2Rlc2NyaXB0
aW9uID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIpOwotICAgICAgICBkZXRlcm1pbmVNb2R1bGVW
ZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgfQotCi0gICAgY29uc3QgZ2NoYXIqIHR5cGVz
ID0gTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCF0eXBlcykKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7
IiwgLTEpOwotICAgIGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ld
WzBdOyBpKyspIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtaW1lKGdfdXRmOF9zdHJkb3du
KG1pbWVEZXNjc1tpXSwgLTEpKTsKLSAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3Bs
aXQobWltZS5nZXQoKSwgIjoiLCAzKTsKLSAgICAgICAgaWYgKGdfc3Rydl9sZW5ndGgobWltZURh
dGEpIDwgMykgewotICAgICAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0
cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0pOwotICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMg
PSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsKLQotICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBleHRWZWN0b3I7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBq
KyspCi0gICAgICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5z
aW9uc1tqXSkpOwotCi0gICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lRGF0YVswXSk7Ci0gICAg
ICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7Ci0gICAg
ICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOwot
Ci0gICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7Ci0gICAgICAgIGdfc3RyZnJlZXYobWlt
ZURhdGEpOwotICAgIH0KLSAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGludCB3ZWJraXRndGtYRXJyb3IoRGlzcGxheSogeGRpc3BsYXks
IFhFcnJvckV2ZW50KiBlcnJvcikKLXsKLSAgICBnY2hhciBlcnJvck1lc3NhZ2VbNjRdOwotICAg
IFhHZXRFcnJvclRleHQoeGRpc3BsYXksIGVycm9yLT5lcnJvcl9jb2RlLCBlcnJvck1lc3NhZ2Us
IDYzKTsKLSAgICBnX3dhcm5pbmcoIlRoZSBwcm9ncmFtICclcycgcmVjZWl2ZWQgYW4gWCBXaW5k
b3cgU3lzdGVtIGVycm9yLlxuIgotICAgICAgICAgICAgICAiVGhpcyBwcm9iYWJseSByZWZsZWN0
cyBhIGJ1ZyBpbiB0aGUgQWRvYmUgRmxhc2ggcGx1Z2luLlxuIgotICAgICAgICAgICAgICAiVGhl
IGVycm9yIHdhcyAnJXMnLlxuIgotICAgICAgICAgICAgICAiICAoRGV0YWlsczogc2VyaWFsICVs
ZCBlcnJvcl9jb2RlICVkIHJlcXVlc3RfY29kZSAlZCBtaW5vcl9jb2RlICVkKVxuIiwKLSAgICAg
ICAgICAgICAgZ19nZXRfcHJnbmFtZSgpLCBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgIGVy
cm9yLT5zZXJpYWwsIGVycm9yLT5lcnJvcl9jb2RlLAotICAgICAgICAgICAgICBlcnJvci0+cmVx
dWVzdF9jb2RlLCBlcnJvci0+bWlub3JfY29kZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBib29sIG1vZHVsZU1peGVzR3RrU3ltYm9scyhHTW9kdWxlKiBtb2R1bGUpCi17Ci0gICAgdm9p
ZCogc3ltYm9sOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgcmV0dXJuIGdfbW9kdWxl
X3N5bWJvbChtb2R1bGUsICJndGtfYXBwbGljYXRpb25fZ2V0X3R5cGUiLCAmc3ltYm9sKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGdfbW9kdWxlX3N5bWJvbChtb2R1bGUsICJndGtfb2JqZWN0X2dldF90
eXBlIiwgJnN5bWJvbCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkK
LXsKLSAgICBpZiAobV9pc0xvYWRlZCkgewotICAgICAgICBtX2xvYWRDb3VudCsrOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaW5hbFBhdGgo
Z19zdHJkdXAobV9wYXRoLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICB3aGlsZSAoZ19maWxlX3Rlc3Qo
ZmluYWxQYXRoLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19TWU1MSU5LKSkgewotICAgICAgICBHUmVm
UHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZmluYWxQYXRo
LmdldCgpKSk7Ci0gICAgICAgIEdSZWZQdHI8R0ZpbGU+IGRpciA9IGFkb3B0R1JlZihnX2ZpbGVf
Z2V0X3BhcmVudChmaWxlLmdldCgpKSk7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGxpbmtQ
YXRoKGdfZmlsZV9yZWFkX2xpbmsoZmluYWxQYXRoLmdldCgpLCAwKSk7Ci0gICAgICAgIEdSZWZQ
dHI8R0ZpbGU+IHJlc29sdmVkRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2
ZV9wYXRoKGRpci5nZXQoKSwgbGlua1BhdGguZ2V0KCkpKTsKLSAgICAgICAgZmluYWxQYXRoLnJl
c2V0KGdfZmlsZV9nZXRfcGF0aChyZXNvbHZlZEZpbGUuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICAv
LyBObyBqb2tlLiBJZiB0aGVyZSBpcyBhIG5ldHNjYXBlIGNvbXBvbmVudCBpbiB0aGUgcGF0aCwg
Z28gYmFjawotICAgIC8vIHRvIHRoZSBzeW1saW5rLCBhcyBmbGFzaCBicmVha3Mgb3RoZXJ3aXNl
LgotICAgIC8vIFNlZSBodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5r
L3NyYy93ZWJraXQvZ2x1ZS9wbHVnaW5zL3BsdWdpbl9saXN0X3Bvc2l4LmNjCi0gICAgR1VuaXF1
ZVB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNlbmFtZShmaW5hbFBhdGguZ2V0KCkp
KTsKLSAgICBpZiAoIWdfc3RyY21wMChiYXNlTmFtZS5nZXQoKSwgImxpYmZsYXNocGxheWVyLnNv
IikKLSAgICAgICAgJiYgZ19zdHJzdHJfbGVuKGZpbmFsUGF0aC5nZXQoKSwgLTEsICIvbmV0c2Nh
cGUvIikpCi0gICAgICAgIGZpbmFsUGF0aC5yZXNldChnX3N0cmR1cChtX3BhdGgudXRmOCgpLmRh
dGEoKSkpOwotCi0gICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKGZpbmFsUGF0aC5nZXQoKSwg
R19NT0RVTEVfQklORF9MT0NBTCk7Ci0KLSAgICBpZiAoIW1fbW9kdWxlKSB7Ci0gICAgICAgIExP
RyhQbHVnaW5zLCJNb2R1bGUgTG9hZCBGYWlsZWQgOiVzLCBFcnJvcjolc1xuIiwgKG1fcGF0aC51
dGY4KCkpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAobW9kdWxlTWl4ZXNHdGtTeW1ib2xzKG1fbW9kdWxlKSkgewotICAg
ICAgICBMT0coUGx1Z2lucywgIklnbm9yaW5nIG1vZHVsZSAnJXMnIHRvIGF2b2lkIG1peGluZyBH
VEsrIDIgYW5kIEdUSysgMyBzeW1ib2xzLlxuIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9pc0xvYWRlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoIWdfc3RyY21wMChiYXNlTmFtZS5nZXQoKSwgImxpYmZsYXNocGxheWVyLnNvIikpIHsK
LSAgICAgICAgLy8gRmxhc2ggcGx1Z2luIGNhbiBwcm9kdWNlIFggZXJyb3JzIHRoYXQgYXJlIGhh
bmRsZWQgYnkgdGhlIEdESyBYIGVycm9yIGhhbmRsZXIsIHdoaWNoCi0gICAgICAgIC8vIGV4aXRz
IHRoZSBwcm9jZXNzLiBTaW5jZSB3ZSBkb24ndCB3YW50IHRvIGNyYXNoIGR1ZSB0byBmbGFzaCBi
dWdzLCB3ZSBpbnN0YWxsIGEKLSAgICAgICAgLy8gY3VzdG9tIGVycm9yIGhhbmRsZXIgdG8gc2hv
dyBhIHdhcm5pbmcgd2hlbiBhIFggZXJyb3IgaGFwcGVucyB3aXRob3V0IGFib3J0aW5nLgotICAg
ICAgICBYU2V0RXJyb3JIYW5kbGVyKHdlYmtpdGd0a1hFcnJvcik7Ci0gICAgfQotCi0gICAgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7Ci0gICAgbV9OUFBfU2h1dGRvd24g
PSAwOwotCi0gICAgTlBFcnJvciBucEVycjsKLQotICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKLSAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3du
KTsKLQotICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUFBfU2h1dGRvd24pCi0gICAgICAg
IGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3Bs
dWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpOwotCi0gICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgbnBFcnIgPSBOUF9J
bml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOwotICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1fbG9hZENv
dW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0
ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdWludDE2X3QgUGx1Z2luUGFja2FnZTo6
TlBWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlBWRVJTX0hBU19QTFVHSU5fVEhSRUFE
X0FTWU5DX0NBTEw7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGZkOWQwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEtha2FpLCBJbmMuIDxicmlhbkBrYWthaS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0KLSNp
bmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUg
Ikhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcu
aCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi0jaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxnZGtjb25maWcuaD4KLSNlbmRpZgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLQotI2RlZmluZSBTdHJpbmcgWHRTdHJpbmdUeXBlCi0jaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJndGsyeHRiaW4uaCIKLSNkZWZpbmUgQm9vbCBpbnQgLy8g
dGhpcyBiZWNhbWUgdW5kZWZpbmVkIGluIG5wcnVudGltZV9pbnRlcm5hbC5oCi0jZGVmaW5lIFN0
YXR1cyBpbnQgLy8gZGl0dG8KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+Ci0j
aW5jbHVkZSA8Z2RrL2dka3guaD4KLQotdXNpbmcgSlNDOjpFeGVjU3RhdGU7Ci11c2luZyBKU0M6
OkludGVycHJldGVyOwotdXNpbmcgSlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2JqZWN0Owot
Ci11c2luZyBzdGQ6Om1pbjsKLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1XaW5kb3cgUGx1Z2luVmll
dzo6Z2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgR3RrV2lkZ2V0KiBw
YXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOwotICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3Nj
cmVlbihwYXJlbnRXaWRnZXQpOwotICAgIHJldHVybiBHREtfV0lORE9XX1hXSU5ET1coZ2RrX3Nj
cmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSA9PSBwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVdpZGdl
dCgpKQotICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMocGxhdGZvcm1XaWRnZXQoKSk7Ci0g
ICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzaG93
KCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdl
dCgpKTsKLSAgICBXaWRnZXQ6OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkK
LXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdldCgp
KTsKLSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0KLSAg
ICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUEV2ZW50IHhFdmVudDsKLSAgICBp
bml0WEV2ZW50KCZ4RXZlbnQpOwotICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2ZW50LT5r
ZXlFdmVudCgpLT5nZGtFdmVudEtleSgpOwotCi0gICAgeEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQcmVzcy9S
ZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKLSAgICB4RXZlbnQueGtleS5yb290ID0gZ2V0Um9v
dFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKTsKLSAgICB4RXZlbnQueGtleS5zdWJ3aW5kb3cg
PSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdwotICAgIHhFdmVudC54a2V5LnRpbWUgPSBl
dmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVudC0+c3Rh
dGU7IC8vIEdka01vZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKLSAgICB4RXZl
bnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7Ci0gICAgeEV2ZW50
LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOwotCi0gICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMg
c2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5h
dGl2ZSB3aW5kb3cKLSAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3Rhbmds
ZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAot
ICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50
cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCi0gICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50Ci0gICAgeEV2ZW50LnhrZXkueCA9IDA7Ci0gICAgeEV2
ZW50LnhrZXkueSA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKLSAgICB4RXZlbnQu
eGtleS55X3Jvb3QgPSAwOwotCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQotICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGlu
dCBpbnB1dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgdW5zaWduZWQgaW50
IHN0YXRlID0gMDsKLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgc3RhdGUgfD0g
Q29udHJvbE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBzdGF0ZSB8
PSBTaGlmdE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgc3RhdGUgfD0g
TW9kMU1hc2s7Ci0gICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IE1v
ZDRNYXNrOwotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2
ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25z
dCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBYQnV0
dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247Ci0gICAgeGJ1dHRvbi50eXBlID0g
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgPyBCdXR0b25QcmVz
cyA6IEJ1dHRvblJlbGVhc2U7Ci0gICAgeGJ1dHRvbi5yb290ID0gUGx1Z2luVmlldzo6Z2V0Um9v
dFdpbmRvdyhwYXJlbnRGcmFtZSk7Ci0gICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAwOwotICAgIHhi
dXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLnggPSBwb3N0Wm9v
bVBvcy54KCk7Ci0gICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhidXR0b24u
eF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKLSAgICB4YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5z
Y3JlZW5ZKCk7Ci0gICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7Ci0g
ICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKLSAg
ICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFJpZ2h0QnV0dG9uOgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAgICBkZWZhdWx0OgotICAgICAgICB4YnV0
dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB4YnV0dG9u
LnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3Bl
Y2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQ
b2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBYTW90aW9uRXZl
bnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247Ci0gICAgeG1vdGlvbi50eXBlID0gTW90aW9u
Tm90aWZ5OwotICAgIHhtb3Rpb24ucm9vdCA9IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3cocGFy
ZW50RnJhbWUpOwotICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKLSAgICB4bW90aW9uLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOwot
ICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKLSAgICB4bW90aW9uLnhfcm9vdCA9IGV2
ZW50LT5zY3JlZW5YKCk7Ci0gICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwot
ICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwotICAgIHhtb3Rpb24u
aXNfaGludCA9IE5vdGlmeU5vcm1hbDsKLSAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsK
LX0KLQotc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywg
RnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4
RXZlbnQtPnhjcm9zc2luZzsKLSAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsK
LSAgICB4Y3Jvc3Npbmcucm9vdCA9IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3cocGFyZW50RnJh
bWUpOwotICAgIHhjcm9zc2luZy5zdWJ3aW5kb3cgPSAwOwotICAgIHhjcm9zc2luZy50aW1lID0g
ZXZlbnQtPnRpbWVTdGFtcCgpOwotICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOwot
ICAgIHhjcm9zc2luZy55ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhjcm9zc2luZy54X3Jvb3Qg
PSBldmVudC0+c2NyZWVuWCgpOwotICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVu
WSgpOwotICAgIHhjcm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7Ci0gICAg
eGNyb3NzaW5nLm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgeGNyb3NzaW5nLmRldGFpbCA9IE5v
dGlmeURldGFpbE5vbmU7Ci0gICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLSAgICB4
Y3Jvc3NpbmcuZm9jdXMgPSBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0KLSAgICBpZiAo
IW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT5idXR0b24oKSA9PSBSaWdodEJ1
dHRvbiAmJiBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtJZ25vcmVSaWdo
dENsaWNrSW5XaW5kb3dsZXNzTW9kZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICBpZiAo
UGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgZm9jdXNQbHVnaW5FbGVt
ZW50KCk7Ci0gICAgfQotCi0gICAgTlBFdmVudCB4RXZlbnQ7Ci0gICAgaW5pdFhFdmVudCgmeEV2
ZW50KTsKLQotICAgIEludFBvaW50IHBvc3Rab29tUG9zID0gcm91bmRlZEludFBvaW50KG1fZWxl
bWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKGV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9u
KCkpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCi0gICAg
ICAgIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9v
bVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHNldFhNb3Rpb25FdmVudFNw
ZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5n
ZXQoKSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkg
ewotICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50
LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0KLSAgICAgICAgLy8gVGhpcyBp
cyBhIHdvcmstYXJvdW5kIGZvciBwbHVnaW5zIHdoaWNoIGNoYW5nZSB0aGUgY3Vyc29yLiBXaGVu
IHRoYXQgaGFwcGVucyB3ZQotICAgICAgICAvLyBnZXQgb3V0IG9mIHN5bmMgd2l0aCBHREsgc29t
ZWhvdy4gUmVzZXR0aW5nIHRoZSBjdXJzb3IgaGVyZSBzZWVtcyB0byBmaXggdGhlIGlzc3VlLgot
ICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkK
LSAgICAgICAgICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihndGtfd2lkZ2V0X2dldF93aW5kb3co
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgp
KSwgMCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRpc3Bh
dGNoTlBFdmVudCh4RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpCi17
Ci0gICAgLy8gSWYgdGhlIHdpbmRvdyBoYXMgbm90IGJlZW4gZW1iZWRkZWQgeWV0ICh0aGUgcGx1
ZyBhZGRlZCksIHdlIGRlbGF5IHNldHRpbmcgaXRzIGFsbG9jYXRpb24gdW50aWwgCi0gICAgLy8g
dGhhdCBwb2ludC4gVGhpcyBmaXhlcyBpc3N1ZXMgd2l0aCBzb21lIEphdmEgcGx1Z2luIGluc3Rh
bmNlcyBub3QgcmVuZGVyaW5nIGltbWVkaWF0ZWx5LgotICAgIGlmICghbV9wbHVnQWRkZWQgfHwg
bV9kZWxheWVkQWxsb2NhdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICBpZiAoZ3RrX3dp
ZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSkgewotICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcFJl
Y3QgPSBtX2NsaXBSZWN0OwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgICAgIEdka1Jl
Z2lvbiogY2xpcFJlZ2lvbiA9IGdka19yZWdpb25fcmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAg
ICAgIGdka193aW5kb3dfc2hhcGVfY29tYmluZV9yZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93
KHdpZGdldCksIGNsaXBSZWdpb24sIDAsIDApOwotICAgICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3ko
Y2xpcFJlZ2lvbik7Ci0jZWxzZQotICAgICAgICBjYWlyb19yZWdpb25fdCogY2xpcFJlZ2lvbiA9
IGNhaXJvX3JlZ2lvbl9jcmVhdGVfcmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAgICAgIGdka193
aW5kb3dfc2hhcGVfY29tYmluZV9yZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCks
IGNsaXBSZWdpb24sIDAsIDApOwotICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveShjbGlwUmVn
aW9uKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFRoZSBnb2FsIGlzIHRvIHRyeSB0byBhdm9p
ZCBjYWxsaW5nIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSBpbiB0aGUgV2ViVmlldydzCi0gICAg
Ly8gc2l6ZS1hbGxvY2F0ZSBtZXRob2QuIEl0IGJsb2NrcyB0aGUgbWFpbiBsb29wIGFuZCBpZiB0
aGUgd2lkZ2V0IGlzIG9mZnNjcmVlbgotICAgIC8vIG9yIGhhc24ndCBtb3ZlZCBpdCBpc24ndCBy
ZXF1aXJlZC4KLQotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGhh
cyBub3QgY2hhbmdlZC4KLSAgICBHdGtBbGxvY2F0aW9uIGN1cnJlbnRBbGxvY2F0aW9uOwotICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmY3VycmVudEFsbG9jYXRpb24pOwot
ICAgIGlmIChjdXJyZW50QWxsb2NhdGlvbiA9PSBtX2RlbGF5ZWRBbGxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBib3RoIHRoZSBvbGQgYW5k
IHRoZSBuZXcgYWxsb2NhdGlvbnMgYXJlIG91dHNpZGUgdGhlIGZyYW1lLgotICAgIEludFJlY3Qg
Y3VycmVudEFsbG9jYXRpb25SZWN0KGN1cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBjdXJyZW50QWxs
b2NhdGlvblJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICBpZiAoY3VycmVudEFsbG9j
YXRpb25SZWN0LmlzRW1wdHkoKSAmJiBtX2NsaXBSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgImRlbGF5ZWQt
YWxsb2NhdGlvbiIsICZtX2RlbGF5ZWRBbGxvY2F0aW9uKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNp
YmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJl
bnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAgZ3Rr
X3dpZGdldF9zaG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBndGtfd2lkZ2V0X2hpZGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgfQot
fQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4m
IG91dHB1dEJ1ZmZlciwgdWludDMyX3QgZmlsZW5hbWVMZW5ndGgsIGNvbnN0IGNoYXIqIGZpbGVu
YW1lQnVmZmVyKQotewotICAgIC8vIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1l
bnRhdGlvbiBhYm91dCB3aGF0IGVuY29kaW5nIHRoZSBmaWxlbmFtZQotICAgIC8vIGlzIGluLCBi
dXQgbW9zdCBwb3J0cyBzZWVtIHRvIGFzc3VtZSBVVEYtOCBoZXJlIGFuZCB0aGUgdGVzdCBwbHVn
aW4gaXMgZGVmaW5pdGVseQotICAgIC8vIHNlbmRpbmcgdGhlIHBhdGggaW4gVVRGLTggZW5jb2Rp
bmcuCi0gICAgQ1N0cmluZyBmaWxlbmFtZShmaWxlbmFtZUJ1ZmZlciwgZmlsZW5hbWVMZW5ndGgp
OwotCi0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9j
b21tYW5kbGluZV9hcmcoZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgaWYgKGdfZmlsZV9xdWVyeV9m
aWxlX3R5cGUoZmlsZS5nZXQoKSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgMCkgIT0gR19GSUxF
X1RZUEVfUkVHVUxBUikKLSAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0g
ICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9p
bmZvKGZpbGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCkpOwotICAgIGlmICghZmlsZUlu
Zm8pCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8
R0ZpbGVJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlYWQoZmls
ZS5nZXQoKSwgMCwgMCkpOwotICAgIGlmICghaW5wdXRTdHJlYW0pCi0gICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIG91dHB1dEJ1ZmZlci5yZXNpemUoZ19maWxlX2lu
Zm9fZ2V0X3NpemUoZmlsZUluZm8uZ2V0KCkpKTsKLSAgICBnc2l6ZSBieXRlc1JlYWQgPSAwOwot
ICAgIGlmICghZ19pbnB1dF9zdHJlYW1fcmVhZF9hbGwoR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJl
YW0uZ2V0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVy
LmRhdGEoKSwgb3V0cHV0QnVmZmVyLnNpemUoKSwgJmJ5dGVzUmVhZCwgMCwgMCkpCi0gICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqc3RhdGljX2Nh
c3Q8dWludDMyX3QqPih2YWx1ZSkgPSAyOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRC
b29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5Q
Qm9vbCo+KHZhbHVlKSA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6
Ci0gICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBF
cnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZ4
RGlzcGxheToKLSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpCi0gICAgICAgICAgICAqKHZvaWQg
KiopdmFsdWUgPSAodm9pZCAqKUdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSAo
dm9pZCAqKUdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHRkaXNw
bGF5OwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgotICAgICAgICBpZiAoIW1fbmVlZHNY
RW1iZWQpIHsKLSAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGlj
YXRpb25Db250ZXh0IChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50
Lnh0ZGlzcGxheSk7Ci0KLSAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6
IHsKLSAgICAgICAgICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSk7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0gZ2RrX3dpbmRv
d19nZXRfdG9wbGV2ZWwoZ2RrV2luZG93KTsKLSAgICAgICAgICAgIGlmICghdG9wbGV2ZWxXaW5k
b3cpIHsKLSAgICAgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpz
dGF0aWNfY2FzdDxXaW5kb3cqPih2YWx1ZSkgPSBHREtfV0lORE9XX1hXSU5ET1codG9wbGV2ZWxX
aW5kb3cpOwotICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIGd0
a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVj
dChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgaWYg
KG1faXNXaW5kb3dlZCkKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7
Ci19Ci0KLURpc3BsYXkqIFBsdWdpblZpZXc6OmdldFBsdWdpbkRpc3BsYXkoRnJhbWUqIHBhcmVu
dEZyYW1lKQotewotICAgIGlmIChwYXJlbnRGcmFtZSkgewotICAgICAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IHBhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCk7Ci0gICAgICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0X2dl
dF9kaXNwbGF5KHdpZGdldCkpOwotICAgIH0KLQotICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBt
aWdodCBoYXZlIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbiBvcGVuLiAgU2luY2Ugd2UncmUKLSAg
ICAvLyBhIGdkay9ndGsgYXBwLCB3ZSdsbCAocHJvYmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29u
bmVjdGlvbiBhcyBhbnkgZ2RrLWJhc2VkCi0gICAgLy8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVy
biB0aGF0LiAgV2UgbWlnaHQgd2FudCB0byBhZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUK
LSAgICAvLyBsYXRlci4KLQotICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0VmlzdWFsQW5kQ29sb3Jt
YXAoaW50IGRlcHRoLCBWaXN1YWwqKiB2aXN1YWwsIENvbG9ybWFwKiBjb2xvcm1hcCkKLXsKLSAg
ICAqdmlzdWFsID0gMDsKLSAgICAqY29sb3JtYXAgPSAwOwotCi0gICAgRGlzcGxheSogZGlzcGxh
eSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAg
IGludCBybWFqLCBybWluOwotICAgIGlmIChkZXB0aCA9PSAzMiAmJiAoIVhSZW5kZXJRdWVyeVZl
cnNpb24oZGlzcGxheSwgJnJtYWosICZybWluKSB8fCAocm1haiA9PSAwICYmIHJtaW4gPCA1KSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFhWaXN1YWxJbmZvIHRlbXBsOwotICAgIHRlbXBsLnNj
cmVlbiAgPSBnZGtfc2NyZWVuX2dldF9udW1iZXIoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsK
LSAgICB0ZW1wbC5kZXB0aCAgID0gZGVwdGg7Ci0gICAgdGVtcGwuY19jbGFzcyA9IFRydWVDb2xv
cjsKLSAgICBpbnQgblZpc3VhbHM7Ci0gICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBYR2V0
VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1YWxTY3JlZW5NYXNrIHwgVmlzdWFsRGVwdGhNYXNrIHwg
VmlzdWFsQ2xhc3NNYXNrLCAmdGVtcGwsICZuVmlzdWFscyk7Ci0KLSAgICBpZiAoIW5WaXN1YWxz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZGVwdGggPT0gMzIpIHsKLSAgICAgICAgZm9y
IChpbnQgaWR4ID0gMDsgaWR4IDwgblZpc3VhbHM7ICsraWR4KSB7Ci0gICAgICAgICAgICBYUmVu
ZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSwg
dmlzdWFsSW5mb1tpZHhdLnZpc3VhbCk7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0LT50eXBlID09
IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzaykgewotICAgICAgICAg
ICAgICAgICAqdmlzdWFsID0gdmlzdWFsSW5mb1tpZHhdLnZpc3VhbDsKLSAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAg
ICp2aXN1YWwgPSB2aXN1YWxJbmZvWzBdLnZpc3VhbDsKLQotICAgIFhGcmVlKHZpc3VhbEluZm8p
OwotCi0gICAgaWYgKCp2aXN1YWwpCi0gICAgICAgICpjb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1h
cChkaXNwbGF5LCBHREtfUk9PVF9XSU5ET1coKSwgKnZpc3VhbCwgQWxsb2NOb25lKTsKLX0KLQot
Z2Jvb2xlYW4gUGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVn
aW5WaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29j
a2V0KiBzb2NrZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzb2Nr
ZXQsIHNvY2tldCk7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0g
dHJ1ZTsKLSAgICB2aWV3LT51cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotfQotCi1i
b29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRl
ZCk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eSk7Ci0KLSAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwot
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9IG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsK
LSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIC8vIElmIG91ciBwYXJl
bnQgaXMgbm90IGFuY2hvcmVkIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2lsbAotICAgICAgICAgICAg
Ly8gZmFpbCBtaXNlcmFibHkgZm9yIFhFbWJlZCBwbHVnaW5zIGEgYml0IGxhdGVyIG9uIHdoZW4K
LSAgICAgICAgICAgIC8vIHdlIHRyeSB0byBnZXQgdGhlIElEIG9mIG91ciB3aW5kb3cgKHNpbmNl
IHJlYWxpemUgd2lsbAotICAgICAgICAgICAgLy8gZmFpbCksIHNvIGxldCdzIGp1c3QgYWJvcnQg
aGVyZS4KLSAgICAgICAgICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBhZ2VDbGllbnQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbV9wbHVnQWRk
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3
KCkpOwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYWdlQ2xp
ZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLWFkZGVkIiwgR19DQUxMQkFDSyhQbHVn
aW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Zy1yZW1vdmVkIiwgR19DQUxMQkFD
SyhQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdlQ2xpZW50
LCAwKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Ci0gICAg
ICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkobnVsbHB0cik7Ci0gICAgfQot
Ci0gICAgc2hvdygpOwotCi0gICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0g
bmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKLSAgICAgICAgd3MtPnR5cGUgPSAwOwot
Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdp
bmRvd1R5cGVXaW5kb3c7Ci0gICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7Ci0gICAgICAgICAg
ICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsKLSAgICAgICAgICAgIG1fbnBXaW5kb3cud2lu
ZG93ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tF
VChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSkpOwotICAgICAgICAgICAgR2RrV2luZG93KiB3aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKLSAgICAgICAgICAgIHdzLT5kaXNw
bGF5ID0gR0RLX1dJTkRPV19YRElTUExBWSh3aW5kb3cpOwotICAgICAgICAgICAgd3MtPnZpc3Vh
bCA9IEdES19WSVNVQUxfWFZJU1VBTChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7Ci0g
ICAgICAgICAgICB3cy0+ZGVwdGggPSBnZGtfdmlzdWFsX2dldF9kZXB0aChnZGtfd2luZG93X2dl
dF92aXN1YWwod2luZG93KSk7Ci0gICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBYQ3JlYXRlQ29s
b3JtYXAod3MtPmRpc3BsYXksIEdES19ST09UX1dJTkRPVygpLCB3cy0+dmlzdWFsLCBBbGxvY05v
bmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPigoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
LT54dHdpbmRvdykpOwotICAgICAgICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSktPnh0ZGlzcGxheTsKLSAgICAgICAgICAgIHdzLT52aXN1YWwgPSBH
VEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0dmlzdWFsOwotICAg
ICAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54
dGNsaWVudC54dGRlcHRoOwotICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOwotICAgICAgICB9Ci0g
ICAgICAgIFhGbHVzaCAod3MtPmRpc3BsYXkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBX
aW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93Lndp
bmRvdyA9IDA7IC8vIE5vdCB1c2VkPwotCi0gICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2Rr
X3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChnc2NyZWVuKTsKLQotICAgICAgICBpZiAoZ2RrX3Zp
c3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCkgPT0gMzIgfHwgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoKSkgewotICAgICAgICAg
ICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoMzIsICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOwotICAg
ICAgICAgICAgd3MtPmRlcHRoID0gMzI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fdmlz
dWFsKSB7Ci0gICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1hcChnZGtfdmlzdWFsX2dldF9k
ZXB0aChndmlzdWFsKSwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAgICAgICB3cy0+
ZGVwdGggPSBnZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFsKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHdzLT5kaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2Rl
ZmF1bHQoKSk7Ci0gICAgICAgIHdzLT52aXN1YWwgPSBtX3Zpc3VhbDsKLSAgICAgICAgd3MtPmNv
bG9ybWFwID0gbV9jb2xvcm1hcDsKLQotICAgICAgICBtX25wV2luZG93LnggPSAwOwotICAgICAg
ICBtX25wV2luZG93LnkgPSAwOwotICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7Ci0gICAg
ICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7Ci0gICAgfQotCi0gICAgbV9ucFdpbmRvdy53c19p
bmZvID0gd3M7Ci0KLSAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywg
bGlrZSBtYWMgcG9ydD8KLSAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQotICAgICAgICB1cGRhdGVQbHVnaW5X
aWRnZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3Qg
cHJvZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZHJhd2FibGUp
IHsKLSAgICAgICAgWEZyZWVQaXhtYXAoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSksIG1fZHJhd2FibGUpOwotICAgICAgICBtX2RyYXdhYmxlID0gMDsKLSAg
ICB9Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgaWYg
KHdpZGdldCkgewotICAgICAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3Bh
cmVudCh3aWRnZXQpOwotICAgICAgICBBU1NFUlQocGFyZW50KTsKLSAgICAgICAgZ3RrX2NvbnRh
aW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCB3aWRnZXQpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4u
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlNDE1Yy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworKysgL2Rldi9udWxsCkBAIC0x
LDk3MSArMCwwIEBACi0vKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJz
LW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0gKiB2aW06ZXhwYW5kdGFiOnNoaWZ0
d2lkdGg9Mjp0YWJzdG9wPTI6ICovCi0gCi0vKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoq
KioqCi0gKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhl
IEd0azJYdEJpbiBXaWRnZXQgSW1wbGVtZW50YXRpb24uCi0gKgotICogVGhlIEluaXRpYWwgRGV2
ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMu
Ci0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJp
Z2h0IChDKSAyMDAyCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVp
dGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0
aGUgIkdQTCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAot
ICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQ
TCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5
b3VyCi0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWly
ZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBw
cm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwg
b3IgdGhlIExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLSAK
LS8qCi0gKiBUaGUgR3RrWHRCaW4gd2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtpdCBjb2RlIHRv
IGJlIHVzZWQKLSAqIGluc2lkZSBhIEdUSyBhcHBsaWNhdGlvbi4gIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAieGVtYmVk
LmgiCi0jaW5jbHVkZSAiZ3RrMnh0YmluLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCi0jaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNlbmRpZgotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgot
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Rk
bGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLS8qIFhsaWIvWHQgc3R1ZmYgKi8KLSNpbmNs
dWRlIDxYMTEvWGxpYi5oPgotI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgotI2luY2x1ZGUgPFgxMS9T
aGVsbC5oPgotI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KLSNpbmNsdWRlIDxYMTEvU3RyaW5n
RGVmcy5oPgotCi0vLyBUaGlzIGlzIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGdka190aHJl
YWRzX2xlYXZlIGFuZCBnZGtfdGhyZWFkc19lbnRlci4KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLQotLyogdW5jb21tZW50IHRoaXMg
aWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpZGdldAotICAgY3JlYXRp
b24gYW5kIGRlc3RydWN0aW9uICovCi0jdW5kZWYgREVCVUdfWFRCSU4KLQotI2RlZmluZSBYVEJJ
Tl9NQVhfRVZFTlRTIDMwCi0KLXN0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2NsYXNz
X2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKLXN0YXRpYyB2b2lkICAgICAgICAgICAgZ3Rr
X3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0YmluKTsKLXN0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwot
c3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5yZWFsaXplICAgIChHdGtXaWRnZXQg
ICAgICAqd2lkZ2V0KTsKLXN0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2Rpc3Bvc2Ug
ICAgKEdPYmplY3QgICAgICAqb2JqZWN0KTsKLQotLyogWHQgYXdhcmUgWEVtYmVkICovCi1zdGF0
aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWws
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xv
cm1hcCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0
aCk7Ci1zdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0
Y2xpZW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBl
bWJlZGVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWln
aHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7
Ci1zdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGll
bnQpOwotc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0
Y2xpZW50KTsKLXN0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4
dHBsdWcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmbGFncyk7Ci1zdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAo
V2lkZ2V0IHcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWEV2ZW50ICpldmVudCk7Ci1zdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFu
ZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCk7Ci1zdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdp
ZGdldCB3LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7Ci1zdGF0aWMgdm9pZCAgICAgICB4
dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7Ci1z
dGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVl
cm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAotc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3Zl
X2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyB2
b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGExLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAgCi1zdGF0aWMgaW50ICAgICAgICBlcnJv
cl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICplcnJvcik7Ci0vKiBGb3IgZXJyb3IgdHJh
cCBvZiBYRW1iZWQgKi8KLXN0YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOwotc3Rh
dGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQpOwotc3RhdGljIGludCAgICAgICAgKCpv
bGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7Ci1zdGF0aWMgaW50
ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOwotCi1zdGF0aWMgR3RrV2lkZ2V0Q2xhc3Mg
KnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxh
eSA9IE5VTEw7Ci1zdGF0aWMgU3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7Ci1zdGF0
aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOwotc3RhdGljIGdp
bnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOwotCi1zdGF0aWMgR1BvbGxGRCAgICAgICAg
ICB4dF9ldmVudF9wb2xsX2ZkOwotc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190
aW1lcl9pZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOwotCi1zdGF0aWMg
Z2Jvb2xlYW4KLXh0X2V2ZW50X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKLSAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkKLXsgICAKLSAgVU5VU0VEX1BBUkFNKHNv
dXJjZV9kYXRhKTsKLSAgVU5VU0VEX1BBUkFNKHRpbWVvdXQpOwotICBpbnQgbWFzazsKLQotICBn
ZGtfdGhyZWFkc19lbnRlcigpOwotICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKLSAgZ2Rr
X3RocmVhZHNfbGVhdmUoKTsKLQotICByZXR1cm4gKGdib29sZWFuKW1hc2s7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbgoteHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKLXsKLSAg
VU5VU0VEX1BBUkFNKHNvdXJjZV9kYXRhKTsKLQotICBnZGtfdGhyZWFkc19lbnRlcigpOwotCi0g
IGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7Ci0gICAgaW50IG1hc2s7
Ci0gICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7Ci0gICAgZ2RrX3RocmVhZHNfbGVhdmUo
KTsKLSAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7Ci0gIH0KLQotICBnZGtfdGhyZWFkc19sZWF2
ZSgpOwotICByZXR1cm4gRkFMU0U7Ci19ICAgCi0KLXN0YXRpYyBnYm9vbGVhbgoteHRfZXZlbnRf
ZGlzcGF0Y2ggKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgR1Nv
dXJjZUZ1bmMgY2FsbF9iYWNrLAotICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgdXNlcl9k
YXRhKQotewotICBVTlVTRURfUEFSQU0oc291cmNlX2RhdGEpOwotICBVTlVTRURfUEFSQU0oY2Fs
bF9iYWNrKTsKLSAgVU5VU0VEX1BBUkFNKHVzZXJfZGF0YSk7Ci0KLSAgWHRBcHBDb250ZXh0IGFj
OwotICBpbnQgaSA9IDA7Ci0KLSAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4
dGRpc3BsYXkpOwotCi0gIGdka190aHJlYWRzX2VudGVyKCk7Ci0KLSAgLyogUHJvY2VzcyBvbmx5
IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhlCi0gICAq
IHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAotICAgKiBY
dEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMuICBUaGVy
ZSdzIG5vCi0gICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUg
YSB0aW1lciBjYWxsYmFjayB0aGF0Ci0gICAqIGRvZXMgaXQuICAqLwotICBmb3IgKGk9MDsgaSA8
IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7Ci0gICAgWHRB
cHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOwotICB9Ci0KLSAgZ2RrX3RocmVhZHNfbGVh
dmUoKTsKLQotICByZXR1cm4gVFJVRTsgIAotfQotCi10eXBlZGVmIHZvaWQgKCpHU291cmNlRnVu
Y3NGaW5hbGl6ZSkgKEdTb3VyY2UqIHNvdXJjZSk7Ci0KLXN0YXRpYyBHU291cmNlRnVuY3MgeHRf
ZXZlbnRfZnVuY3MgPSB7Ci0gIHh0X2V2ZW50X3ByZXBhcmUsCi0gIHh0X2V2ZW50X2NoZWNrLAot
ICB4dF9ldmVudF9kaXNwYXRjaCwKLSAgKEdTb3VyY2VGdW5jc0ZpbmFsaXplKWdfZnJlZSwKLSAg
KEdTb3VyY2VGdW5jKU5VTEwsCi0gIChHU291cmNlRHVtbXlNYXJzaGFsKU5VTEwKLX07Ci0KLXN0
YXRpYyBnYm9vbGVhbgoteHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjayhncG9pbnRlciB1
c2VyX2RhdGEpCi17Ci0gIERpc3BsYXkgKiBkaXNwbGF5OwotICBYdEFwcENvbnRleHQgYWM7Ci0g
IGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsKLQotICBkaXNwbGF5ID0gKERpc3BsYXkgKil1c2Vy
X2RhdGE7Ci0gIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoZGlzcGxheSk7Ci0K
LSAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1hbnkgWHQgZXZlbnRzIGhlcmUuIElmIHdlIGp1c3Qg
cHJvY2VzcwotICAgICBvbmUgZXZlbnQgd2UgbWlnaHQgc3RhcnZlIG9uZSBvciBtb3JlIFh0IGNv
bnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQKLSAgICAgdGhpcyBjb3VsZCBoYW5nIHRoZSB3aG9s
ZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91cmluZyBpbi4gU28gcHJvY2VzcwotICAgICB1cCB0
byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFuZCBzYXZlIHRoZSByZXN0IGZvciBsYXRlci4gVGhp
cyBpcyBhIGhhY2ssCi0gICAgIGJ1dCBpdCBvdWdodGEgd29yay4gV2UgKnJlYWxseSogc2hvdWxk
IGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lucy4KLSAgKi8KLSAgd2hpbGUgKGV2ZW50c1RvUHJv
Y2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykpCi0gICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0
SU1BbGwpOwotICByZXR1cm4gVFJVRTsKLX0KLQotR1R5cGUKLWd0a194dGJpbl9nZXRfdHlwZSAo
dm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHh0YmluX3R5cGUgPSAwOwotCi0gIGlmICgheHRiaW5f
dHlwZSkgewotICAgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyB4dGJpbl9pbmZvID0KLSAgICAg
IHsKLSAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKLSAgICAgICAgTlVMTCwKLSAgICAg
ICAgTlVMTCwKLQotICAgICAgICAoR0NsYXNzSW5pdEZ1bmMpZ3RrX3h0YmluX2NsYXNzX2luaXQs
Ci0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0KLSAgICAgICAgc2l6ZW9mIChHdGtYdEJp
biksCi0gICAgICAgIDAsCi0gICAgICAgIChHSW5zdGFuY2VJbml0RnVuYylndGtfeHRiaW5faW5p
dCwKLSAgICAgICAgTlVMTAotICAgICAgfTsKLSAgICAgIHh0YmluX3R5cGUgPSBnX3R5cGVfcmVn
aXN0ZXJfc3RhdGljIChHVEtfVFlQRV9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkd0a1h0QmluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmeHRiaW5faW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwKTsKLSAgfQotICByZXR1cm4geHRiaW5fdHlwZTsKLX0KLQotc3Rh
dGljIHZvaWQKLWd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFzcykKLXsK
LSAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9jbGFzczsKLSAgR09iamVjdENsYXNzICAgKm9iamVj
dF9jbGFzczsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGts
YXNzKTsKLQotICB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTIChrbGFzcyk7Ci0gIHdp
ZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194dGJpbl9yZWFsaXplOwotICB3aWRnZXRfY2xhc3Mt
PnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJlYWxpemU7Ci0KLSAgb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3RrX3h0Ymlu
X2Rpc3Bvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0
YmluKQotewotICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKLSAgeHRiaW4tPnBhcmVudF93aW5k
b3cgPSBOVUxMOwotICB4dGJpbi0+eHR3aW5kb3cgPSAwOwotICB4dGJpbi0+eCA9IDA7Ci0gIHh0
YmluLT55ID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWd0a194dGJpbl9yZWFsaXplIChHdGtXaWRn
ZXQgKndpZGdldCkKLXsKLSAgR3RrWHRCaW4gICAgICp4dGJpbjsKLSAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OwotICBHdGtBbGxvY2F0aW9uIHdpZGdldF9h
bGxvY2F0aW9uOwotCi0jaWZkZWYgREVCVUdfWFRCSU4KLSAgcHJpbnRmKCJndGtfeHRiaW5fcmVh
bGl6ZSgpXG4iKTsKLSNlbmRpZgotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAo
d2lkZ2V0KSk7Ci0KLSAgeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7Ci0KLSAgLyogY2FjdWxh
dGUgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHJlYWxpemUgKi8KLSAgYWxsb2NhdGlvbi53aWR0aCA9
IGdka193aW5kb3dfZ2V0X3dpZHRoKHh0YmluLT5wYXJlbnRfd2luZG93KTsKLSAgYWxsb2NhdGlv
bi5oZWlnaHQgPSBnZGtfd2luZG93X2dldF9oZWlnaHQoeHRiaW4tPnBhcmVudF93aW5kb3cpOwot
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOwotCi0jaWZk
ZWYgREVCVUdfWFRCSU4KLSAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRc
biIsIHgsIHksIHcsIGgpOwotI2VuZGlmCi0KLSAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3
aWRnZXQsICZ3aWRnZXRfYWxsb2NhdGlvbik7Ci0gIHh0YmluLT53aWR0aCA9IHdpZGdldF9hbGxv
Y2F0aW9uLndpZHRoOwotICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0X2FsbG9jYXRpb24uaGVpZ2h0
OwotCi0gIC8qIHVzZSBHdGtTb2NrZXQncyByZWFsaXplICovCi0gICgqR1RLX1dJREdFVF9DTEFT
UyhwYXJlbnRfY2xhc3MpLT5yZWFsaXplKSh3aWRnZXQpOwotCi0gIC8qIGNyZWF0ZSB0aGUgWHQg
Y2xpZW50IHdpZGdldCAqLwotICB4dF9jbGllbnRfY3JlYXRlKCYoeHRiaW4tPnh0Y2xpZW50KSwg
Ci0gICAgICAgZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVCh4dGJpbikpLCAKLSAgICAgICB4
dGJpbi0+aGVpZ2h0LCAKLSAgICAgICB4dGJpbi0+d2lkdGgpOwotICB4dGJpbi0+eHR3aW5kb3cg
PSBYdFdpbmRvdyh4dGJpbi0+eHRjbGllbnQuY2hpbGRfd2lkZ2V0KTsKLQotICBnZGtfZmx1c2go
KTsKLQotICAvKiBub3cgdGhhdCB3ZSBoYXZlIGNyZWF0ZWQgdGhlIHh0IGNsaWVudCwgYWRkIGl0
IHRvIHRoZSBzb2NrZXQuICovCi0gIGd0a19zb2NrZXRfYWRkX2lkKEdUS19TT0NLRVQod2lkZ2V0
KSwgeHRiaW4tPnh0d2luZG93KTsKLX0KLQotCi0KLUd0a1dpZGdldCoKLWd0a194dGJpbl9uZXcg
KEd0a1dpZGdldCAqcGFyZW50X3dpZGdldCwgU3RyaW5nICpmKQotewotICBHdGtYdEJpbiAqeHRi
aW47Ci0gIGdwb2ludGVyIHVzZXJfZGF0YTsKLSAgR2RrU2NyZWVuICpzY3JlZW47Ci0gIEdka1Zp
c3VhbCogdmlzdWFsOwotICBDb2xvcm1hcCBjb2xvcm1hcDsKLSAgR2RrV2luZG93KiBwYXJlbnRf
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHBhcmVudF93aWRnZXQpOwotCi0gIGFzc2Vy
dChwYXJlbnRfd2luZG93ICE9IE5VTEwpOwotICB4dGJpbiA9IGdfb2JqZWN0X25ldyAoR1RLX1RZ
UEVfWFRCSU4sIE5VTEwpOwotCi0gIGlmICgheHRiaW4pCi0gICAgcmV0dXJuIChHdGtXaWRnZXQq
KU5VTEw7Ci0KLSAgaWYgKGYpCi0gICAgZmFsbGJhY2sgPSBmOwotCi0gIC8qIEluaXRpYWxpemUg
dGhlIFh0IHRvb2xraXQgKi8KLSAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93
OwotCi0gIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRfd2lkZ2V0KTsKLSAg
dmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pOwotICBjb2xvcm1h
cCA9IFhDcmVhdGVDb2xvcm1hcChHREtfRElTUExBWV9YRElTUExBWShnZGtfc2NyZWVuX2dldF9k
aXNwbGF5KHNjcmVlbikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfV0lORE9X
X1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coc2NyZWVuKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLCBBbGxvY05vbmUp
OwotCi0gIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50KSwgCi0gICAgICAgICAgICAg
ICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLAotICAgICAgICAgICAgICAgICBjb2xvcm1h
cCwKLSAgICAgICAgICAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSk7Ci0KLSAg
aWYgKCF4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7Ci0gICAgLyogSWYgWHRPcGVuRGlzcGxh
eSBmYWlsZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgotICAgICAqICBCYWlsIG91dC4KLSAg
ICAgKi8KLSNpZmRlZiBERUJVR19YVEJJTgotICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0
T3BlbkRpc3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7Ci0jZW5kaWYKLSAgICBnX2ZyZWUgKHh0
YmluKTsKLSAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7Ci0gIH0KLQotICAvKiBJZiB0aGlz
IGlzIHRoZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUK
LSAgICAgbWFpbmxvb3AgKi8KLSAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKLSAgICBpbnQgICAg
ICAgICAgIGNudW1iZXI7Ci0gICAgLyoKLSAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0
aGUgZ2xpYiBldmVudCBsb29wLgotICAgICAqLwotCi0gICAgLyogdGhlIGFzc3VtcHRpb24gaXMg
dGhhdCBndGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwotICAgIEdTb3VyY2UqIGdz
ID0gZ19zb3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKLSAgICAg
IGlmICghZ3MpIHsKLSAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICAKLSAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOwotICAgIGdfc291cmNl
X3NldF9jYW5fcmVjdXJzZShncywgVFJVRSk7Ci0gICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdz
LCAoR01haW5Db250ZXh0KilOVUxMKTsKLSNpZmRlZiBWTVMKLSAgICBjbnVtYmVyID0gWENvbm5l
Y3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKLSNlbHNlCi0gICAgY251bWJlciA9IENvbm5lY3Rpb25O
dW1iZXIoeHRkaXNwbGF5KTsKLSNlbmRpZgotICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVt
YmVyOwotICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCi0gICAgeHRfZXZl
bnRfcG9sbF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8K
LQotICAgIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7Ci0gICAgLyogYWRkIGEgdGltZXIg
c28gdGhhdCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KLSAgICB4dF9wb2xs
aW5nX3RpbWVyX2lkID0KLSAgICAgIGdfdGltZW91dF9hZGQoMjUsCi0gICAgICAgICAgICAgICAg
ICAgICAgKEdTb3VyY2VGdW5jKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9p
ZCh4dF9wb2xsaW5nX3RpbWVyX2lkLCAiW1dlYktpdF0geHRfZXZlbnRfcG9sbGluZ190aW1lcl9j
YWxsYmFjayIpOwotICB9Ci0KLSAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KLSAgbnVt
X3dpZGdldHMrKzsKLQotICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KLSAgeHRiaW4tPnh0ZGlz
cGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7Ci0gIGd0a193aWRnZXRfc2V0X3BhcmVu
dF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOwotICBnZGtfd2luZG93
X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOwotICBpZiAo
dXNlcl9kYXRhKQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRh
KSwgR1RLX1dJREdFVCh4dGJpbikpOwotCi0gIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Ci19
Ci0KLXZvaWQKLWd0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgeSkKLXsKLSAgeHRiaW4tPnggPSB4OwotICB4dGJpbi0+eSA9IHk7Ci0KLSAg
aWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkIChHVEtfV0lER0VUKHh0YmluKSkpCi0gICAgZ2Rr
X3dpbmRvd19tb3ZlIChndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCAoeHRiaW4pKSwg
eCwgeSk7Ci19Ci0KLXZvaWQKLWd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAot
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKLSAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgaGVpZ2h0KQotewotICBBcmcgYXJnc1syXTsKLSAgR3RrWHRCaW4gKnh0YmluID0g
R1RLX1hUQklOICh3aWRnZXQpOwotICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0KLSNpZmRl
ZiBERUJVR19YVEJJTgotICBwcmludGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIsICh2
b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSNlbmRpZgotCi0gIHh0YmluLT5oZWlnaHQg
PSBoZWlnaHQ7Ci0gIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKLQotICAvLyBBdm9pZCBCYWRWYWx1
ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKLSAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9MCkg
ewotICAgIGhlaWdodCA9IDE7Ci0gICAgd2lkdGggPSAxOwotICB9Ci0gIFh0U2V0QXJnKGFyZ3Nb
MF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKLSAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgsICB3
aWR0aCk7Ci0gIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdzLCAy
KTsKLQotICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2NrZXQg
a25vd3MgYWJvdXQgdGhlCi0gICAgIHNpemUgY2hhbmdlcyAqLwotICBhbGxvY2F0aW9uLnggPSB4
dGJpbi0+eDsKLSAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7Ci0gIGFsbG9jYXRpb24ud2lkdGgg
PSB4dGJpbi0+d2lkdGg7Ci0gIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsKLQot
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci19Ci0KLXN0
YXRpYyB2b2lkCi1ndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKLXsKLSAg
R3RrWHRCaW4gKnh0YmluOwotICBHdGtXaWRnZXQgKndpZGdldDsKLQotI2lmZGVmIERFQlVHX1hU
QklOCi0gIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKLSNlbmRpZgotCi0gIC8q
IGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24gb2Jq
ZWN0Ci0gICAqLwotICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOwotICB3aWRnZXQgPSBHVEtf
V0lER0VUKG9iamVjdCk7Ci0KLSAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNF
KTsKLSAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkICh3aWRnZXQpKSB7Ci0gICAgeHRfY2xp
ZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOwotICB9Ci0KLSAgKCpHVEtfV0lER0VU
X0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1ndGtfeHRiaW5fZGlzcG9zZSAoR09iamVjdCAqb2JqZWN0KQotewotICBHdGtYdEJpbiAq
eHRiaW47Ci0KLSNpZmRlZiBERUJVR19YVEJJTgotICBwcmludGYoImd0a194dGJpbl9kZXN0cm95
KClcbiIpOwotI2VuZGlmCi0KLSAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwot
ICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9iamVjdCkpOwotCi0gIHh0YmluID0g
R1RLX1hUQklOIChvYmplY3QpOwotCi0gIGlmKHh0YmluLT54dHdpbmRvdykgewotICAgIC8qIHJl
bW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLwotICAgIHh0X2NsaWVudF9kZXN0cm95KCYoeHRiaW4t
Pnh0Y2xpZW50KSk7Ci0gICAgeHRiaW4tPnh0d2luZG93ID0gMDsKLQotICAgIG51bV93aWRnZXRz
LS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KLQotICAgIC8qIElmIHRoaXMgaXMgdGhl
IGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQgZGlzcGxheQotICAgICAgIGNvbm5l
Y3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KLSAgICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgewot
I2lmZGVmIERFQlVHX1hUQklOCi0gICAgICBwcmludGYoInJlbW92aW5nIHRoZSBYdCBjb25uZWN0
aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7Ci0jZW5kaWYKLSAgICAgIGdfbWFpbl9jb250ZXh0
X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4dF9ldmVudF9wb2xsX2ZkKTsKLSAg
ICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOwotCi0gICAgICBnX3NvdXJjZV9yZW1vdmUoeHRfcG9s
bGluZ190aW1lcl9pZCk7Ci0gICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKLSAgICB9Ci0g
IH0KLQotICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Ci19
Ci0KLS8qCi0qIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVk
IGZvciBjbGllbnQgc2lkZQotKi8KLQotLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KLXN0YXRpYyB2
b2lkCi14dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCi0gICAgICAgICAgICAg
ICAgVmlzdWFsICp4dHZpc3VhbCwgCi0gICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1h
cCwKLSAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKLXsKLSAgWHRBcHBDb250ZXh0ICBhcHBf
Y29udGV4dDsKLSAgY2hhciAgICAgICAgICptQXJndlsxXTsKLSAgaW50ICAgICAgICAgICBtQXJn
YyA9IDA7Ci0KLSAgLyoKLSAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgotICAgKi8KLSAgeHRjbGll
bnQtPnRvcF93aWRnZXQgPSBOVUxMOwotICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsK
LSAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOwotICB4dGNsaWVudC0+eHR2aXN1YWwgICA9
IE5VTEw7Ci0gIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKLSAgeHRjbGllbnQtPnh0ZGVwdGgg
PSAwOwotCi0gIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKLSNpZmRlZiBERUJVR19YVEJJTgot
ICAgIHByaW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOwotI2VuZGlmCi0gICAgWHRUb29s
a2l0SW5pdGlhbGl6ZSgpOwotICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNv
bnRleHQoKTsKLSAgICBpZiAoZmFsbGJhY2spCi0gICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3Vy
Y2VzKGFwcF9jb250ZXh0LCBmYWxsYmFjayk7Ci0KLSAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNw
bGF5KGFwcF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKLSAgICBp
ZiAoeHRkaXNwbGF5KQotICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOwotICB9Ci0gIHh0
Y2xpZW50LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OwotICB4dGNsaWVudC0+eHR2aXN1YWwgICA9
IHh0dmlzdWFsOwotICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7Ci0gIHh0Y2xp
ZW50LT54dGRlcHRoICAgID0geHRkZXB0aDsKLX0KLQotLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQg
d2lkZ2V0cwotKiAgKi8KLXN0YXRpYyB2b2lkCi14dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQq
IHh0Y2xpZW50ICwgCi0gICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAotICAg
ICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAotICAgICAgICAgICAgICAgICAgIGludCB3aWR0
aCApIAotewotICBpbnQgICAgICAgICAgIG47Ci0gIEFyZyAgICAgICAgICAgYXJnc1s2XTsKLSAg
V2lkZ2V0ICAgICAgICBjaGlsZF93aWRnZXQ7Ci0gIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsK
LQotI2lmZGVmIERFQlVHX1hUQklOCi0gIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7
Ci0jZW5kaWYKLSAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwg
IldyYXBwZXIiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25T
aGVsbFdpZGdldENsYXNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGll
bnQtPnh0ZGlzcGxheSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAp
OwotICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7Ci0KLSAgLyogc2V0IHNpemUg
b2YgWHQgd2luZG93ICovCi0gIG4gPSAwOwotICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQs
ICAgaGVpZ2h0KTtuKys7Ci0gIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7
bisrOwotICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKLQotICBjaGlsZF93aWRn
ZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvcF93aWRnZXQsIE5VTEwpOwotCi0gIG4gPSAwOwotICBYdFNldEFyZyhhcmdz
W25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7Ci0gIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0Tndp
ZHRoLCAgICB3aWR0aCk7bisrOwotICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRj
bGllbnQtPnh0dmlzdWFsICk7IG4rKzsKLSAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAg
IHh0Y2xpZW50LT54dGRlcHRoICk7IG4rKzsKLSAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3Jt
YXAsIHh0Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKLSAgWHRTZXRBcmcoYXJnc1tuXSwgWHRO
Ym9yZGVyV2lkdGgsIDApOyBuKys7Ci0gIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywg
bik7Ci0KLSAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOwotICB4dGNsaWVudC0+
b2xkd2luZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7Ci0gIHRvcF93aWRnZXQtPmNvcmUu
d2luZG93ID0gZW1iZWRkZXJpZDsKLQotICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBm
aW5pc2ggaW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KLSNpZiBYbGliU3BlY2lmaWNhdGlvblJl
bGVhc2UgPj0gNgotICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCi0g
ICAgICAgICAgICAgICAgICAgICBlbWJlZGRlcmlkLAotICAgICAgICAgICAgICAgICAgICAgdG9w
X3dpZGdldCk7Ci0jZWxzZQotICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKLSAgICAg
ICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOwotI2VuZGlmCi0gIFh0UmVhbGl6ZVdpZGdldChj
aGlsZF93aWRnZXQpOwotCi0gIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCi0gIFhTZWxl
Y3RJbnB1dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKLSAgICAgICAgICAgICAgIFh0V2luZG93KHRv
cF93aWRnZXQpLCAKLSAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKLSAgeHRfY2xpZW50X3NldF9p
bmZvIChjaGlsZF93aWRnZXQsIDApOwotCi0gIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsK
LSAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKLQotICAvKiBzZXQgdGhl
IGV2ZW50IGhhbmRsZXIgKi8KLSAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAotICAg
ICAgICAgICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCi0gICAgICAg
ICAgICAgICAgICAgIFRSVUUsIAotICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIp
eHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKLSAgWHRBZGRFdmVudEhhbmRsZXIo
Y2hpbGRfd2lkZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFz
ayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKLSAgICAgICAgICAgICAgICAgICAgVFJVRSwgCi0gICAg
ICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIs
IAotICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7Ci0gIFhTeW5jKHh0Y2xpZW50LT54dGRp
c3BsYXksIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLXh0X2NsaWVudF91bnJlYWxpemUgKCBY
dENsaWVudCogeHRjbGllbnQgKQotewotI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2
Ci0gIFh0VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCi0gICAgICAgICAg
ICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7Ci0jZWxzZQot
ICBfWHRVbnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywK
LSAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7Ci0jZW5kaWYKLQot
ICAvKiBmbHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdl
dC0+Y29yZS53aW5kb3cKLSAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5k
b3cgaXMgZ29uZSAqLwotICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7Ci0KLSAg
eHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsK
LSAgWHRVbnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOwotfQotCi1zdGF0aWMg
dm9pZCAgICAgICAgICAgIAoteHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50
KQotewotICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgewotICAgIFh0UmVtb3ZlRXZlbnRIYW5k
bGVyKHh0Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0
Y2xpZW50KTsKLSAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOwotICAg
IHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCAgICAg
ICAgIAoteHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZs
YWdzKQotewotICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKLQotICBBdG9tIGluZm9BdG9tID0g
WEludGVybkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAot
Ci0gIGJ1ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8K
LSAgYnVmZmVyWzFdID0gZmxhZ3M7Ci0KLSAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRw
bHVnKSwgWHRXaW5kb3coeHRwbHVnKSwKLSAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5m
b0F0b20sIDMyLAotICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKLSAgICAgICAg
ICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci14dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xp
ZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCi17Ci0gIFVOVVNFRF9QQVJBTSh3KTsKLQotICBYdENs
aWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKLSAgc3dpdGNoIChldmVudC0+
eGNsaWVudC5kYXRhLmxbMV0pCi0gIHsKLSAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZOgot
ICAgIGJyZWFrOwotICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6Ci0jaWZkZWYgREVCVUdf
WFRCSU4KLSAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxu
Iik7Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6
Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJ
TkRPV19ERUFDVElWQVRFXG4iKTsKLSNlbmRpZgotICAgIGJyZWFrOwotICBjYXNlIFhFTUJFRF9N
T0RBTElUWV9PTjoKLSNpZmRlZiBERUJVR19YVEJJTgotICAgIHByaW50ZigiWHQgY2xpZW50IGdl
dCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOwotI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGNhc2UgWEVN
QkVEX01PREFMSVRZX09GRjoKLSNpZmRlZiBERUJVR19YVEJJTgotICAgIHByaW50ZigiWHQgY2xp
ZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKLSNlbmRpZgotICAgIGJyZWFrOwotICBj
YXNlIFhFTUJFRF9GT0NVU19JTjoKLSAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgotICAgIHsKLSAg
ICAgIFhFdmVudCB4ZXZlbnQ7Ci0gICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVu
dCkpOwotCi0gICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VT
X0lOKSB7Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBm
b2N1cyBpblxuIik7Ci0jZW5kaWYKLSAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJ
bjsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotI2lmZGVmIERFQlVHX1hUQklOCi0gICAgICAgIHBy
aW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKLSNlbmRpZgotICAgICAgICB4ZXZlbnQu
eGZvY3VzLnR5cGUgPSBGb2N1c091dDsKLSAgICAgIH0KLQotICAgICAgeGV2ZW50Lnhmb2N1cy53
aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7Ci0gICAgICB4ZXZlbnQueGZv
Y3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOwotICAgICAgWFNl
bmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKLSAgICAgICAgICAgICAg
ICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCi0gICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50
TWFzaywKLSAgICAgICAgICAgICAgICAgJnhldmVudCApOwotICAgICAgWFN5bmMoIFh0RGlzcGxh
eSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGRl
ZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCi19Ci0K
LXN0YXRpYyB2b2lkICAgICAgICAgCi14dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcs
IFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKLXsKLSAgWHRDbGllbnQgKnh0
cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7Ci0gIAotICBzd2l0Y2goZXZlbnQtPnR5cGUp
Ci0gICAgewotICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKLSAgICAgIC8qIEhhbmRsZSB4ZW1iZWQg
bWVzc2FnZSAqLwotICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09Ci0gICAg
ICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKLSAg
ICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZl
bnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZXBhcmVudE5vdGlmeToKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTWFwcGluZ05vdGlmeToKLSAgICAgIHh0X2NsaWVudF9zZXRf
aW5mbyAodywgWEVNQkVEX01BUFBFRCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVubWFwTm90
aWZ5OgotICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9jdXNJbjoKLSAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDAp
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c091dDoKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgS2V5UHJlc3M6Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICAgIHByaW50ZigiS2V5IFByZXNz
IEdvdCFcbiIpOwotI2VuZGlmCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJl
YWs7Ci0gICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLwotfQotCi1zdGF0aWMg
dm9pZAotc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgbG9u
ZyAgICAgIGRldGFpbCwgCi0gICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEsICAK
LSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAotICAgICAgICAgICAgICAg
ICAgICAgbG9uZyAgICAgIHRpbWUpICAgCi17Ci0gIFhFdmVudCB4ZXZlbnQ7IAotICBXaW5kb3cg
dz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7Ci0gIERpc3BsYXkqIGRweT14dGNsaWVu
dC0+eHRkaXNwbGF5OwotICBpbnQgZXJyb3Jjb2RlOwotCi0gIG1lbXNldCgmeGV2ZW50LDAsc2l6
ZW9mKHhldmVudCkpOwotICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OwotICB4ZXZlbnQueGNs
aWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKLSAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBl
ID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7Ci0gIHhldmVudC54Y2xpZW50LmZv
cm1hdCA9IDMyOwotICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKLSAgeGV2ZW50
LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKLSAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJd
ID0gZGV0YWlsOyAKLSAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7Ci0gIHhldmVu
dC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOwotCi0gIHRyYXBfZXJyb3JzICgpOwotICBYU2Vu
ZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7Ci0gIFhTeW5jIChk
cHksRmFsc2UpOwotCi0gIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKLSNpZmRl
ZiBERUJVR19YVEJJTgotICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkh
ISFcbiIsZXJyb3Jjb2RlKTsKLSNlbmRpZgotICB9Ci19Ci0KLXN0YXRpYyBpbnQgICAgICAgICAg
ICAgCi1lcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikK
LXsKLSAgVU5VU0VEX1BBUkFNKGRpc3BsYXkpOwotCi0gIHRyYXBwZWRfZXJyb3JfY29kZSA9IGVy
cm9yLT5lcnJvcl9jb2RlOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgICAgICAgICAg
Ci10cmFwX2Vycm9ycyh2b2lkKQotewotICB0cmFwcGVkX2Vycm9yX2NvZGUgPTA7Ci0gIG9sZF9l
cnJvcl9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihlcnJvcl9oYW5kbGVyKTsKLX0KLQotc3Rh
dGljIGludCAgICAgICAgIAotdW50cmFwX2Vycm9yKHZvaWQpCi17Ci0gIFhTZXRFcnJvckhhbmRs
ZXIob2xkX2Vycm9yX2hhbmRsZXIpOwotICBpZih0cmFwcGVkX2Vycm9yX2NvZGUpIHsKLSNpZmRl
ZiBERUJVR19YVEJJTgotICAgIHByaW50ZigiR2V0IFggV2luZG93IEVycm9yID0gJWRcbiIsIHRy
YXBwZWRfZXJyb3JfY29kZSk7Ci0jZW5kaWYKLSAgfQotICByZXR1cm4gdHJhcHBlZF9lcnJvcl9j
b2RlOwotfQotCi1zdGF0aWMgdm9pZCAgICAgICAgIAoteHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVy
KCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSwgWEV2ZW50ICpldmVudCkKLXsKLSAgRGlz
cGxheSAqZHB5ID0gWHREaXNwbGF5KHcpOwotICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2Rh
dGE7Ci0gIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh3KTsKLQotICBzd2l0Y2goZXZlbnQtPnR5cGUp
Ci0gICAgewotICAgIGNhc2UgQ3JlYXRlTm90aWZ5OgotICAgICAgaWYoZXZlbnQtPnhjcmVhdGV3
aW5kb3cucGFyZW50ID09IHdpbikgewotICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dp
ZGdldCggZHB5LCBldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOwotICAgICAgICBpZiAoY2hp
bGQpCi0gICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoY2hpbGQsIHVzZXJfZGF0
YSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIERlc3Ryb3lOb3RpZnk6Ci0gICAg
ICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHcsIHVzZXJfZGF0YSk7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgotICAgICAgaWYoZXZlbnQtPnhyZXBhcmVudC5wYXJl
bnQgPT0gd2luKSB7Ci0gICAgICAgIC8qIEkgYW0gdGhlIG5ldyBwYXJlbnQgKi8KLSAgICAgICAg
V2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoZHB5LCBldmVudC0+eHJlcGFyZW50LndpbmRv
dyk7Ci0gICAgICAgIGlmIChjaGlsZCkKLSAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJf
dHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKGV2ZW50LT54
cmVwYXJlbnQud2luZG93ID09IHdpbikgewotICAgICAgICAvKiBJIGFtIHRoZSBuZXcgY2hpbGQg
Ki8KLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBJIGFtIHRoZSBvbGQgcGFyZW50
ICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvblJlbGVhc2U6Ci0jaWYg
MAotICAgICAgWFNldElucHV0Rm9jdXMoZHB5LCBYdFdpbmRvdyh4dGNsaWVudC0+Y2hpbGRfd2lk
Z2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2ZW50LT54YnV0dG9uLnRpbWUpOwotI2VuZGlmCi0gICAg
ICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOwotICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+
dHlwZSkgKi8KLX0KLQotc3RhdGljIHZvaWQKLXh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0
IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7Ci0g
IGxvbmcgZXZlbnRtYXNrOwotICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7Ci0KLSAg
dHJhcF9lcnJvcnMgKCk7Ci0gIFhHZXRXaW5kb3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRX
aW5kb3codyksICZhdHRyKTsKLSAgZXZlbnRtYXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBT
dWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2s7Ci0gIFhTZWxlY3RJbnB1
dChYdERpc3BsYXkodyksCi0gICAgICAgICAgICAgICBYdFdpbmRvdyh3KSwgCi0gICAgICAgICAg
ICAgICBldmVudG1hc2spOwotCi0gIFh0QWRkRXZlbnRIYW5kbGVyKHcsIAotICAgICAgICAgICAg
ICAgICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAotICAg
ICAgICAgICAgICAgICAgICBUUlVFLCAKLSAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5k
bGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgIHh0Y2xp
ZW50KTsKLSAgdW50cmFwX2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi14dF9yZW1vdmVfZm9j
dXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHRyYXBfZXJy
b3JzICgpOwotICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNr
IHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAotICAgICAgICAgICAgICAgICAgICAgIChYdEV2
ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7Ci0KLSAgdW50
cmFwX2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi14dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJl
ZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCi17Ci0gIFdpbmRvdyB3
aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7Ci0gIFdpbmRvdyAqY2hpbGRyZW47Ci0gIFdpbmRvdyBy
b290LCBwYXJlbnQ7Ci0gIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7Ci0gIHVu
c2lnbmVkIGludCBpLCBuY2hpbGRyZW47Ci0KLSAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3Jl
IHRoYW4gb25jZSAqLwotICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2Vy
X2RhdGEpOwotICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOwot
ICB0cmFwX2Vycm9ycygpOwotICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJl
bnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKLSAgICB1bnRyYXBfZXJyb3IoKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLQotICBpZih1bnRyYXBfZXJyb3IoKSkgCi0gICAgcmV0dXJuOwotCi0gIGZv
cihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKLSAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1Rv
V2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOwotICAgIGlmIChjaGlsZCkgCi0gICAgICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7Ci0gIH0KLSAgWEZyZWUoKHZv
aWQqKWNoaWxkcmVuKTsKLQotICByZXR1cm47Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdjZDc3Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5k
ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSAqIHZpbTogc2V0IGV4
cGFuZHRhYiBzaGlmdHdpZHRoPTIgdGFic3RvcD0yOiAqLwotIAotLyogKioqKiogQkVHSU4gTElD
RU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0g
KgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhl
IExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBh
bmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgotICoKLSAqIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgotICoKLSAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotICogU3VuIE1pY3Jv
c3lzdGVtcywgSW5jLgotICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgotICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1dG9yKHMpOgotICoKLSAqIEFsdGVybmF0
aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAotICogaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNh
YmxlIGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Ci0gKiB1bmRlciB0aGUgdGVybXMgb2Yg
ZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0g
KiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1Q
TCwgaW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMg
YWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSAqIGFuZCBvdGhlciBwcm92
aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVs
ZXRlCi0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUg
TVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NL
ICoqKioqICovICAgCi0KLSNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCi0jZGVmaW5lIF9fR1RLX1hU
QklOX0hfXwotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotI2luY2x1ZGUgPGd0ay9ndGt4Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxYMTEvSW50cmluc2lj
Lmg+Ci0jaW5jbHVkZSA8WDExL1h1dGlsLmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpZmRl
ZiBNT1pJTExBX0NMSUVOVAotI2luY2x1ZGUgIm5zY29yZS5oIgotI2lmZGVmIF9JTVBMX0dUS1hU
QklOX0FQSQotI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBlKQotI2Vs
c2UKLSNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKLSNlbmRpZgot
I2Vsc2UKLSNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKLSNlbmRpZgotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCi0KLXR5
cGVkZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKLXR5cGVkZWYgc3RydWN0IF9HdGtYdEJp
bkNsYXNzIEd0a1h0QmluQ2xhc3M7Ci0KLSNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAgICAgICAg
ICAgICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQotI2RlZmluZSBHVEtfWFRCSU4ob2JqKSAg
ICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0
a1h0QmluKSkKLSNkZWZpbmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQotI2RlZmluZSBH
VEtfSVNfWFRCSU4ob2JqKSAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSAoKG9iaiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1RZUEVfWFRCSU4pKQotI2RlZmluZSBHVEtfSVNfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCi10eXBlZGVmIHN0cnVjdCBfWHRD
bGllbnQgWHRDbGllbnQ7Ci0KLXN0cnVjdCBfWHRDbGllbnQgewotICBEaXNwbGF5CSp4dGRpc3Bs
YXk7Ci0gIFdpZGdldAl0b3Bfd2lkZ2V0OyAgICAvKiBUaGUgdG9wbGV2ZWwgd2lkZ2V0ICovCi0g
IFdpZGdldAljaGlsZF93aWRnZXQ7ICAvKiBUaGUgZW1iZWRkZWQgd2lkZ2V0ICovCi0gIFZpc3Vh
bAkqeHR2aXN1YWw7Ci0gIGludAkJeHRkZXB0aDsKLSAgQ29sb3JtYXAJeHRjb2xvcm1hcDsKLSAg
V2luZG93CW9sZHdpbmRvdzsKLX07Ci0KLXN0cnVjdCBfR3RrWHRCaW4KLXsKLSAgR3RrU29ja2V0
ICAgICAgZ3NvY2tldDsKLSAgR2RrV2luZG93ICAgICAqcGFyZW50X3dpbmRvdzsKLSAgRGlzcGxh
eSAgICAgICAqeHRkaXNwbGF5OyAgICAgICAgLyogWHQgVG9vbGtpdCBEaXNwbGF5ICovCi0KLSAg
V2luZG93ICAgICAgICAgeHR3aW5kb3c7ICAgICAgICAgLyogWHQgVG9vbGtpdCBYV2luZG93ICov
Ci0gIGdpbnQgICAgICAgICAgIHgsIHk7Ci0gIGdpbnQgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7
Ci0gIFh0Q2xpZW50CSB4dGNsaWVudDsgICAgICAgICAvKiBYdCBDbGllbnQgZm9yIFhFbWJlZCAq
LwotfTsKLSAgCi1zdHJ1Y3QgX0d0a1h0QmluQ2xhc3MKLXsKLSAgR3RrU29ja2V0Q2xhc3Mgd2lk
Z2V0X2NsYXNzOwotfTsKLQotR1RLWFRCSU5fQVBJKEdUeXBlKSAgICAgICBndGtfeHRiaW5fZ2V0
X3R5cGUgKHZvaWQpOwotR1RLWFRCSU5fQVBJKEd0a1dpZGdldCAqKSBndGtfeHRiaW5fbmV3IChH
dGtXaWRnZXQgKnBhcmVudF93aWRnZXQsIFN0cmluZyAqZik7Ci1HVEtYVEJJTl9BUEkodm9pZCkg
ICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHkpOwotR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgIGd0a194dGJpbl9yZXNpemUgKEd0a1dp
ZGdldCAqd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICBoZWlnaHQpOwotCi10eXBlZGVmIHN0cnVjdCBfWHRUTVJlYyB7Ci0g
ICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5zbGF0aW9uczsgICAgICAgLyogcHJpdmF0ZSB0byBUcmFu
c2xhdGlvbiBNYW5hZ2VyICAgICovCi0gICAgWHRCb3VuZEFjdGlvbnMgIHByb2NfdGFibGU7ICAg
ICAgICAgLyogcHJvY2VkdXJlIGJpbmRpbmdzIGZvciBhY3Rpb25zICAgICovCi0gICAgc3RydWN0
IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0YXRlOyAgLyogVHJhbnNsYXRpb24gTWFuYWdlciBzdGF0
ZSBwdHIgICAgICovCi0gICAgdW5zaWduZWQgbG9uZyAgIGxhc3RFdmVudFRpbWU7Ci19IFh0VE1S
ZWMsICpYdFRNOyAgIAotCi10eXBlZGVmIHN0cnVjdCBfQ29yZVBhcnQgewotICAgIFdpZGdldCAg
ICAgICAgICBzZWxmOyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAg
ICAgICAgICAqLwotICAgIFdpZGdldENsYXNzICAgICB3aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBv
aW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NSZWMgICAgICAqLwotICAgIFdpZGdldCAgICAgICAgICBw
YXJlbnQ7ICAgICAgICAgICAgIC8qIHBhcmVudCB3aWRnZXQgICAgICAgICAgICAgICAgICAgICAq
LwotICAgIFhybU5hbWUgICAgICAgICB4cm1fbmFtZTsgICAgICAgICAgIC8qIHdpZGdldCByZXNv
dXJjZSBuYW1lIHF1YXJraWZpZWQgICAqLwotICAgIEJvb2xlYW4gICAgICAgICBiZWluZ19kZXN0
cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3IgZGVzdHJveSAgICAgICAgICAgICAgICAqLwotICAgIFh0
Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2NhbGxiYWNrczsgIC8qIHdobyB0byBjYWxsIHdoZW4gd2lk
Z2V0IGRlc3Ryb3llZCAqLwotICAgIFh0UG9pbnRlciAgICAgICBjb25zdHJhaW50czsgICAgICAg
IC8qIGNvbnN0cmFpbnQgcmVjb3JkICAgICAgICAgICAgICAgICAqLwotICAgIFBvc2l0aW9uICAg
ICAgICB4LCB5OyAgICAgICAgICAgICAgIC8qIHdpbmRvdyBwb3NpdGlvbiAgICAgICAgICAgICAg
ICAgICAqLwotICAgIERpbWVuc2lvbiAgICAgICB3aWR0aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRv
dyBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAqLwotICAgIERpbWVuc2lvbiAgICAgICBib3Jk
ZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgd2lkdGggICAgICAgICAgICAgICAqLwot
ICAgIEJvb2xlYW4gICAgICAgICBtYW5hZ2VkOyAgICAgICAgICAgIC8qIGlzIHdpZGdldCBnZW9t
ZXRyeSBtYW5hZ2VkPyAgICAgICAqLwotICAgIEJvb2xlYW4gICAgICAgICBzZW5zaXRpdmU7ICAg
ICAgICAgIC8qIGlzIHdpZGdldCBzZW5zaXRpdmUgdG8gdXNlciBldmVudHMqLwotICAgIEJvb2xl
YW4gICAgICAgICBhbmNlc3Rvcl9zZW5zaXRpdmU7IC8qIGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNp
dGl2ZT8gICAgICAqLwotICAgIFh0RXZlbnRUYWJsZSAgICBldmVudF90YWJsZTsgICAgICAgIC8q
IHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0Y2hlciAgICAgICAqLwotICAgIFh0VE1SZWMgICAgICAg
ICB0bTsgICAgICAgICAgICAgICAgIC8qIHRyYW5zbGF0aW9uIG1hbmFnZW1lbnQgICAgICAgICAg
ICAqLwotICAgIFh0VHJhbnNsYXRpb25zICBhY2NlbGVyYXRvcnM7ICAgICAgIC8qIGFjY2VsZXJh
dG9yIHRyYW5zbGF0aW9ucyAgICAgICAgICAqLwotICAgIFBpeGVsICAgICAgICAgICBib3JkZXJf
cGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4ZWwgICAgICAgICAgICAgICAqLwotICAg
IFBpeG1hcCAgICAgICAgICBib3JkZXJfcGl4bWFwOyAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4
bWFwIG9yIE5VTEwgICAgICAqLwotICAgIFdpZGdldExpc3QgICAgICBwb3B1cF9saXN0OyAgICAg
ICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAgICAgICAgICAgICAgICAgICAqLwotICAgIENhcmRpbmFs
ICAgICAgICBudW1fcG9wdXBzOyAgICAgICAgIC8qIGhvdyBtYW55IHBvcHVwcyAgICAgICAgICAg
ICAgICAgICAqLwotICAgIFN0cmluZyAgICAgICAgICBuYW1lOyAgICAgICAgICAgICAgIC8qIHdp
ZGdldCByZXNvdXJjZSBuYW1lICAgICAgICAgICAgICAqLwotICAgIFNjcmVlbiAgICAgICAgICAq
c2NyZWVuOyAgICAgICAgICAgIC8qIHdpbmRvdydzIHNjcmVlbiAgICAgICAgICAgICAgICAgICAq
LwotICAgIENvbG9ybWFwICAgICAgICBjb2xvcm1hcDsgICAgICAgICAgIC8qIGNvbG9ybWFwICAg
ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIFdpbmRvdyAgICAgICAgICB3aW5kb3c7ICAg
ICAgICAgICAgIC8qIHdpbmRvdyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIENh
cmRpbmFsICAgICAgICBkZXB0aDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwbGFuZXMgaW4g
d2luZG93ICAgICAgICAqLwotICAgIFBpeGVsICAgICAgICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAg
IC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeGVsICAgICAgICAgICAqLwotICAgIFBpeG1hcCAgICAg
ICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBO
VUxMICAqLwotICAgIEJvb2xlYW4gICAgICAgICB2aXNpYmxlOyAgICAgICAgICAgIC8qIGlzIHdp
bmRvdyBtYXBwZWQgYW5kIG5vdCBvY2NsdWRlZD8qLwotICAgIEJvb2xlYW4gICAgICAgICBtYXBw
ZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3aW5kb3cgaWYgaXQncyBtYW5hZ2VkPyAgICAgICAqLwot
fSBDb3JlUGFydDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyB7Ci0gICAgQ29yZVBhcnQg
ICAgY29yZTsKLSB9IFdpZGdldFJlYywgQ29yZVJlYzsgICAKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci19Ci0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KLSNlbmRpZiAvKiBfX0dUS19YVEJJTl9IX18g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRmZjdiZTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsv
eGVtYmVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiAtKi0gTW9kZTogQysr
OyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCi0gKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCi0gCi0vKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0gKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAy
LjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgot
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhFTUJFRCBEZWNsYXJhdGlvbi4KLSAqCi0gKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNy
b3N5c3RlbXMsIEluYy4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxv
cGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250cmlidXRvcihzKToKLSAqCi0gKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcyBvZgotICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj
YWJsZSBpbnN0ZWFkCi0gKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9m
IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwot
ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN
UEwsIGluZGljYXRlIHlvdXIKLSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRl
bGV0ZQotICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhl
IE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElDRU5TRSBCTE9D
SyAqKioqKiAqLwotCi0vKiBYRU1CRUQgbWVzc2FnZXMgKi8KLSNkZWZpbmUgWEVNQkVEX0VNQkVE
REVEX05PVElGWSAgICAgICAgICAwCi0jZGVmaW5lIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAg
ICAgICAgMQotI2RlZmluZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgICAgICAgIDIKLSNkZWZp
bmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAgICAgICAzCi0jZGVmaW5lIFhFTUJFRF9GT0NV
U19JTiAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAg
ICAgICAgIDUKLSNkZWZpbmUgWEVNQkVEX0ZPQ1VTX05FWFQgICAgICAgICAgICAgICA2Ci0jZGVm
aW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAgICAgICAgNwotI2RlZmluZSBYRU1CRURfR1JB
Ql9LRVkgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAg
ICAgICAgICA5Ci0jZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PTiAgICAgICAgICAgICAgMTAKLSNk
ZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAgICAgICAgICAxMQotCi0vKiBOb24gc3RhbmRh
cmQgbWVzc2FnZXMqLwotI2RlZmluZSBYRU1CRURfR1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEw
OCAKLSNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJfS0VZICAgICAgICAgICAxMDkKLQotLyogRGV0
YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8KLSNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJF
TlQgICAgICAgICAgICAwCi0jZGVmaW5lIFhFTUJFRF9GT0NVU19GSVJTVCAgICAgICAgICAgICAg
MQotI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAgICAgICAgICAgICAgIDIKLQotLyogRmxhZ3Mg
Zm9yIF9YRU1CRURfSU5GTyAqLwotI2RlZmluZSBYRU1CRURfTUFQUEVEICAgICAgICAgICAgICAg
ICAgICgxIDw8IDApCg==
</data>
<flag name="review"
          id="253310"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228964</attachid>
            <date>2014-04-09 09:17:57 -0700</date>
            <delta_ts>2014-04-09 09:17:57 -0700</delta_ts>
            <desc>Try to fix EFL build</desc>
            <filename>wk2-plugins2.diff</filename>
            <type>text/plain</type>
            <size>73979</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmQ3OGFkOS4uMjQxOWUxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIwODEsNyArMjA4MSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbHVn
aW5zL1BsdWdpbkRlYnVnLmNwcAogICAgIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5jcHAKICAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKLSAgICBwbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAogICAgIHJlbmRlcmlu
Zy9CaWRpUnVuLmNwcApAQCAtMjYwOCwxMiArMjYwNyw3IEBAIGlmIChFTkFCTEVfU1FMX0RBVEFC
QVNFKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmNwcAotICAgICAgICBwbHVnaW5zL25wYXBpLmNwcAotICAgICkKLWVsc2UgKCkKK2lm
IChOT1QgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3BwCiAgICAgICAg
IHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjEwMDczYi4uOWMxZTA4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA0LTA5ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBQbHVnaW4gcHJv
Y2VzcyBjcmFzaGVzIHdoZW4gbG9hZGluZyB0b3RlbSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTM1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBSZW1vdmUgbmV0c2NhcGUgcGx1Z2luIGlt
cGxlbWVudGF0aW9uIGZyb20gV2ViQ29yZSB0aGF0IHdhcyBvbmx5CisgICAgICAgIHVzZWQgYnkg
V2ViS2l0MS4gVGhpcyByZW1vdmVzIHRoZSBjb25mbGljdCBiZXR3ZWVuIHRoZSBXZWJDb3JlIE5Q
TgorICAgICAgICBzeW1ib2xzIGFuZCB0aGUgb25lcyB1c2VkIGJ5IHRoZSBwbHVnaW5zLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHA6CisgICAgICAgICogcGx1Z2lu
cy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9n
dGsvUGx1Z2luVmlld0d0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ndGsvZ3Rr
Mnh0YmluLmM6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ndGsveGVtYmVkLmg6IFJlbW92ZWQuCisKIDIwMTQt
MDQtMDggIENvbnJhZCBTaHVsdHogIDxjb25yYWRfc2h1bHR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBuaWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igb2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCAzYmQ5MmYyLi4yNGNmNTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtMTkzLDYgKzE5MywxMCBAQCBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHAKKyAgICAgICAgcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorICAgICAg
ICBwbHVnaW5zL25wYXBpLmNwcAorCiAgICAgICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VF
ZmwuY3BwCiAgICAgICAgIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKaW5kZXggY2IyOTExZi4uM2QzY2FjNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL3RleHQvaWN1IgotICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2d0ayIKICkK
IAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC0xNDAsNiArMTM5LDkgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRl
bnRpYWxCYWNraW5nU3RvcmUuY3BwCisKKyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNw
cAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNv
cmVQbGF0Zm9ybUdUS19TT1VSQ0VTCkBAIC0yNTIsMjkgKzI1NCw2IEBAIGlmIChXVEZfVVNFX0dF
T0NMVUUyKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKLSAgICAgICAg
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAotICAgICAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5j
cHAKLSAgICAgICAgcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAotICAgICkKLQotICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCi0gICAgICAgIHBsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCi0gICAgICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCi0g
ICAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCi0KLSAgICAgICAgcGx1Z2lucy94MTEvUGx1
Z2luVmlld1gxMS5jcHAKLSAgICApCi1lbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCi0gICAgICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3BwCi0gICAgICAgIHBs
dWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCi0gICAgKQotZW5kaWYgKCkKLQogbGlzdChBUFBFTkQg
V2ViQ29yZV9VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUwogICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9t
ZWRpYUNvbnRyb2xzR3RrLmNzcwogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBhMGZh
MDIyLi5jODc2ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNzMsNiArNzMsNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIGlmIChFTkFCTEVfTkVUU0NBUEVfUExVR0lO
X0FQSSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAorICAgICAgICBwbHVnaW5zL25wYXBpLmNwcAogCiAgICAgICAgIHBsdWdp
bnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCiAgICAgICAgIHBsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05v
bmUuY3BwCmluZGV4IDlkYzAyNGUuLmRmNzlkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlld05vbmUuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVGb2N1c091dEV2ZW50KCkKIC8vIHBvcnRzIHVzaW5nIFBsdWdpblZpZXcsIGJ1dCB1bnRp
bCB0aGVuLCBpZiBuZXcgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgCiAvLyBhZGRlZCwgcGxlYXNl
IG1ha2Ugc3VyZSB0aGV5IGhhdmUgdGhlIHByb3BlciBwbGF0Zm9ybSAjaWZzIHNvIHRoYXQgY2hh
bmdlcwogLy8gZG8gbm90IGJyZWFrIHBvcnRzIHdobyBjb21waWxlIGJvdGggdGhpcyBmaWxlIGFu
ZCBQbHVnaW5WaWV3LmNwcC4gICAKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZM
KSB8fCBPUyhXSU5DRSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShHVEspIHx8IE9TKFdJTkNFKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQogdm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoTlBQKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDY1M2VkM2IuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBOb3ZlbGwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLQotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5j
bHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQotewotICAgIGlmICghbG9hZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIE5QX0dl
dE1JTUVEZXNjcmlwdGlvbiA9IDA7Ci0gICAgTlBQX0dldFZhbHVlUHJvY1B0ciBOUFBfR2V0VmFs
dWUgPSAwOwotCi0gICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2Ny
aXB0aW9uIiwgKHZvaWQqKikmTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKLSAgICBnX21vZHVsZV9z
eW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJk5QUF9HZXRWYWx1ZSk7Ci0K
LSAgICBpZiAoIU5QX0dldE1JTUVEZXNjcmlwdGlvbiB8fCAhTlBQX0dldFZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjaGFyKiBidWZmZXIgPSAwOwotICAgIE5QRXJyb3IgZXJy
ID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVmZmVyKTsKLSAgICBp
ZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQotICAgICAgICBtX25hbWUgPSBTdHJpbmc6OmZyb21V
VEY4KGJ1ZmZlcik7Ci0KLSAgICBidWZmZXIgPSAwOwotICAgIGVyciA9IE5QUF9HZXRWYWx1ZSgw
LCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOwotICAgIGlmIChlcnIgPT0g
TlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVU
RjgoYnVmZmVyKTsKLSAgICAgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlv
bigpOwotICAgIH0KLQotICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9IE5QX0dldE1JTUVEZXNjcmlw
dGlvbigpOwotICAgIGlmICghdHlwZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZ2No
YXIqKiBtaW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7Ci0gICAgICAg
IEdVbmlxdWVQdHI8Y2hhcj4gbWltZShnX3V0Zjhfc3RyZG93bihtaW1lRGVzY3NbaV0sIC0xKSk7
Ci0gICAgICAgIGdjaGFyKiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWUuZ2V0KCksICI6Iiwg
Myk7Ci0gICAgICAgIGlmIChnX3N0cnZfbGVuZ3RoKG1pbWVEYXRhKSA8IDMpIHsKLSAgICAgICAg
ICAgIGdfc3RyZnJlZXYobWltZURhdGEpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVE
YXRhWzJdKTsKLSAgICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0
YVsxXSwgIiwiLCAtMSk7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOwotICAg
ICAgICBmb3IgKGludCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQotICAgICAgICAgICAgZXh0
VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKLQotICAgICAg
ICBkZXRlcm1pbmVRdWlya3MobWltZURhdGFbMF0pOwotICAgICAgICBtX21pbWVUb0V4dGVuc2lv
bnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOwotICAgICAgICBtX21pbWVUb0Rlc2NyaXB0
aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKLQotICAgICAgICBnX3N0cmZyZWV2
KGV4dGVuc2lvbnMpOwotICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKLSAgICB9Ci0gICAg
Z19zdHJmcmVldihtaW1lRGVzY3MpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBp
bnQgd2Via2l0Z3RrWEVycm9yKERpc3BsYXkqIHhkaXNwbGF5LCBYRXJyb3JFdmVudCogZXJyb3Ip
Ci17Ci0gICAgZ2NoYXIgZXJyb3JNZXNzYWdlWzY0XTsKLSAgICBYR2V0RXJyb3JUZXh0KHhkaXNw
bGF5LCBlcnJvci0+ZXJyb3JfY29kZSwgZXJyb3JNZXNzYWdlLCA2Myk7Ci0gICAgZ193YXJuaW5n
KCJUaGUgcHJvZ3JhbSAnJXMnIHJlY2VpdmVkIGFuIFggV2luZG93IFN5c3RlbSBlcnJvci5cbiIK
LSAgICAgICAgICAgICAgIlRoaXMgcHJvYmFibHkgcmVmbGVjdHMgYSBidWcgaW4gdGhlIEFkb2Jl
IEZsYXNoIHBsdWdpbi5cbiIKLSAgICAgICAgICAgICAgIlRoZSBlcnJvciB3YXMgJyVzJy5cbiIK
LSAgICAgICAgICAgICAgIiAgKERldGFpbHM6IHNlcmlhbCAlbGQgZXJyb3JfY29kZSAlZCByZXF1
ZXN0X2NvZGUgJWQgbWlub3JfY29kZSAlZClcbiIsCi0gICAgICAgICAgICAgIGdfZ2V0X3ByZ25h
bWUoKSwgZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICBlcnJvci0+c2VyaWFsLCBlcnJvci0+
ZXJyb3JfY29kZSwKLSAgICAgICAgICAgICAgZXJyb3ItPnJlcXVlc3RfY29kZSwgZXJyb3ItPm1p
bm9yX2NvZGUpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBtb2R1bGVNaXhlc0d0
a1N5bWJvbHMoR01vZHVsZSogbW9kdWxlKQotewotICAgIHZvaWQqIHN5bWJvbDsKLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIHJldHVybiBnX21vZHVsZV9zeW1ib2wobW9kdWxlLCAiZ3Rr
X2FwcGxpY2F0aW9uX2dldF90eXBlIiwgJnN5bWJvbCk7Ci0jZWxzZQotICAgIHJldHVybiBnX21v
ZHVsZV9zeW1ib2wobW9kdWxlLCAiZ3RrX29iamVjdF9nZXRfdHlwZSIsICZzeW1ib2wpOwotI2Vu
ZGlmCi19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCi17Ci0gICAgaWYgKG1faXNMb2Fk
ZWQpIHsKLSAgICAgICAgbV9sb2FkQ291bnQrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmluYWxQYXRoKGdfc3RyZHVwKG1fcGF0aC51dGY4
KCkuZGF0YSgpKSk7Ci0gICAgd2hpbGUgKGdfZmlsZV90ZXN0KGZpbmFsUGF0aC5nZXQoKSwgR19G
SUxFX1RFU1RfSVNfU1lNTElOSykpIHsKLSAgICAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbmFsUGF0aC5nZXQoKSkpOwotICAgICAgICBH
UmVmUHRyPEdGaWxlPiBkaXIgPSBhZG9wdEdSZWYoZ19maWxlX2dldF9wYXJlbnQoZmlsZS5nZXQo
KSkpOwotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBsaW5rUGF0aChnX2ZpbGVfcmVhZF9saW5r
KGZpbmFsUGF0aC5nZXQoKSwgMCkpOwotICAgICAgICBHUmVmUHRyPEdGaWxlPiByZXNvbHZlZEZp
bGUgPSBhZG9wdEdSZWYoZ19maWxlX3Jlc29sdmVfcmVsYXRpdmVfcGF0aChkaXIuZ2V0KCksIGxp
bmtQYXRoLmdldCgpKSk7Ci0gICAgICAgIGZpbmFsUGF0aC5yZXNldChnX2ZpbGVfZ2V0X3BhdGgo
cmVzb2x2ZWRGaWxlLmdldCgpKSk7Ci0gICAgfQotCi0gICAgLy8gTm8gam9rZS4gSWYgdGhlcmUg
aXMgYSBuZXRzY2FwZSBjb21wb25lbnQgaW4gdGhlIHBhdGgsIGdvIGJhY2sKLSAgICAvLyB0byB0
aGUgc3ltbGluaywgYXMgZmxhc2ggYnJlYWtzIG90aGVyd2lzZS4KLSAgICAvLyBTZWUgaHR0cDov
L3NyYy5jaHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9tZS90cnVuay9zcmMvd2Via2l0L2dsdWUvcGx1
Z2lucy9wbHVnaW5fbGlzdF9wb3NpeC5jYwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGJhc2VOYW1l
KGdfcGF0aF9nZXRfYmFzZW5hbWUoZmluYWxQYXRoLmdldCgpKSk7Ci0gICAgaWYgKCFnX3N0cmNt
cDAoYmFzZU5hbWUuZ2V0KCksICJsaWJmbGFzaHBsYXllci5zbyIpCi0gICAgICAgICYmIGdfc3Ry
c3RyX2xlbihmaW5hbFBhdGguZ2V0KCksIC0xLCAiL25ldHNjYXBlLyIpKQotICAgICAgICBmaW5h
bFBhdGgucmVzZXQoZ19zdHJkdXAobV9wYXRoLnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIG1fbW9k
dWxlID0gZ19tb2R1bGVfb3BlbihmaW5hbFBhdGguZ2V0KCksIEdfTU9EVUxFX0JJTkRfTE9DQUwp
OwotCi0gICAgaWYgKCFtX21vZHVsZSkgewotICAgICAgICBMT0coUGx1Z2lucywiTW9kdWxlIExv
YWQgRmFpbGVkIDolcywgRXJyb3I6JXNcbiIsIChtX3BhdGgudXRmOCgpKS5kYXRhKCksIGdfbW9k
dWxlX2Vycm9yKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1v
ZHVsZU1peGVzR3RrU3ltYm9scyhtX21vZHVsZSkpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMsICJJ
Z25vcmluZyBtb2R1bGUgJyVzJyB0byBhdm9pZCBtaXhpbmcgR1RLKyAyIGFuZCBHVEsrIDMgc3lt
Ym9scy5cbiIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoYmFz
ZU5hbWUuZ2V0KCksICJsaWJmbGFzaHBsYXllci5zbyIpKSB7Ci0gICAgICAgIC8vIEZsYXNoIHBs
dWdpbiBjYW4gcHJvZHVjZSBYIGVycm9ycyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZSBHREsgWCBl
cnJvciBoYW5kbGVyLCB3aGljaAotICAgICAgICAvLyBleGl0cyB0aGUgcHJvY2Vzcy4gU2luY2Ug
d2UgZG9uJ3Qgd2FudCB0byBjcmFzaCBkdWUgdG8gZmxhc2ggYnVncywgd2UgaW5zdGFsbCBhCi0g
ICAgICAgIC8vIGN1c3RvbSBlcnJvciBoYW5kbGVyIHRvIHNob3cgYSB3YXJuaW5nIHdoZW4gYSBY
IGVycm9yIGhhcHBlbnMgd2l0aG91dCBhYm9ydGluZy4KLSAgICAgICAgWFNldEVycm9ySGFuZGxl
cih3ZWJraXRndGtYRXJyb3IpOwotICAgIH0KLQotICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5Q
X0luaXRpYWxpemUgPSAwOwotICAgIG1fTlBQX1NodXRkb3duID0gMDsKLQotICAgIE5QRXJyb3Ig
bnBFcnI7Ci0KLSAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwg
KHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7Ci0gICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAi
TlBfU2h1dGRvd24iLCAodm9pZCoqKSZtX05QUF9TaHV0ZG93bik7Ci0KLSAgICBpZiAoIU5QX0lu
aXRpYWxpemUgfHwgIW1fTlBQX1NodXRkb3duKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAg
bWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOwotICAgIG1f
cGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKLQotICAgIGluaXRpYWxp
emVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2Vy
RnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1Ip
Ci0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtX2xvYWRDb3VudCsrOwotICAgIHJldHVybiB0
cnVlOwotCi1hYm9ydDoKLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXVpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOwotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmZDlkMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBLYWthaSwgSW5j
LiA8YnJpYW5Aa2FrYWkuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RP
TVdpbmRvd0Jhc2UuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJT
cGF0aWFsTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVk
ZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0jaW5j
bHVkZSA8Z2RrY29uZmlnLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLSNkZWZp
bmUgU3RyaW5nIFh0U3RyaW5nVHlwZQotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVk
ZSAiZ3RrMnh0YmluLmgiCi0jZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMgYmVjYW1lIHVuZGVmaW5l
ZCBpbiBucHJ1bnRpbWVfaW50ZXJuYWwuaAotI2RlZmluZSBTdGF0dXMgaW50IC8vIGRpdHRvCi0j
aW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+
Ci0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKLXVzaW5n
IEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKLQotV2luZG93IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3coRnJh
bWUqIHBhcmVudEZyYW1lKQotewotICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBH
ZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsK
LSAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93
KGdzY3JlZW4pKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQp
Ci17Ci0gICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQo
KSk7Ci0gICAgaWYgKGZvY3VzZWQgJiYgcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6c2V0Rm9jdXMo
Zm9jdXNlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpCi17Ci0gICAgQVNTRVJUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgV2lkZ2V0Ojpz
aG93KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgQVNTRVJUKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgV2lkZ2V0OjpoaWRl
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKLXsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotCi0gICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZl
bnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTlBFdmVudCB4RXZlbnQ7Ci0gICAgaW5pdFhFdmVudCgmeEV2ZW50KTsK
LSAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2RrRXZlbnRL
ZXkoKTsKLQotICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBnZXQgdW5zZXQgc29t
ZXdoZXJlCi0gICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RXaW5kb3cobV9wYXJlbnRGcmFt
ZS5nZXQoKSk7Ci0gICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBj
aGlsZCB3aW5kb3cKLSAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwot
ICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAvLyBHZGtNb2RpZmllclR5
cGUgbWlycm9ycyB4bGliIHN0YXRlIG1hc2tzCi0gICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IGdk
a0V2ZW50LT5oYXJkd2FyZV9rZXljb2RlOwotICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0g
dHJ1ZTsKLQotICAgIC8vIE5PVEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4g
YXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93Ci0gICAgLy8g
Y29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJl
cnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVzIGFyZSBub3QKLSAgICAvLyBzZXQgdG8gdGhlaXIg
bm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0
aW9uLgotICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBF
dmVudAotICAgIHhFdmVudC54a2V5LnggPSAwOwotICAgIHhFdmVudC54a2V5LnkgPSAwOwotICAg
IHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKLQot
ICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1v
dXNlRXZlbnQqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7Ci0gICAgaWYg
KGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IENvbnRyb2xNYXNrOwotICAgIGlm
IChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgc3RhdGUgfD0gU2hpZnRNYXNrOwotICAgIGlm
IChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IE1vZDFNYXNrOwotICAgIGlmIChl
dmVudC0+bWV0YUtleSgpKQotICAgICAgICBzdGF0ZSB8PSBNb2Q0TWFzazsKLSAgICByZXR1cm4g
c3RhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKFhF
dmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29t
UG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0g
eEV2ZW50LT54YnV0dG9uOwotICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOwot
ICAgIHhidXR0b24ucm9vdCA9IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUp
OwotICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKLSAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+
dGltZVN0YW1wKCk7Ci0gICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhidXR0
b24ueSA9IHBvc3Rab29tUG9zLnkoKTsKLSAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5YKCk7Ci0gICAgeGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAgIHhidXR0
b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwotICAgIHN3aXRjaCAoZXZlbnQtPmJ1
dHRvbigpKSB7Ci0gICAgY2FzZSBNaWRkbGVCdXR0b246Ci0gICAgICAgIHhidXR0b24uYnV0dG9u
ID0gQnV0dG9uMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSaWdodEJ1dHRvbjoKLSAgICAg
ICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24zOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExl
ZnRCdXR0b246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24x
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgeGJ1dHRvbi5zYW1lX3NjcmVlbiA9IHRydWU7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCog
eEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBG
cmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0geEV2ZW50
LT54bW90aW9uOwotICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKLSAgICB4bW90aW9u
LnJvb3QgPSBQbHVnaW5WaWV3OjpnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKLSAgICB4bW90
aW9uLnN1YndpbmRvdyA9IDA7Ci0gICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgp
OwotICAgIHhtb3Rpb24ueCA9IHBvc3Rab29tUG9zLngoKTsKLSAgICB4bW90aW9uLnkgPSBwb3N0
Wm9vbVBvcy55KCk7Ci0gICAgeG1vdGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwotICAg
IHhtb3Rpb24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKLSAgICB4bW90aW9uLnN0YXRlID0g
aW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKLSAgICB4bW90aW9uLmlzX2hpbnQgPSBOb3RpZnlOb3Jt
YWw7Ci0gICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNl
dFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQq
IGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkK
LXsKLSAgICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7Ci0g
ICAgeGNyb3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7Ci0gICAgeGNyb3NzaW5nLnJvb3Qg
PSBQbHVnaW5WaWV3OjpnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKLSAgICB4Y3Jvc3Npbmcu
c3Vid2luZG93ID0gMDsKLSAgICB4Y3Jvc3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsK
LSAgICB4Y3Jvc3NpbmcueCA9IHBvc3Rab29tUG9zLnkoKTsKLSAgICB4Y3Jvc3NpbmcueSA9IHBv
c3Rab29tUG9zLngoKTsKLSAgICB4Y3Jvc3NpbmcueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsK
LSAgICB4Y3Jvc3NpbmcueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKLSAgICB4Y3Jvc3Npbmcu
c3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwotICAgIHhjcm9zc2luZy5tb2RlID0gTm90
aWZ5Tm9ybWFsOwotICAgIHhjcm9zc2luZy5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOwotICAg
IHhjcm9zc2luZy5zYW1lX3NjcmVlbiA9IHRydWU7Ci0gICAgeGNyb3NzaW5nLmZvY3VzID0gZmFs
c2U7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKLXsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotCi0gICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0
YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24gJiYgbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01v
ZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVu
dEZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRB
Y3RpdmUodHJ1ZSk7Ci0gICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOwotICAgIH0KLQotICAg
IE5QRXZlbnQgeEV2ZW50OwotICAgIGluaXRYRXZlbnQoJnhFdmVudCk7Ci0KLSAgICBJbnRQb2lu
dCBwb3N0Wm9vbVBvcyA9IHJvdW5kZWRJbnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFi
c29sdXRlVG9Mb2NhbChldmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKSk7Ci0KLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQotICAgICAgICBzZXRYQnV0dG9uRXZlbnRT
cGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUu
Z2V0KCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
bW92ZUV2ZW50KQotICAgICAgICBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50
LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwotICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgc2V0WENyb3Nz
aW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFy
ZW50RnJhbWUuZ2V0KCkpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3Ig
cGx1Z2lucyB3aGljaCBjaGFuZ2UgdGhlIGN1cnNvci4gV2hlbiB0aGF0IGhhcHBlbnMgd2UKLSAg
ICAgICAgLy8gZ2V0IG91dCBvZiBzeW5jIHdpdGggR0RLIHNvbWVob3cuIFJlc2V0dGluZyB0aGUg
Y3Vyc29yIGhlcmUgc2VlbXMgdG8gZml4IHRoZSBpc3N1ZS4KLSAgICAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgICAgICBnZGtfd2lu
ZG93X3NldF9jdXJzb3IoZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIDApOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkK
LSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKQotewotICAgIC8vIElmIHRoZSB3aW5k
b3cgaGFzIG5vdCBiZWVuIGVtYmVkZGVkIHlldCAodGhlIHBsdWcgYWRkZWQpLCB3ZSBkZWxheSBz
ZXR0aW5nIGl0cyBhbGxvY2F0aW9uIHVudGlsIAotICAgIC8vIHRoYXQgcG9pbnQuIFRoaXMgZml4
ZXMgaXNzdWVzIHdpdGggc29tZSBKYXZhIHBsdWdpbiBpbnN0YW5jZXMgbm90IHJlbmRlcmluZyBp
bW1lZGlhdGVseS4KLSAgICBpZiAoIW1fcGx1Z0FkZGVkIHx8IG1fZGVsYXllZEFsbG9jYXRpb24u
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCk7Ci0gICAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdp
ZGdldCkpIHsKLSAgICAgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAgICBHZGtSZWdpb24qIGNsaXBSZWdpb24gPSBn
ZGtfcmVnaW9uX3JlY3RhbmdsZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBl
X2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9u
LCAwLCAwKTsKLSAgICAgICAgZ2RrX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdpb24pOwotI2Vsc2UK
LSAgICAgICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRl
X3JlY3RhbmdsZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVf
cmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsK
LSAgICAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICAvLyBUaGUgZ29hbCBpcyB0byB0cnkgdG8gYXZvaWQgY2FsbGluZyBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUgaW4gdGhlIFdlYlZpZXcncwotICAgIC8vIHNpemUtYWxsb2NhdGUgbWV0
aG9kLiBJdCBibG9ja3MgdGhlIG1haW4gbG9vcCBhbmQgaWYgdGhlIHdpZGdldCBpcyBvZmZzY3Jl
ZW4KLSAgICAvLyBvciBoYXNuJ3QgbW92ZWQgaXQgaXNuJ3QgcmVxdWlyZWQuCi0KLSAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgbm90IGNoYW5nZWQuCi0gICAg
R3RrQWxsb2NhdGlvbiBjdXJyZW50QWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0aW9uKHdpZGdldCwgJmN1cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBpZiAoY3VycmVudEFsbG9j
YXRpb24gPT0gbV9kZWxheWVkQWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGFsbG9jYXRpb25z
IGFyZSBvdXRzaWRlIHRoZSBmcmFtZS4KLSAgICBJbnRSZWN0IGN1cnJlbnRBbGxvY2F0aW9uUmVj
dChjdXJyZW50QWxsb2NhdGlvbik7Ci0gICAgY3VycmVudEFsbG9jYXRpb25SZWN0LmludGVyc2Vj
dChmcmFtZVJlY3QoKSk7Ci0gICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pc0VtcHR5KCkg
JiYgbV9jbGlwUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJkZWxheWVkLWFsbG9jYXRpb24iLCAmbV9kZWxh
eWVkQWxsb2NhdGlvbik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShi
b29sIHZpc2libGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsK
LQotICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewot
ICAgICAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9o
aWRlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5W
aWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIsIHVpbnQz
Ml90IGZpbGVuYW1lTGVuZ3RoLCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKLXsKLSAgICAv
LyBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBl
bmNvZGluZyB0aGUgZmlsZW5hbWUKLSAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMgc2VlbSB0
byBhc3N1bWUgVVRGLTggaGVyZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRlbHkKLSAg
ICAvLyBzZW5kaW5nIHRoZSBwYXRoIGluIFVURi04IGVuY29kaW5nLgotICAgIENTdHJpbmcgZmls
ZW5hbWUoZmlsZW5hbWVCdWZmZXIsIGZpbGVuYW1lTGVuZ3RoKTsKLQotICAgIEdSZWZQdHI8R0Zp
bGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJnKGZpbGVu
YW1lLmRhdGEoKSkpOwotICAgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUuZ2V0KCks
IEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpCi0gICAg
ICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbmZv
PiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZP
X05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDApKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4g
TlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5wdXRTdHJlYW0+IGlu
cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIDAsIDApKTsKLSAg
ICBpZiAoIWlucHV0U3RyZWFtKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
Ci0KLSAgICBvdXRwdXRCdWZmZXIucmVzaXplKGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZv
LmdldCgpKSk7Ci0gICAgZ3NpemUgYnl0ZXNSZWFkID0gMDsKLSAgICBpZiAoIWdfaW5wdXRfc3Ry
ZWFtX3JlYWRfYWxsKEdfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZl
ci5zaXplKCksICZieXRlc1JlYWQsIDAsIDApKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9O
T1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAg
Y2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUp
ID0gMjsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0
RW5hYmxlZEJvb2w6Ci0gICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVl
OwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nh
c3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgIGlm
IChtX25lZWRzWEVtYmVkKQotICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilH
REtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheTsKLSAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBO
Vnh0QXBwQ29udGV4dDoKLSAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAg
ICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hU
QklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOwotCi0gICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBHZGtX
aW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52
aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotICAgICAgICAgICAg
R2RrV2luZG93KiB0b3BsZXZlbFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dp
bmRvdyk7Ci0gICAgICAgICAgICBpZiAoIXRvcGxldmVsV2luZG93KSB7Ci0gICAgICAgICAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8V2luZG93Kj4o
dmFsdWUpID0gR0RLX1dJTkRPV19YV0lORE9XKHRvcGxldmVsV2luZG93KTsKLSAgICAgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdf
YXJlYShHVEtfV0lER0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQotewotICAgIGlmIChtX2lzV2luZG93ZWQpCi0gICAg
ICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotfQotCi1EaXNwbGF5KiBQbHVn
aW5WaWV3OjpnZXRQbHVnaW5EaXNwbGF5KEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBpZiAo
cGFyZW50RnJhbWUpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwYXJlbnRGcmFtZS0+
dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgICAgICByZXR1
cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsK
LSAgICB9Ci0KLSAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgaGF2ZSBhIGRpZmZlcmVu
dCBYIGNvbm5lY3Rpb24gb3Blbi4gIFNpbmNlIHdlJ3JlCi0gICAgLy8gYSBnZGsvZ3RrIGFwcCwg
d2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5lY3Rpb24gYXMgYW55IGdkay1i
YXNlZAotICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1cm4gdGhhdC4gIFdlIG1pZ2h0IHdh
bnQgdG8gYWRkIG90aGVyIGltcGxlbWVudGF0aW9ucyBoZXJlCi0gICAgLy8gbGF0ZXIuCi0KLSAg
ICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFZpc3VhbEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFs
KiogdmlzdWFsLCBDb2xvcm1hcCogY29sb3JtYXApCi17Ci0gICAgKnZpc3VhbCA9IDA7Ci0gICAg
KmNvbG9ybWFwID0gMDsKLQotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElT
UExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBpbnQgcm1haiwgcm1pbjsKLSAg
ICBpZiAoZGVwdGggPT0gMzIgJiYgKCFYUmVuZGVyUXVlcnlWZXJzaW9uKGRpc3BsYXksICZybWFq
LCAmcm1pbikgfHwgKHJtYWogPT0gMCAmJiBybWluIDwgNSkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKLSAgICB0ZW1wbC5zY3JlZW4gID0gZ2RrX3NjcmVlbl9n
ZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAgdGVtcGwuZGVwdGggICA9
IGRlcHRoOwotICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29sb3I7Ci0gICAgaW50IG5WaXN1YWxz
OwotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdldFZpc3VhbEluZm8oZGlzcGxheSwg
VmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8IFZpc3VhbENsYXNzTWFzaywgJnRl
bXBsLCAmblZpc3VhbHMpOwotCi0gICAgaWYgKCFuVmlzdWFscykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGRlcHRoID09IDMyKSB7Ci0gICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8
IG5WaXN1YWxzOyArK2lkeCkgewotICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1h
dCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXksIHZpc3VhbEluZm9baWR4XS52aXN1
YWwpOwotICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBm
b3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKLSAgICAgICAgICAgICAgICAgKnZpc3VhbCA9IHZp
c3VhbEluZm9baWR4XS52aXN1YWw7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICAqdmlzdWFsID0gdmlzdWFsSW5m
b1swXS52aXN1YWw7Ci0KLSAgICBYRnJlZSh2aXN1YWxJbmZvKTsKLQotICAgIGlmICgqdmlzdWFs
KQotICAgICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgR0RLX1JPT1Rf
V0lORE9XKCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Ci19Ci0KLWdib29sZWFuIFBsdWdpblZpZXc6
OnBsdWdSZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyogdmlldykKLXsKLSAg
ICB2aWV3LT5tX3BsdWdBZGRlZCA9IGZhbHNlOwotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lk
IFBsdWdpblZpZXc6OnBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCogc29ja2V0LCBQbHVnaW5W
aWV3KiB2aWV3KQotewotICAgIEFTU0VSVF9VTlVTRUQoc29ja2V0LCBzb2NrZXQpOwotICAgIEFT
U0VSVCh2aWV3KTsKLSAgICB2aWV3LT5tX3BsdWdBZGRlZCA9IHRydWU7Ci0gICAgdmlldy0+dXBk
YXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0gICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewotICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkg
ewotICAgICAgICBHdGtXaWRnZXQqIHBhZ2VDbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIGlmIChtX25lZWRz
WEVtYmVkKSB7Ci0gICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IGlzIG5vdCBhbmNob3JlZCB0
aGUgc3RhcnR1cCBwcm9jZXNzIHdpbGwKLSAgICAgICAgICAgIC8vIGZhaWwgbWlzZXJhYmx5IGZv
ciBYRW1iZWQgcGx1Z2lucyBhIGJpdCBsYXRlciBvbiB3aGVuCi0gICAgICAgICAgICAvLyB3ZSB0
cnkgdG8gZ2V0IHRoZSBJRCBvZiBvdXIgd2luZG93IChzaW5jZSByZWFsaXplIHdpbGwKLSAgICAg
ICAgICAgIC8vIGZhaWwpLCBzbyBsZXQncyBqdXN0IGFib3J0IGhlcmUuCi0gICAgICAgICAgICBp
ZiAoIWd0a193aWRnZXRfZ2V0X3BhcmVudChwYWdlQ2xpZW50KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKLSAgICAgICAgICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFnZUNsaWVudCksIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCAicGx1Zy1hZGRlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgInBsdWctcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z1Jl
bW92ZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNldFBs
YXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcocGFnZUNsaWVudCwgMCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwotICAgICAgICBtX3BsdWdpbkRpc3BsYXkg
PSBnZXRQbHVnaW5EaXNwbGF5KG51bGxwdHIpOwotICAgIH0KLQotICAgIHNob3coKTsKLQotICAg
ICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KCk7Ci0gICAgICAgIHdzLT50eXBlID0gMDsKLQotICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwotICAg
ICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewotICAgICAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXpl
KHdpZGdldCk7Ci0gICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSkpKTsKLSAgICAgICAgICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7Ci0gICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJ
U1BMQVkod2luZG93KTsKLSAgICAgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNV
QUwoZ2RrX3dpbmRvd19nZXRfdmlzdWFsKHdpbmRvdykpOwotICAgICAgICAgICAgd3MtPmRlcHRo
ID0gZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ2RrX3dpbmRvd19nZXRfdmlzdWFsKHdpbmRvdykpOwot
ICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKHdzLT5kaXNwbGF5LCBH
REtfUk9PVF9XSU5ET1coKSwgd3MtPnZpc3VhbCwgQWxsb2NOb25lKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHR3aW5kb3cpKTsKLSAgICAg
ICAgICAgIHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54
dGRpc3BsYXk7Ci0gICAgICAgICAgICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dHZpc3VhbDsKLSAgICAgICAgICAgIHdzLT5kZXB0aCA9
IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHRkZXB0aDsKLSAg
ICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KS0+eHRjbGllbnQueHRjb2xvcm1hcDsKLSAgICAgICAgfQotICAgICAgICBYRmx1c2ggKHdzLT5k
aXNwbGF5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRv
d1R5cGVEcmF3YWJsZTsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNl
ZD8KLQotICAgICAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0
KCk7Ci0gICAgICAgIEdka1Zpc3VhbCogZ3Zpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92
aXN1YWwoZ3NjcmVlbik7Ci0KLSAgICAgICAgaWYgKGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1
YWwpID09IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1
aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKLSAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9y
bWFwKDMyLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKLSAgICAgICAgICAgIHdzLT5kZXB0aCA9
IDMyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX3Zpc3VhbCkgewotICAgICAgICAgICAg
Z2V0VmlzdWFsQW5kQ29sb3JtYXAoZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCksICZtX3Zp
c3VhbCwgJm1fY29sb3JtYXApOwotICAgICAgICAgICAgd3MtPmRlcHRoID0gZ2RrX3Zpc3VhbF9n
ZXRfZGVwdGgoZ3Zpc3VhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB3cy0+ZGlzcGxheSA9IEdE
S19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgICAgICB3
cy0+dmlzdWFsID0gbV92aXN1YWw7Ci0gICAgICAgIHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7
Ci0KLSAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsK
LSAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOwotICAgICAgICBtX25wV2luZG93LmhlaWdo
dCA9IC0xOwotICAgIH0KLQotICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOwotCi0gICAgLy8g
VE9ETyByZW1vdmUgaW4gZmF2b3Igb2YgbnVsbCBldmVudHMsIGxpa2UgbWFjIHBvcnQ/Ci0gICAg
aWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpKSkKLSAgICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0
TlBXaW5kb3dJZk5lZWRlZCgpLCBidXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0
IGZpcnN0IGdvCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybURlc3Ryb3koKQotewotICAgIGlmIChtX2RyYXdhYmxlKSB7Ci0gICAgICAgIFhGcmVlUGl4
bWFwKEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBtX2Ry
YXdhYmxlKTsKLSAgICAgICAgbV9kcmF3YWJsZSA9IDA7Ci0gICAgfQotCi0gICAgR3RrV2lkZ2V0
KiB3aWRnZXQgPSBwbGF0Zm9ybVdpZGdldCgpOwotICAgIGlmICh3aWRnZXQpIHsKLSAgICAgICAg
R3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQod2lkZ2V0KTsKLSAgICAg
ICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIocGFyZW50KSwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmZTQxNWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzEgKzAsMCBAQAotLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLQotICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAq
LwotIAotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBM
IDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBh
cmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEg
KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3
YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNl
bnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IElt
cGxlbWVudGF0aW9uLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcwotICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgotICogUG9ydGlvbnMgY3JlYXRl
ZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgotICogdGhl
IEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1
dG9yKHMpOgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAotICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0gKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKLSAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCi0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0gCi0vKgotICogVGhlIEd0a1h0Qmlu
IHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2VkCi0gKiBpbnNpZGUg
YSBHVEsgYXBwbGljYXRpb24uICAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgInhlbWJlZC5oIgotI2luY2x1ZGUgImd0azJ4
dGJpbi5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
I2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVu
aXN0ZC5oPgotCi0vKiBYbGliL1h0IHN0dWZmICovCi0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNp
bmNsdWRlIDxYMTEvWHV0aWwuaD4KLSNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KLSNpbmNsdWRlIDxY
MTEvSW50cmluc2ljLmg+Ci0jaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KLQotLy8gVGhpcyBp
cyB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBnZGtfdGhyZWFkc19sZWF2ZSBhbmQgZ2RrX3Ro
cmVhZHNfZW50ZXIuCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCi0KLS8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2lu
ZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKLSAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAq
LwotI3VuZGVmIERFQlVHX1hUQklOCi0KLSNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAotCi1z
dGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNz
ICprbGFzcyk7Ci1zdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChH
dGtYdEJpbiAgICAgICp4dGJpbik7Ci1zdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9y
ZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKLXN0YXRpYyB2b2lkICAgICAgICAg
ICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7Ci1zdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kaXNwb3NlICAgIChHT2JqZWN0ICAgICAgKm9i
amVjdCk7Ci0KLS8qIFh0IGF3YXJlIFhFbWJlZCAqLwotc3RhdGljIHZvaWQgICAgICAgeHRfY2xp
ZW50X2luaXQgICAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpOwotc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2NyZWF0ZSAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRlciwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApOwotc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X3VucmVhbGl6ZSAoWHRDbGllbnQqIHh0Y2xpZW50KTsKLXN0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7Ci1zdGF0aWMgdm9p
ZCAgICAgICB4dF9jbGllbnRfc2V0X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotc3RhdGlj
IHZvaWQgICAgICAgeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZl
bnQpOwotc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAo
V2lkZ2V0IHcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOwotc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyICAgICAgIChXaWRnZXQgdywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9k
YXRhLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFdmVudCAqZXZlbnQpOwotc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
KCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSApOwotc3RhdGljIHZvaWQgICAgICAgeHRf
YWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2Vy
X2RhdGEpOyAKLXN0YXRpYyB2b2lkICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRn
ZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJl
ZF9tZXNzYWdlIChYdENsaWVudCAqeHRjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIG1lc3NhZ2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBkZXRhaWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBkYXRhMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGRhdGEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9uZyB0aW1lKTsgIAotc3RhdGljIGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlz
cGxheSAqZGlzcGxheSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
RXJyb3JFdmVudCAqZXJyb3IpOwotLyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCi1zdGF0
aWMgdm9pZCAgICAgICB0cmFwX2Vycm9ycyh2b2lkKTsKLXN0YXRpYyBpbnQgICAgICAgIHVudHJh
cF9lcnJvcih2b2lkKTsKLXN0YXRpYyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChE
aXNwbGF5ICosIFhFcnJvckV2ZW50ICopOwotc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJv
cl9jb2RlID0gMDsKLQotc3RhdGljIEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxM
OwotCi1zdGF0aWMgRGlzcGxheSAgICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOwotc3RhdGljIFN0
cmluZyAgICAgICAgICAqZmFsbGJhY2sgPSBOVUxMOwotc3RhdGljIGdib29sZWFuICAgICAgICAg
eHRfaXNfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKLXN0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93
aWRnZXRzID0gMDsKLQotc3RhdGljIEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsK
LXN0YXRpYyBnaW50ICAgICAgICAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOwotc3RhdGlj
IGd1aW50ICAgICAgICAgICAgdGFnID0gMDsKLQotc3RhdGljIGdib29sZWFuCi14dF9ldmVudF9w
cmVwYXJlIChHU291cmNlKiAgc291cmNlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgKnRpbWVvdXQpCi17ICAgCi0gIFVOVVNFRF9QQVJBTShzb3VyY2VfZGF0YSk7Ci0gIFVOVVNF
RF9QQVJBTSh0aW1lb3V0KTsKLSAgaW50IG1hc2s7Ci0KLSAgZ2RrX3RocmVhZHNfZW50ZXIoKTsK
LSAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7Ci0gIGdka190aHJlYWRzX2xlYXZlKCk7Ci0K
LSAgcmV0dXJuIChnYm9vbGVhbiltYXNrOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXh0X2V2ZW50
X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCi17Ci0gIFVOVVNFRF9QQVJBTShzb3VyY2Vf
ZGF0YSk7Ci0KLSAgZ2RrX3RocmVhZHNfZW50ZXIoKTsKLQotICBpZiAoeHRfZXZlbnRfcG9sbF9m
ZC5yZXZlbnRzICYgR19JT19JTikgewotICAgIGludCBtYXNrOwotICAgIG1hc2sgPSBYUGVuZGlu
Zyh4dGRpc3BsYXkpOwotICAgIGdka190aHJlYWRzX2xlYXZlKCk7Ci0gICAgcmV0dXJuIChnYm9v
bGVhbiltYXNrOwotICB9Ci0KLSAgZ2RrX3RocmVhZHNfbGVhdmUoKTsKLSAgcmV0dXJuIEZBTFNF
OwotfSAgIAotCi1zdGF0aWMgZ2Jvb2xlYW4KLXh0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAg
c291cmNlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywK
LSAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKLXsKLSAgVU5VU0VEX1BB
UkFNKHNvdXJjZV9kYXRhKTsKLSAgVU5VU0VEX1BBUkFNKGNhbGxfYmFjayk7Ci0gIFVOVVNFRF9Q
QVJBTSh1c2VyX2RhdGEpOwotCi0gIFh0QXBwQ29udGV4dCBhYzsKLSAgaW50IGkgPSAwOwotCi0g
IGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNwbGF5KTsKLQotICBnZGtf
dGhyZWFkc19lbnRlcigpOwotCi0gIC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBoZXJl
LiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQotICAgKiBwaXBlLCBsaW1pdCBpdCB0byBY
VEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKLSAgICogWHRBcHBQcm9jZXNzRXZlbnQgc28g
dGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBubwotICAgKiB0aW1lciBw
cm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sgdGhh
dAotICAgKiBkb2VzIGl0LiAgKi8KLSAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRTICYm
IFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgewotICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBY
dElNWEV2ZW50KTsKLSAgfQotCi0gIGdka190aHJlYWRzX2xlYXZlKCk7Ci0KLSAgcmV0dXJuIFRS
VUU7ICAKLX0KLQotdHlwZWRlZiB2b2lkICgqR1NvdXJjZUZ1bmNzRmluYWxpemUpIChHU291cmNl
KiBzb3VyY2UpOwotCi1zdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50X2Z1bmNzID0gewotICB4
dF9ldmVudF9wcmVwYXJlLAotICB4dF9ldmVudF9jaGVjaywKLSAgeHRfZXZlbnRfZGlzcGF0Y2gs
Ci0gIChHU291cmNlRnVuY3NGaW5hbGl6ZSlnX2ZyZWUsCi0gIChHU291cmNlRnVuYylOVUxMLAot
ICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCi19OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXh0X2V2
ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBEaXNw
bGF5ICogZGlzcGxheTsKLSAgWHRBcHBDb250ZXh0IGFjOwotICBpbnQgZXZlbnRzVG9Qcm9jZXNz
ID0gMjA7Ci0KLSAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOwotICBhYyA9IFh0RGlz
cGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOwotCi0gIC8qIFdlIG5lZWQgdG8gcHJv
Y2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKLSAgICAgb25lIGV2
ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBvdGhl
ciBoYW5kCi0gICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50cyBj
b21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKLSAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJpZ2h0
IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAotICAgICBi
dXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9jZXNz
IHBsdWdpbnMuCi0gICovCi0gIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBlbmRp
bmcoYWMpKQotICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKLSAgcmV0dXJuIFRS
VUU7Ci19Ci0KLUdUeXBlCi1ndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBH
VHlwZSB4dGJpbl90eXBlID0gMDsKLQotICBpZiAoIXh0YmluX3R5cGUpIHsKLSAgICAgIHN0YXRp
YyBjb25zdCBHVHlwZUluZm8geHRiaW5faW5mbyA9Ci0gICAgICB7Ci0gICAgICAgIHNpemVvZiAo
R3RrWHRCaW5DbGFzcyksCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0KLSAgICAgICAg
KEdDbGFzc0luaXRGdW5jKWd0a194dGJpbl9jbGFzc19pbml0LAotICAgICAgICBOVUxMLAotICAg
ICAgICBOVUxMLAotCi0gICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAotICAgICAgICAwLAotICAg
ICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpZ3RrX3h0YmluX2luaXQsCi0gICAgICAgIE5VTEwKLSAg
ICAgIH07Ci0gICAgICB4dGJpbl90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1RLX1RZ
UEVfU09DS0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJH
dGtYdEJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0
YmluX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7
Ci0gIH0KLSAgcmV0dXJuIHh0YmluX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ndGtfeHRiaW5f
Y2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCi17Ci0gIEd0a1dpZGdldENsYXNzICp3
aWRnZXRfY2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAgICpvYmplY3RfY2xhc3M7Ci0KLSAgcGFyZW50
X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgd2lkZ2V0X2Ns
YXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOwotICB3aWRnZXRfY2xhc3MtPnJlYWxpemUg
PSBndGtfeHRiaW5fcmVhbGl6ZTsKLSAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfeHRi
aW5fdW5yZWFsaXplOwotCi0gIG9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7
Ci0gIG9iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGd0a194dGJpbl9kaXNwb3NlOwotfQotCi1zdGF0
aWMgdm9pZAotZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikKLXsKLSAgeHRiaW4tPnh0
ZGlzcGxheSA9IE5VTEw7Ci0gIHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKLSAgeHRiaW4t
Pnh0d2luZG93ID0gMDsKLSAgeHRiaW4tPnggPSAwOwotICB4dGJpbi0+eSA9IDA7Ci19Ci0KLXN0
YXRpYyB2b2lkCi1ndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCi17Ci0gIEd0
a1h0QmluICAgICAqeHRiaW47Ci0gIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
MjAwLCAyMDAgfTsKLSAgR3RrQWxsb2NhdGlvbiB3aWRnZXRfYWxsb2NhdGlvbjsKLQotI2lmZGVm
IERFQlVHX1hUQklOCi0gIHByaW50ZigiZ3RrX3h0YmluX3JlYWxpemUoKVxuIik7Ci0jZW5kaWYK
LQotICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdpZGdldCkpOwotCi0gIHh0Ymlu
ID0gR1RLX1hUQklOICh3aWRnZXQpOwotCi0gIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJl
Zm9yZSByZWFsaXplICovCi0gIGFsbG9jYXRpb24ud2lkdGggPSBnZGtfd2luZG93X2dldF93aWR0
aCh4dGJpbi0+cGFyZW50X3dpbmRvdyk7Ci0gIGFsbG9jYXRpb24uaGVpZ2h0ID0gZ2RrX3dpbmRv
d19nZXRfaGVpZ2h0KHh0YmluLT5wYXJlbnRfd2luZG93KTsKLSAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKLQotI2lmZGVmIERFQlVHX1hUQklOCi0gIHBy
aW50ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKLSNl
bmRpZgotCi0gIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmd2lkZ2V0X2FsbG9j
YXRpb24pOwotICB4dGJpbi0+d2lkdGggPSB3aWRnZXRfYWxsb2NhdGlvbi53aWR0aDsKLSAgeHRi
aW4tPmhlaWdodCA9IHdpZGdldF9hbGxvY2F0aW9uLmhlaWdodDsKLQotICAvKiB1c2UgR3RrU29j
a2V0J3MgcmVhbGl6ZSAqLwotICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNzKS0+cmVh
bGl6ZSkod2lkZ2V0KTsKLQotICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQgKi8KLSAg
eHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAotICAgICAgIGd0a19zb2NrZXRf
Z2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCi0gICAgICAgeHRiaW4tPmhlaWdodCwgCi0gICAg
ICAgeHRiaW4tPndpZHRoKTsKLSAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRiaW4tPnh0
Y2xpZW50LmNoaWxkX3dpZGdldCk7Ci0KLSAgZ2RrX2ZsdXNoKCk7Ci0KLSAgLyogbm93IHRoYXQg
d2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0LiAqLwot
ICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdpbmRvdyk7
Ci19Ci0KLQotCi1HdGtXaWRnZXQqCi1ndGtfeHRiaW5fbmV3IChHdGtXaWRnZXQgKnBhcmVudF93
aWRnZXQsIFN0cmluZyAqZikKLXsKLSAgR3RrWHRCaW4gKnh0YmluOwotICBncG9pbnRlciB1c2Vy
X2RhdGE7Ci0gIEdka1NjcmVlbiAqc2NyZWVuOwotICBHZGtWaXN1YWwqIHZpc3VhbDsKLSAgQ29s
b3JtYXAgY29sb3JtYXA7Ci0gIEdka1dpbmRvdyogcGFyZW50X3dpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyhwYXJlbnRfd2lkZ2V0KTsKLQotICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBO
VUxMKTsKLSAgeHRiaW4gPSBnX29iamVjdF9uZXcgKEdUS19UWVBFX1hUQklOLCBOVUxMKTsKLQot
ICBpZiAoIXh0YmluKQotICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxMOwotCi0gIGlmIChmKQot
ICAgIGZhbGxiYWNrID0gZjsKLQotICAvKiBJbml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCi0g
IHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKLQotICBzY3JlZW4gPSBndGtf
d2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50X3dpZGdldCk7Ci0gIHZpc3VhbCA9IGdka19zY3JlZW5f
Z2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKTsKLSAgY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAo
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5f
Z2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
REtfVklTVUFMX1hWSVNVQUwodmlzdWFsKSwgQWxsb2NOb25lKTsKLQotICB4dF9jbGllbnRfaW5p
dCgmKHh0YmluLT54dGNsaWVudCksIAotICAgICAgICAgICAgICAgICBHREtfVklTVUFMX1hWSVNV
QUwodmlzdWFsKSwKLSAgICAgICAgICAgICAgICAgY29sb3JtYXAsCi0gICAgICAgICAgICAgICAg
IGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCkpOwotCi0gIGlmICgheHRiaW4tPnh0Y2xpZW50
Lnh0ZGlzcGxheSkgewotICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBn
byBhbnkgZnVydGhlci4KLSAgICAgKiAgQmFpbCBvdXQuCi0gICAgICovCi0jaWZkZWYgREVCVUdf
WFRCSU4KLSAgICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJu
ZWQgTlVMTC5cbiIpOwotI2VuZGlmCi0gICAgZ19mcmVlICh4dGJpbik7Ci0gICAgcmV0dXJuIChH
dGtXaWRnZXQgKilOVUxMOwotICB9Ci0KLSAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmlu
ZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCi0gICAgIG1haW5sb29wICovCi0g
IGlmICgwID09IG51bV93aWRnZXRzKSB7Ci0gICAgaW50ICAgICAgICAgICBjbnVtYmVyOwotICAg
IC8qCi0gICAgICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4K
LSAgICAgKi8KLQotICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFs
cmVhZHkgYmVlbiBjYWxsZWQgKi8KLSAgICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRf
ZXZlbnRfZnVuY3MsIHNpemVvZihHU291cmNlKSk7Ci0gICAgICBpZiAoIWdzKSB7Ci0gICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0gICAgCi0gICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdz
LCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3Ms
IFRSVUUpOwotICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVM
TCk7Ci0jaWZkZWYgVk1TCi0gICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxh
eSk7Ci0jZWxzZQotICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7Ci0j
ZW5kaWYKLSAgICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKLSAgICB4dF9ldmVudF9w
b2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47IAotICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9
IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCi0KLSAgICBnX21haW5fY29udGV4
dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4dCopTlVMTCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ4dF9ldmVudF9wb2xsX2ZkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19QUklPUklUWV9MT1cpOwotICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwg
YW5kIHByb2Nlc3MgWHQgdGltZXJzICovCi0gICAgeHRfcG9sbGluZ190aW1lcl9pZCA9Ci0gICAg
ICBnX3RpbWVvdXRfYWRkKDI1LAotICAgICAgICAgICAgICAgICAgICAgIChHU291cmNlRnVuYyl4
dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgIHh0
ZGlzcGxheSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQoeHRfcG9sbGluZ190aW1lcl9p
ZCwgIltXZWJLaXRdIHh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2siKTsKLSAgfQotCi0g
IC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCi0gIG51bV93aWRnZXRzKys7Ci0KLSAgLyog
QnVpbGQgdGhlIGhpZXJhY2h5ICovCi0gIHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGll
bnQueHRkaXNwbGF5OwotICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQo
eHRiaW4pLCBwYXJlbnRfd2luZG93KTsKLSAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0Ymlu
LT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKLSAgaWYgKHVzZXJfZGF0YSkKLSAgICBndGtf
Y29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4p
KTsKLQotICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOwotfQotCi12b2lkCi1ndGtfeHRiaW5f
c2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpCi17Ci0g
IHh0YmluLT54ID0geDsKLSAgeHRiaW4tPnkgPSB5OwotCi0gIGlmIChndGtfd2lkZ2V0X2dldF9y
ZWFsaXplZCAoR1RLX1dJREdFVCh4dGJpbikpKQotICAgIGdka193aW5kb3dfbW92ZSAoZ3RrX3dp
ZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQgKHh0YmluKSksIHgsIHkpOwotfQotCi12b2lkCi1n
dGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKLSAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCkKLXsK
LSAgQXJnIGFyZ3NbMl07Ci0gIEd0a1h0QmluICp4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsK
LSAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotCi0jaWZkZWYgREVCVUdfWFRCSU4KLSAgcHJp
bnRmKCJndGtfeHRiaW5fcmVzaXplICVwICVkICVkXG4iLCAodm9pZCAqKXdpZGdldCwgd2lkdGgs
IGhlaWdodCk7Ci0jZW5kaWYKLQotICB4dGJpbi0+aGVpZ2h0ID0gaGVpZ2h0OwotICB4dGJpbi0+
d2lkdGggID0gd2lkdGg7Ci0KLSAgLy8gQXZvaWQgQmFkVmFsdWUgZXJyb3JzIGluIFh0U2V0VmFs
dWVzCi0gIGlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PTApIHsKLSAgICBoZWlnaHQgPSAxOwot
ICAgIHdpZHRoID0gMTsKLSAgfQotICBYdFNldEFyZyhhcmdzWzBdLCBYdE5oZWlnaHQsIGhlaWdo
dCk7Ci0gIFh0U2V0QXJnKGFyZ3NbMV0sIFh0TndpZHRoLCAgd2lkdGgpOwotICBYdFNldFZhbHVl
cyh4dGJpbi0+eHRjbGllbnQudG9wX3dpZGdldCwgYXJncywgMik7Ci0KLSAgLyogd2UgbmVlZCB0
byBzZW5kIGEgc2l6ZSBhbGxvY2F0ZSBzbyB0aGUgc29ja2V0IGtub3dzIGFib3V0IHRoZQotICAg
ICBzaXplIGNoYW5nZXMgKi8KLSAgYWxsb2NhdGlvbi54ID0geHRiaW4tPng7Ci0gIGFsbG9jYXRp
b24ueSA9IHh0YmluLT55OwotICBhbGxvY2F0aW9uLndpZHRoID0geHRiaW4tPndpZHRoOwotICBh
bGxvY2F0aW9uLmhlaWdodCA9IHh0YmluLT5oZWlnaHQ7Ci0KLSAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKHdpZGdldCwgJmFsbG9jYXRpb24pOwotfQotCi1zdGF0aWMgdm9pZAotZ3RrX3h0Ymlu
X3VucmVhbGl6ZSAoR3RrV2lkZ2V0ICpvYmplY3QpCi17Ci0gIEd0a1h0QmluICp4dGJpbjsKLSAg
R3RrV2lkZ2V0ICp3aWRnZXQ7Ci0KLSNpZmRlZiBERUJVR19YVEJJTgotICBwcmludGYoImd0a194
dGJpbl91bnJlYWxpemUoKVxuIik7Ci0jZW5kaWYKLQotICAvKiBndGtfb2JqZWN0X2Rlc3Ryb3ko
KSB3aWxsIGFscmVhZHkgaG9sZCBhIHJlZmNvdW50IG9uIG9iamVjdAotICAgKi8KLSAgeHRiaW4g
PSBHVEtfWFRCSU4ob2JqZWN0KTsKLSAgd2lkZ2V0ID0gR1RLX1dJREdFVChvYmplY3QpOwotCi0g
IGd0a193aWRnZXRfc2V0X3Zpc2libGUod2lkZ2V0LCBGQUxTRSk7Ci0gIGlmIChndGtfd2lkZ2V0
X2dldF9yZWFsaXplZCAod2lkZ2V0KSkgewotICAgIHh0X2NsaWVudF91bnJlYWxpemUoJih4dGJp
bi0+eHRjbGllbnQpKTsKLSAgfQotCi0gICgqR1RLX1dJREdFVF9DTEFTUyAocGFyZW50X2NsYXNz
KS0+dW5yZWFsaXplKSh3aWRnZXQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3RrX3h0YmluX2Rpc3Bv
c2UgKEdPYmplY3QgKm9iamVjdCkKLXsKLSAgR3RrWHRCaW4gKnh0YmluOwotCi0jaWZkZWYgREVC
VUdfWFRCSU4KLSAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKLSNlbmRpZgotCi0g
IGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAo
R1RLX0lTX1hUQklOIChvYmplY3QpKTsKLQotICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsK
LQotICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKLSAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRs
ZXIgKi8KLSAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOwotICAgIHh0
YmluLT54dHdpbmRvdyA9IDA7Ci0KLSAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVz
YWdlIGNvdW50ICovCi0KLSAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0
LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKLSAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5s
b29wICovCi0gICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKLSNpZmRlZiBERUJVR19YVEJJTgot
ICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxv
b3BcbiIpOwotI2VuZGlmCi0gICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5D
b250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7Ci0gICAgICBnX3NvdXJjZV9yZW1vdmUo
dGFnKTsKLQotICAgICAgZ19zb3VyY2VfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOwotICAg
ICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7Ci0gICAgfQotICB9Ci0KLSAgR19PQkpFQ1RfQ0xB
U1MocGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwotfQotCi0vKgotKiBGb2xsb3dpbmcg
aXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKLSov
Ci0KLS8qIEluaXRpYWwgWHQgcGx1Z2luICovCi1zdGF0aWMgdm9pZAoteHRfY2xpZW50X2luaXQo
IFh0Q2xpZW50ICogeHRjbGllbnQsIAotICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWws
IAotICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCi0gICAgICAgICAgICAgICAg
aW50IHh0ZGVwdGgpCi17Ci0gIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7Ci0gIGNoYXIgICAg
ICAgICAqbUFyZ3ZbMV07Ci0gIGludCAgICAgICAgICAgbUFyZ2MgPSAwOwotCi0gIC8qCi0gICAq
IEluaXRpYWxpemUgWHQgc3R1ZmYKLSAgICovCi0gIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVM
TDsKLSAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7Ci0gIHh0Y2xpZW50LT54dGRpc3Bs
YXkgID0gTlVMTDsKLSAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOwotICB4dGNsaWVudC0+
eHRjb2xvcm1hcCA9IDA7Ci0gIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKLQotICBpZiAoIXh0X2lz
X2luaXRpYWxpemVkKSB7Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICBwcmludGYoInN0YXJ0aW5n
IHVwIFh0IHN0dWZmXG4iKTsKLSNlbmRpZgotICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKLSAg
ICBhcHBfY29udGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKGZh
bGxiYWNrKQotICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFs
bGJhY2spOwotCi0gICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2Rr
X2dldF9kaXNwbGF5KCksIE5VTEwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFw
cGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBtQXJndik7Ci0gICAgaWYgKHh0ZGlzcGxheSkKLSAgICAg
IHh0X2lzX2luaXRpYWxpemVkID0gVFJVRTsKLSAgfQotICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9
IHh0ZGlzcGxheTsKLSAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKLSAgeHRjbGll
bnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9ybWFwOwotICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0
ZGVwdGg7Ci19Ci0KLS8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKLSogICovCi1zdGF0
aWMgdm9pZAoteHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAotICAgICAg
ICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKLSAgICAgICAgICAgICAgICAgICBpbnQg
aGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKLXsKLSAgaW50ICAgICAg
ICAgICBuOwotICBBcmcgICAgICAgICAgIGFyZ3NbNl07Ci0gIFdpZGdldCAgICAgICAgY2hpbGRf
d2lkZ2V0OwotICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7Ci0KLSNpZmRlZiBERUJVR19YVEJJ
TgotICBwcmludGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOwotI2VuZGlmCi0gIHRvcF93aWRn
ZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKLSAgeHRjbGllbnQtPnRvcF93
aWRnZXQgPSB0b3Bfd2lkZ2V0OwotCi0gIC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLwotICBu
ID0gMDsKLSAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOwotICBY
dFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKLSAgWHRTZXRWYWx1ZXMo
dG9wX3dpZGdldCwgYXJncywgbik7Ci0KLSAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdl
dCgiZm9ybSIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdp
ZGdldENsYXNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0
LCBOVUxMKTsKLQotICBuID0gMDsKLSAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhl
aWdodCk7bisrOwotICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsK
LSAgWHRTZXRBcmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBu
Kys7Ci0gIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCAp
OyBuKys7Ci0gIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xv
cm1hcCApOyBuKys7Ci0gIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisr
OwotICBYdFNldFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOwotCi0gIFhTeW5jKHh0Y2xp
ZW50LT54dGRpc3BsYXksIEZBTFNFKTsKLSAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRn
ZXQtPmNvcmUud2luZG93OwotICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7
Ci0KLSAgLyogdGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0
aGUgd2lkZ2V0ICovCi0jaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKLSAgWHRSZWdp
c3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAotICAgICAgICAgICAgICAgICAgICAg
ZW1iZWRkZXJpZCwKLSAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOwotI2Vsc2UKLSAg
X1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVkZGVyaWQsCi0gICAgICAgICAgICAgICAgICAgICB0b3Bf
d2lkZ2V0KTsKLSNlbmRpZgotICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKLQotICAv
KiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50cyAqLwotICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0
ZGlzcGxheSwgCi0gICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCi0gICAgICAg
ICAgICAgICAweDBGRkZGRik7Ci0gIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAw
KTsKLQotICBYdE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7Ci0gIHh0Y2xpZW50LT5jaGlsZF93
aWRnZXQgPSBjaGlsZF93aWRnZXQ7Ci0KLSAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCi0g
IFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgMHgw
RkZGRkYgJiB+UmVzaXplUmVkaXJlY3RNYXNrLAotICAgICAgICAgICAgICAgICAgICBUUlVFLCAK
LSAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5k
bGVyLCB4dGNsaWVudCk7Ci0gIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCi0gICAg
ICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFz
aywgCi0gICAgICAgICAgICAgICAgICAgIFRSVUUsIAotICAgICAgICAgICAgICAgICAgICAoWHRF
dmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAg
ICAgeHRjbGllbnQpOwotICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi14dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkK
LXsKLSNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgotICBYdFVucmVnaXN0ZXJEcmF3
YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVu
dC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cpOwotI2Vsc2UKLSAgX1h0VW5yZWdpc3RlcldpbmRv
dyh4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCi0gICAgICAgICAgICAgICAgICAg
ICAgeHRjbGllbnQtPnRvcF93aWRnZXQpOwotI2VuZGlmCi0KLSAgLyogZmx1c2ggdGhlIHF1ZXVl
IGJlZm9yZSB3ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93Ci0gICAg
IG9yIHdlIGNhbiBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KLSAgWFN5
bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRmFsc2UpOwotCi0gIHh0Y2xpZW50LT50b3Bfd2lkZ2V0
LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7Ci0gIFh0VW5yZWFsaXplV2lkZ2V0
KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgICAgICAgICAgICAKLXh0
X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKLXsKLSAgaWYoeHRjbGllbnQt
PnRvcF93aWRnZXQpIHsKLSAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRf
d2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZl
bnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7Ci0gICAgWHREZXN0
cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKLSAgICB4dGNsaWVudC0+dG9wX3dpZGdl
dCA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgICAgICAgICAKLXh0X2NsaWVudF9zZXRf
aW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLSAgdW5zaWduZWQg
bG9uZyBidWZmZXJbMl07Ci0KLSAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxh
eSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKLQotICBidWZmZXJbMV0gPSAwOyAg
ICAgICAgICAgICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCi0gIGJ1ZmZlclsxXSA9IGZsYWdz
OwotCi0gIFhDaGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1
ZyksCi0gICAgICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwKLSAgICAgICAg
ICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk
IGNoYXIgKilidWZmZXIsIDIpOwotfQotCi1zdGF0aWMgdm9pZAoteHRfY2xpZW50X2hhbmRsZV94
ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2
ZW50KQotewotICBVTlVTRURfUEFSQU0odyk7Ci0KLSAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENs
aWVudCopY2xpZW50X2RhdGE7Ci0gIHN3aXRjaCAoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdKQot
ICB7Ci0gIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElGWToKLSAgICBicmVhazsKLSAgY2FzZSBY
RU1CRURfV0lORE9XX0FDVElWQVRFOgotI2lmZGVmIERFQlVHX1hUQklOCi0gICAgcHJpbnRmKCJY
dCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEVcbiIpOwotI2VuZGlmCi0gICAgYnJl
YWs7Ci0gIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFOgotI2lmZGVmIERFQlVHX1hUQklO
Ci0gICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURVxuIik7
Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT046Ci0jaWZkZWYg
REVCVUdfWFRCSU4KLSAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZX09O
XG4iKTsKLSNlbmRpZgotICAgIGJyZWFrOwotICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PRkY6Ci0j
aWZkZWYgREVCVUdfWFRCSU4KLSAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFM
SVRZX09GRlxuIik7Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgY2FzZSBYRU1CRURfRk9DVVNfSU46
Ci0gIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKLSAgICB7Ci0gICAgICBYRXZlbnQgeGV2ZW50Owot
ICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4ZXZlbnQpKTsKLQotICAgICAgaWYoZXZl
bnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9GT0NVU19JTikgewotI2lmZGVmIERFQlVH
X1hUQklOCi0gICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgaW5cbiIpOwotI2VuZGlm
Ci0gICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzSW47Ci0gICAgICB9Ci0gICAgICBl
bHNlIHsKLSNpZmRlZiBERUJVR19YVEJJTgotICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZv
Y3VzIG91dFxuIik7Ci0jZW5kaWYKLSAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNP
dXQ7Ci0gICAgICB9Ci0KLSAgICAgIHhldmVudC54Zm9jdXMud2luZG93ID0gWHRXaW5kb3coeHRw
bHVnLT5jaGlsZF93aWRnZXQpOwotICAgICAgeGV2ZW50Lnhmb2N1cy5kaXNwbGF5ID0gWHREaXNw
bGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKLSAgICAgIFhTZW5kRXZlbnQoWHREaXNwbGF5KHh0
cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCi0gICAgICAgICAgICAgICAgIHhldmVudC54Zm9jdXMud2lu
ZG93LAotICAgICAgICAgICAgICAgICBGYWxzZSwgTm9FdmVudE1hc2ssCi0gICAgICAgICAgICAg
ICAgICZ4ZXZlbnQgKTsKLSAgICAgIFhTeW5jKCBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRn
ZXQpLCBGYWxzZSk7Ci0gICAgfQotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIGJyZWFrOwot
ICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLwotfQotCi1zdGF0aWMgdm9pZCAgICAgICAg
IAoteHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh
dGEsIFhFdmVudCAqZXZlbnQpCi17Ci0gIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNs
aWVudF9kYXRhOwotICAKLSAgc3dpdGNoKGV2ZW50LT50eXBlKQotICAgIHsKLSAgICBjYXNlIENs
aWVudE1lc3NhZ2U6Ci0gICAgICAvKiBIYW5kbGUgeGVtYmVkIG1lc3NhZ2UgKi8KLSAgICAgIGlm
IChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQotICAgICAgICAgICAgICAgICBYSW50ZXJu
QXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7Ci0gICAgICAgIHh0X2NsaWVudF9oYW5k
bGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEsIGV2ZW50KTsKLSAgICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IE1hcHBpbmdOb3RpZnk6Ci0gICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIFhFTUJFRF9NQVBQ
RUQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbm1hcE5vdGlmeToKLSAgICAgIHh0X2NsaWVu
dF9zZXRfaW5mbyAodywgMCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZvY3VzSW46Ci0gICAg
ICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9jdXNPdXQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEtleVByZXNzOgotI2lmZGVm
IERFQlVHX1hUQklOCi0gICAgICBwcmludGYoIktleSBQcmVzcyBHb3QhXG4iKTsKLSNlbmRpZgot
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0gLyogRW5kIG9m
IHN3aXRjaChldmVudC0+dHlwZSkgKi8KLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfeGVtYmVkX21l
c3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICBsb25nICAg
ICAgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkZXRhaWwsIAotICAg
ICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGExLCAgCi0gICAgICAgICAgICAgICAgICAg
ICBsb25nICAgICAgZGF0YTIsICAKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICB0aW1l
KSAgIAotewotICBYRXZlbnQgeGV2ZW50OyAKLSAgV2luZG93IHc9WHRXaW5kb3coeHRjbGllbnQt
PnRvcF93aWRnZXQpOwotICBEaXNwbGF5KiBkcHk9eHRjbGllbnQtPnh0ZGlzcGxheTsKLSAgaW50
IGVycm9yY29kZTsKLQotICBtZW1zZXQoJnhldmVudCwwLHNpemVvZih4ZXZlbnQpKTsKLSAgeGV2
ZW50LnhjbGllbnQud2luZG93ID0gdzsKLSAgeGV2ZW50LnhjbGllbnQudHlwZSA9IENsaWVudE1l
c3NhZ2U7Ci0gIHhldmVudC54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhJbnRlcm5BdG9tKGRweSwi
X1hFTUJFRCIsRmFsc2UpOwotICB4ZXZlbnQueGNsaWVudC5mb3JtYXQgPSAzMjsKLSAgeGV2ZW50
LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCi0gIHhldmVudC54Y2xpZW50LmRhdGEubFsxXSA9
IG1lc3NhZ2U7Ci0gIHhldmVudC54Y2xpZW50LmRhdGEubFsyXSA9IGRldGFpbDsgCi0gIHhldmVu
dC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOwotICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbNF0g
PSBkYXRhMjsKLQotICB0cmFwX2Vycm9ycyAoKTsKLSAgWFNlbmRFdmVudCAoZHB5LCB3LCBGYWxz
ZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOwotICBYU3luYyAoZHB5LEZhbHNlKTsKLQotICBpZigo
ZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICBw
cmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3IoJWQpISEhXG4iLGVycm9yY29kZSk7Ci0j
ZW5kaWYKLSAgfQotfQotCi1zdGF0aWMgaW50ICAgICAgICAgICAgIAotZXJyb3JfaGFuZGxlcihE
aXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJyb3IpCi17Ci0gIFVOVVNFRF9QQVJBTShk
aXNwbGF5KTsKLQotICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29kZTsKLSAg
cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICAgICAgICAgIAotdHJhcF9lcnJvcnModm9pZCkK
LXsKLSAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOwotICBvbGRfZXJyb3JfaGFuZGxlciA9IFhTZXRF
cnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Ci19Ci0KLXN0YXRpYyBpbnQgICAgICAgICAKLXVu
dHJhcF9lcnJvcih2b2lkKQotewotICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9oYW5kbGVy
KTsKLSAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7Ci0jaWZkZWYgREVCVUdfWFRCSU4KLSAgICBw
cmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2NvZGUpOwot
I2VuZGlmCi0gIH0KLSAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKLX0KLQotc3RhdGljIHZv
aWQgICAgICAgICAKLXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRl
ciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCi17Ci0gIERpc3BsYXkgKmRweSA9IFh0RGlzcGxh
eSh3KTsKLSAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOwotICBXaW5kb3cgd2luID0g
WHRXaW5kb3codyk7Ci0KLSAgc3dpdGNoKGV2ZW50LT50eXBlKQotICAgIHsKLSAgICBjYXNlIENy
ZWF0ZU5vdGlmeToKLSAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9PSB3aW4p
IHsKLSAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZlbnQtPnhj
cmVhdGV3aW5kb3cud2luZG93KTsKLSAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgIHh0X2Fk
ZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOwotICAgICAgfQotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBEZXN0cm95Tm90aWZ5OgotICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xp
c3RlbmVyKCB3LCB1c2VyX2RhdGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZXBhcmVudE5v
dGlmeToKLSAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgewotICAgICAg
ICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCi0gICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRv
d1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOwotICAgICAgICBpZiAoY2hp
bGQpCi0gICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2Rh
dGEpOwotICAgICAgfQotICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRvdyA9PSB3
aW4pIHsKLSAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCi0gICAgICB9Ci0gICAgICBl
bHNlIHsKLSAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLwotICAgICAgfQotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCdXR0b25SZWxlYXNlOgotI2lmIDAKLSAgICAgIFhTZXRJbnB1dEZv
Y3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRvUGFyZW50
LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKLSNlbmRpZgotICAgICAgc2VuZF94ZW1iZWRfbWVzc2Fn
ZSAoIHh0Y2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNU
X0ZPQ1VTLCAwLCAwLCAwLCAwKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCi19Ci0KLXN0YXRp
YyB2b2lkCi14dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhKQotewotICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwotICBsb25nIGV2ZW50bWFzazsKLSAg
WHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOwotCi0gIHRyYXBfZXJyb3JzICgpOwotICBY
R2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7Ci0g
IGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFz
ayB8IEJ1dHRvblJlbGVhc2VNYXNrOwotICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAotICAg
ICAgICAgICAgICAgWHRXaW5kb3codyksIAotICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKLQot
ICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKLSAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJl
Tm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKLSAgICAgICAgICAgICAgICAgICAgVFJV
RSwgCi0gICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNf
bGlzdGVuZXIsIAotICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7Ci0gIHVudHJhcF9lcnJv
cigpOwotfQotCi1zdGF0aWMgdm9pZAoteHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQotewotICB0cmFwX2Vycm9ycyAoKTsKLSAgWHRSZW1vdmVF
dmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
LCBUUlVFLCAKLSAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50
X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOwotCi0gIHVudHJhcF9lcnJvcigpOwotfQotCi1z
dGF0aWMgdm9pZAoteHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3Qs
IFh0UG9pbnRlciB1c2VyX2RhdGEpIAotewotICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJv
b3QpOwotICBXaW5kb3cgKmNoaWxkcmVuOwotICBXaW5kb3cgcm9vdCwgcGFyZW50OwotICBEaXNw
bGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOwotICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxk
cmVuOwotCi0gIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KLSAgeHRf
cmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKLSAgeHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKLSAgdHJhcF9lcnJvcnMoKTsKLSAg
aWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hp
bGRyZW4pKSB7Ci0gICAgdW50cmFwX2Vycm9yKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYo
dW50cmFwX2Vycm9yKCkpIAotICAgIHJldHVybjsKLQotICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsg
KytpKSB7Ci0gICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVu
W2ldKTsKLSAgICBpZiAoY2hpbGQpIAotICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUo
IGNoaWxkLCB1c2VyX2RhdGEpOwotICB9Ci0gIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7Ci0KLSAg
cmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0
YmluLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3Y2Q3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBA
Ci0vKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0gKiB2aW06IHNldCBleHBhbmR0YWIgc2hpZnR3aWR0aD0y
IHRhYnN0b3A9MjogKi8KLSAKLS8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKLSAq
IFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
LSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0gKiBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVy
IHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0
QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIg
b2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqIFBv
cnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMp
IDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBDb250cmlidXRvcihzKToKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotICogZWl0aGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BM
IiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
Mi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0gKiBvZiB0
aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRo
ZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotICogdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSAq
IGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLyAgIAotCi0jaWZu
ZGVmIF9fR1RLX1hUQklOX0hfXwotI2RlZmluZSBfX0dUS19YVEJJTl9IX18KLQotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxndGsvZ3Rr
eC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgotI2luY2x1ZGUgPFgxMS9Y
dXRpbC5oPgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaWZkZWYgTU9aSUxMQV9DTElFTlQKLSNp
bmNsdWRlICJuc2NvcmUuaCIKLSNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKLSNkZWZpbmUgR1RL
WFRCSU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKLSNlbHNlCi0jZGVmaW5lIEdUS1hUQklO
X0FQSSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCi0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIEdUS1hU
QklOX0FQSSh0eXBlKSB0eXBlCi0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4g
IkMiIHsKLSNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwotCi10eXBlZGVmIHN0cnVjdCBfR3RrWHRC
aW4gR3RrWHRCaW47Ci10eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNz
OwotCi0jZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9n
ZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCi0jZGVmaW5lIEdU
S19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgo
a2xhc3MpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1hUQklOLCBHdGtYdEJpbkNsYXNzKSkKLSNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKLSNkZWZp
bmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUgKChrbGFzcyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1RZUEVfWFRCSU4pKQotdHlwZWRlZiBzdHJ1Y3QgX1h0Q2xpZW50IFh0Q2xpZW50OwotCi1z
dHJ1Y3QgX1h0Q2xpZW50IHsKLSAgRGlzcGxheQkqeHRkaXNwbGF5OwotICBXaWRnZXQJdG9wX3dp
ZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAqLwotICBXaWRnZXQJY2hpbGRfd2lkZ2V0
OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLwotICBWaXN1YWwJKnh0dmlzdWFsOwotICBpbnQJ
CXh0ZGVwdGg7Ci0gIENvbG9ybWFwCXh0Y29sb3JtYXA7Ci0gIFdpbmRvdwlvbGR3aW5kb3c7Ci19
OwotCi1zdHJ1Y3QgX0d0a1h0QmluCi17Ci0gIEd0a1NvY2tldCAgICAgIGdzb2NrZXQ7Ci0gIEdk
a1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7Ci0gIERpc3BsYXkgICAgICAgKnh0ZGlzcGxheTsg
ICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLwotCi0gIFdpbmRvdyAgICAgICAgIHh0d2lu
ZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRvdyAqLwotICBnaW50ICAgICAgICAgICB4
LCB5OwotICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OwotICBYdENsaWVudAkgeHRjbGll
bnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1iZWQgKi8KLX07Ci0gIAotc3RydWN0IF9H
dGtYdEJpbkNsYXNzCi17Ci0gIEd0a1NvY2tldENsYXNzIHdpZGdldF9jbGFzczsKLX07Ci0KLUdU
S1hUQklOX0FQSShHVHlwZSkgICAgICAgZ3RrX3h0YmluX2dldF90eXBlICh2b2lkKTsKLUdUS1hU
QklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25ldyAoR3RrV2lkZ2V0ICpwYXJlbnRfd2lk
Z2V0LCBTdHJpbmcgKmYpOwotR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgICBndGtfeHRiaW5fc2V0
X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KTsKLUdUS1hUQklOX0FQ
SSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVp
Z2h0KTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMgewotICAgIFh0VHJhbnNsYXRpb25zICB0
cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8gVHJhbnNsYXRpb24gTWFuYWdlciAgICAq
LwotICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxlOyAgICAgICAgIC8qIHByb2NlZHVyZSBi
aW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLwotICAgIHN0cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVu
dF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIgc3RhdGUgcHRyICAgICAqLwotICAgIHVu
c2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOwotfSBYdFRNUmVjLCAqWHRUTTsgICAKLQotdHlw
ZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKLSAgICBXaWRnZXQgICAgICAgICAgc2VsZjsgICAgICAg
ICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNlbGYgICAgICAgICAgKi8KLSAgICBXaWRn
ZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAvKiBwb2ludGVyIHRvIFdpZGdldCdzIENs
YXNzUmVjICAgICAgKi8KLSAgICBXaWRnZXQgICAgICAgICAgcGFyZW50OyAgICAgICAgICAgICAv
KiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBYcm1OYW1lICAgICAg
ICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSBxdWFya2lmaWVk
ICAgKi8KLSAgICBCb29sZWFuICAgICAgICAgYmVpbmdfZGVzdHJveWVkOyAgICAvKiBtYXJrZWQg
Zm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KLSAgICBYdENhbGxiYWNrTGlzdCAgZGVzdHJv
eV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVuIHdpZGdldCBkZXN0cm95ZWQgKi8KLSAg
ICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAgICAgICAvKiBjb25zdHJhaW50IHJlY29y
ZCAgICAgICAgICAgICAgICAgKi8KLSAgICBQb3NpdGlvbiAgICAgICAgeCwgeTsgICAgICAgICAg
ICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAgICAgICAgICAgKi8KLSAgICBEaW1lbnNp
b24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3aW5kb3cgZGltZW5zaW9ucyAgICAgICAg
ICAgICAgICAgKi8KLSAgICBEaW1lbnNpb24gICAgICAgYm9yZGVyX3dpZHRoOyAgICAgICAvKiB3
aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAgKi8KLSAgICBCb29sZWFuICAgICAgICAg
bWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQgZ2VvbWV0cnkgbWFuYWdlZD8gICAgICAg
Ki8KLSAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZlOyAgICAgICAgICAvKiBpcyB3aWRnZXQg
c2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KLSAgICBCb29sZWFuICAgICAgICAgYW5jZXN0b3Jf
c2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBzZW5zaXRpdmU/ICAgICAgKi8KLSAgICBY
dEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAgICAvKiBwcml2YXRlIHRvIGV2ZW50IGRp
c3BhdGNoZXIgICAgICAgKi8KLSAgICBYdFRNUmVjICAgICAgICAgdG07ICAgICAgICAgICAgICAg
ICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAgICAgICAgKi8KLSAgICBYdFRyYW5zbGF0
aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2NlbGVyYXRvciB0cmFuc2xhdGlvbnMgICAg
ICAgICAgKi8KLSAgICBQaXhlbCAgICAgICAgICAgYm9yZGVyX3BpeGVsOyAgICAgICAvKiB3aW5k
b3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8KLSAgICBQaXhtYXAgICAgICAgICAgYm9y
ZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeG1hcCBvciBOVUxMICAgICAgKi8K
LSAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsgICAgICAgICAvKiBsaXN0IG9mIHBvcHVw
cyAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBDYXJkaW5hbCAgICAgICAgbnVtX3BvcHVwczsg
ICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAgICAgICAgICAgICAgKi8KLSAgICBTdHJp
bmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAg
ICAgICAgICAgICAgKi8KLSAgICBTY3JlZW4gICAgICAgICAgKnNjcmVlbjsgICAgICAgICAgICAv
KiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAgICAgKi8KLSAgICBDb2xvcm1hcCAgICAg
ICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1hcCAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KLSAgICBXaW5kb3cgICAgICAgICAgd2luZG93OyAgICAgICAgICAgICAvKiB3aW5kb3cg
SUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBDYXJkaW5hbCAgICAgICAgZGVwdGg7
ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVzIGluIHdpbmRvdyAgICAgICAgKi8KLSAg
ICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhlbDsgICAvKiB3aW5kb3cgYmFja2dyb3Vu
ZCBwaXhlbCAgICAgICAgICAgKi8KLSAgICBQaXhtYXAgICAgICAgICAgYmFja2dyb3VuZF9waXht
YXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAgb3IgTlVMTCAgKi8KLSAgICBCb29sZWFu
ICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBpcyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qg
b2NjbHVkZWQ/Ki8KLSAgICBCb29sZWFuICAgICAgICAgbWFwcGVkX3doZW5fbWFuYWdlZDsvKiBt
YXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAgKi8KLX0gQ29yZVBhcnQ7Ci0KLXR5cGVk
ZWYgc3RydWN0IF9XaWRnZXRSZWMgewotICAgIENvcmVQYXJ0ICAgIGNvcmU7Ci0gfSBXaWRnZXRS
ZWMsIENvcmVSZWM7ICAgCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmIC8qIF9fY3Bs
dXNwbHVzICovCi0jZW5kaWYgLyogX19HVEtfWFRCSU5fSF9fICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
Z3RrL3hlbWJlZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmY3YmU5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotICogdmltOmV4cGFuZHRh
YjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLwotIAotLyogKioqKiogQkVHSU4gTElDRU5TRSBC
TE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICog
VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vu
c2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGlt
aXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVy
IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAyMDAyCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogQ29udHJpYnV0b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQ
TCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2Yg
dGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0
aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0g
KiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhl
IExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotLyogWEVN
QkVEIG1lc3NhZ2VzICovCi0jZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAg
MAotI2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKLSNkZWZpbmUgWEVN
QkVEX1dJTkRPV19ERUFDVElWQVRFICAgICAgICAyCi0jZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZP
Q1VTICAgICAgICAgICAgMwotI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAg
IDQKLSNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFhF
TUJFRF9GT0NVU19ORVhUICAgICAgICAgICAgICAgNgotI2RlZmluZSBYRU1CRURfRk9DVVNfUFJF
ViAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAg
ICA4Ci0jZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQotI2RlZmluZSBY
RU1CRURfTU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFhFTUJFRF9NT0RBTElU
WV9PRkYgICAgICAgICAgICAgMTEKLQotLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KLSNkZWZp
bmUgWEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCi0jZGVmaW5lIFhFTUJFRF9H
VEtfVU5HUkFCX0tFWSAgICAgICAgICAgMTA5Ci0KLS8qIERldGFpbHMgZm9yICBYRU1CRURfRk9D
VVNfSU46ICovCi0jZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAotI2Rl
ZmluZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKLSNkZWZpbmUgWEVNQkVEX0ZP
Q1VTX0xBU1QgICAgICAgICAgICAgICAyCi0KLS8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8K
LSNkZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>