<?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>115650</bug_id>
          
          <creation_ts>2013-05-06 09:00:12 -0700</creation_ts>
          <short_desc>[GTK][WK2] Blocks when fetching plugins information</short_desc>
          <delta_ts>2014-02-27 09:53:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Claudio Saavedra">csaavedra</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>berto</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>csaavedra</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>svillar</cc>
    
    <cc>william.jon.mccann</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>885039</commentid>
    <comment_count>0</comment_count>
    <who name="Claudio Saavedra">csaavedra</who>
    <bug_when>2013-05-06 09:00:12 -0700</bug_when>
    <thetext>bool PluginProcessProxy::scanPlugin() is a synchronous method and it&apos;s using g_spawn_sync(), which blocks for a couple of seconds every now and then:

(gdb) back
#0  0x0000003a2c0ec653 in select () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003a2e489957 in g_spawn_sync (working_directory=&lt;optimized out&gt;,
    argv=&lt;optimized out&gt;, envp=&lt;optimized out&gt;, flags=&lt;optimized out&gt;,
    child_setup=&lt;optimized out&gt;, user_data=&lt;optimized out&gt;,
    standard_output=0x7fffffffd4e8, standard_error=0x0, exit_status=0x7fffffffd4bc,
    error=0x0) at gspawn.c:328
#2  0x0000003a55cd6cbf in WebKit::PluginProcessProxy::scanPlugin ()
   from /lib64/libwebkit2gtk-3.0.so.25
#3  0x0000003a55c481fa in WebKit::NetscapePluginModule::getPluginInfo ()
   from /lib64/libwebkit2gtk-3.0.so.25
#4  0x0000003a55ccbbb7 in WebKit::PluginInfoStore::loadPlugin ()
   from /lib64/libwebkit2gtk-3.0.so.25
#5  0x0000003a55ccc76b in WebKit::PluginInfoStore::loadPluginsIfNecessary ()
   from /lib64/libwebkit2gtk-3.0.so.25
#6  0x0000003a55cccb41 in WebKit::PluginInfoStore::plugins ()
   from /lib64/libwebkit2gtk-3.0.so.25
#7  0x0000003a55d28418 in WebKit::WebProcessProxy::getPlugins ()
   from /lib64/libwebkit2gtk-3.0.so.25
#8  0x0000003a55dddb0a in WebKit::WebProcessProxy::didReceiveSyncWebProcessProxyMessage
    () from /lib64/libwebkit2gtk-3.0.so.25
#9  0x0000003a55c1f9ec in CoreIPC::Connection::dispatchSyncMessage ()
   from /lib64/libwebkit2gtk-3.0.so.25
#10 0x0000003a55c1fb35 in CoreIPC::Connection::dispatchMessage ()
   from /lib64/libwebkit2gtk-3.0.so.25
#11 0x0000003a55c217b4 in CoreIPC::Connection::SyncMessageState::dispatchMessages ()
   from /lib64/libwebkit2gtk-3.0.so.25
#12 0x0000003a56c3f99d in WebCore::RunLoop::performWork ()
   from /lib64/libwebkit2gtk-3.0.so.25
#13 0x0000003a570ff039 in WebCore::RunLoop::queueWork ()
   from /lib64/libwebkit2gtk-3.0.so.25
#14 0x0000003a2e447f56 in g_main_dispatch (context=0x70b8d0) at gmain.c:3054
#15 g_main_context_dispatch (context=context@entry=0x70b8d0) at gmain.c:3630
#16 0x0000003a2e4482a8 in g_main_context_iterate (context=context@entry=0x70b8d0,
    block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;)
    at gmain.c:3701
#17 0x0000003a2e44834c in g_main_context_iteration (context=0x70b8d0,
    context@entry=0x0, may_block=may_block@entry=1) at gmain.c:3762
#18 0x0000003a30496564 in g_application_run (application=0x8cc060 [EphyShell],
    argc=argc@entry=1, argv=argv@entry=0x7fffffffdd48) at gapplication.c:1623
#19 0x000000000042ebbe in main (argc=1, argv=0x7fffffffdd48) at ephy-main.c:472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885043</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-06 09:09:43 -0700</bug_when>
    <thetext>It should only happen once, unless plugins need to be refreshed. The thing is that GetPluginInfo message is sync, so there&apos;s little we can do I guess. Maybe we can get plugins info in a thread at startup to make sure plugins info are cached in the UI process asap. I wonder if other ports do something like that or GetPluginInfo is just faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885057</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-05-06 09:34:07 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; It should only happen once, unless plugins need to be refreshed. The thing is that GetPluginInfo message is sync, so there&apos;s little we can do I guess. Maybe we can get plugins info in a thread at startup to make sure plugins info are cached in the UI process asap. I wonder if other ports do something like that or GetPluginInfo is just faster.

Another idea I had was to cache plugin information based on path, so that when you start the process again it doesn&apos;t block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885066</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-06 09:40:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; It should only happen once, unless plugins need to be refreshed. The thing is that GetPluginInfo message is sync, so there&apos;s little we can do I guess. Maybe we can get plugins info in a thread at startup to make sure plugins info are cached in the UI process asap. I wonder if other ports do something like that or GetPluginInfo is just faster.
&gt; 
&gt; Another idea I had was to cache plugin information based on path, so that when you start the process again it doesn&apos;t block.

I’d rather not do any caching in the web process since the UI process dictates whether plug-ins are blocked or not and that can change at any point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885071</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-05-06 09:44:58 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; I’d rather not do any caching in the web process since the UI process dictates whether plug-ins are blocked or not and that can change at any point.

We should be okay, since it looks like scanPlugin is running from the UI process here. I&apos;d prefer to keep caching there as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984237</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-25 01:43:35 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; It should only happen once, unless plugins need to be refreshed. The thing is that GetPluginInfo message is sync, so there&apos;s little we can do I guess. Maybe we can get plugins info in a thread at startup to make sure plugins info are cached in the UI process asap. I wonder if other ports do something like that or GetPluginInfo is just faster.
&gt; 
&gt; Another idea I had was to cache plugin information based on path, so that when you start the process again it doesn&apos;t block.

The problem then is when do we update the cache? Maybe we could save also the md5sum of the plugin in the cache or something like that, so that when a new version of the plugin is installed we update the metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984269</commentid>
    <comment_count>6</comment_count>
      <attachid>225136</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-25 05:01:04 -0800</bug_when>
    <thetext>Created attachment 225136
Patch

This patch uses a simple GKeyFile as persistent cache for the plugins metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984270</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-25 05:02:33 -0800</bug_when>
    <thetext>I&apos;m using the mtime for now, to decide when to update the cache, if you think that&apos;s not enough we could also check the file size, or maybe use the md5sum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984281</commentid>
    <comment_count>8</comment_count>
      <attachid>225140</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-25 05:53:55 -0800</bug_when>
    <thetext>Created attachment 225140
Try to fix mac build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985100</commentid>
    <comment_count>9</comment_count>
      <attachid>225356</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 04:30:23 -0800</bug_when>
    <thetext>Created attachment 225356
Patch

Updated patch to include a schema version so that if we add more metadata in the future, we don&apos;t use old files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985159</commentid>
    <comment_count>10</comment_count>
      <attachid>225356</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-02-27 07:49:58 -0800</bug_when>
    <thetext>Comment on attachment 225356
Patch

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

LGTM!

&gt; Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp:87
&gt; +    g_file_set_contents(m_cachePath.get(), data.get(), dataLength, nullptr);

I guess we don&apos;t have to be concerned about multiple webkit clients trying to write to the file at the same time since this is atomic, right?

&gt; Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp:135
&gt; +    // Save the cache file in an idle to make sure it happens in the main thread and
&gt; +    // it&apos;s done only once when this is called multiple times in a very short time.
&gt; +    if (m_saveToFileIdleId)
&gt; +        return;

I assume this is called from a single thread, so we don&apos;t need to perform any locking of the m_saveToFileIdleId member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985175</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 08:22:13 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 225356 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225356&amp;action=review
&gt; 
&gt; LGTM!

Thanks for the review.

&gt; &gt; Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp:87
&gt; &gt; +    g_file_set_contents(m_cachePath.get(), data.get(), dataLength, nullptr);
&gt; 
&gt; I guess we don&apos;t have to be concerned about multiple webkit clients trying to write to the file at the same time since this is atomic, right?

This is only run in the main thread, because other threads &quot;send&quot; the task to the main thread using g_idle (the other threads that can run this use the same main context).

&gt; &gt; Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp:135
&gt; &gt; +    // Save the cache file in an idle to make sure it happens in the main thread and
&gt; &gt; +    // it&apos;s done only once when this is called multiple times in a very short time.
&gt; &gt; +    if (m_saveToFileIdleId)
&gt; &gt; +        return;
&gt; 
&gt; I assume this is called from a single thread, so we don&apos;t need to perform any locking of the m_saveToFileIdleId member.

In this case we could probably use a mutex to be extra sure, I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985178</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-02-27 08:31:05 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; &gt; I guess we don&apos;t have to be concerned about multiple webkit clients trying to write to the file at the same time since this is atomic, right?
&gt; 
&gt; This is only run in the main thread, because other threads &quot;send&quot; the task to the main thread using g_idle (the other threads that can run this use the same main context).

I think he&apos;s concerned about multiple applications running that are all using WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985179</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 08:33:59 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; 
&gt; &gt; &gt; I guess we don&apos;t have to be concerned about multiple webkit clients trying to write to the file at the same time since this is atomic, right?
&gt; &gt; 
&gt; &gt; This is only run in the main thread, because other threads &quot;send&quot; the task to the main thread using g_idle (the other threads that can run this use the same main context).
&gt; 
&gt; I think he&apos;s concerned about multiple applications running that are all using WebKit.

Oh!, good point, we should make sure that the save is atomic, indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985180</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 08:36:08 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; 
&gt; &gt; &gt; &gt; I guess we don&apos;t have to be concerned about multiple webkit clients trying to write to the file at the same time since this is atomic, right?
&gt; &gt; &gt; 
&gt; &gt; &gt; This is only run in the main thread, because other threads &quot;send&quot; the task to the main thread using g_idle (the other threads that can run this use the same main context).
&gt; &gt; 
&gt; &gt; I think he&apos;s concerned about multiple applications running that are all using WebKit.
&gt; 
&gt; Oh!, good point, we should make sure that the save is atomic, indeed.

g_file_set_contents is atomic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985193</commentid>
    <comment_count>15</comment_count>
      <attachid>225375</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 09:09:01 -0800</bug_when>
    <thetext>Created attachment 225375
Updated patch using a mutex</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985221</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-02-27 09:53:54 -0800</bug_when>
    <thetext>Committed r164808: &lt;http://trac.webkit.org/changeset/164808&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225136</attachid>
            <date>2014-02-25 05:01:04 -0800</date>
            <delta_ts>2014-02-25 05:53:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-plugins-cache.diff</filename>
            <type>text/plain</type>
            <size>15870</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NmZmYTdkLi5hYjNkZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMDItMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW1dLMl0gQmxvY2tzIHdoZW4gZmV0Y2hpbmcgcGx1Z2lucyBpbmZv
cm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE1NjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIGEgcGVyc2lzdGVudCBjYWNoZSB0byBzdG9yZSB0aGUgcGx1Z2lucyBtZXRhZGF0YSB0byBh
dm9pZAorICAgICAgICBoYXZpbmcgdG8gbG9hZCBhbGwgdGhlIHBsdWdpbnMgZXZlcnl0aW1lIGEg
cGx1Z2luIGlzIHVzZWQgZm9yIHRoZQorICAgICAgICBmaXJzdCB0aW1lLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbik6IE1ha2UgdGhpcworICAgICAg
ICBtZXRob2QgcHVibGljLgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6
YnVpbGRNSU1FRGVzY3JpcHRpb24pOiBBZGRlZCB0aGlzCisgICAgICAgIGhlbHBlciB0byBidWls
ZCB0aGUgTUlNRSBkZXNjcmlwdGlvbiBzdHJpbmcuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdp
bnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5JbmZvQ2FjaGU6OnNoYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6
UGx1Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp+UGx1
Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9G
aWxlSWRsZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZl
VG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpnZXRQbHVnaW5JbmZv
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5JbmZvKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyk6IENo
ZWNrIGZpcnN0IGlmIHdlIGhhdmUKKyAgICAgICAgbWV0YWRhdGEgb2YgdGhlIHBsdWdpbiBpbiB0
aGUgY2FjaGUgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgaWYgd2UKKyAgICAgICAgbG9hZGVkIHRoZSBw
bHVnaW4gdG8gZ2V0IGl0cyBtZXRhZGF0YS4KKwogMjAxNC0wMi0xNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1h
a2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBjMjk5YjFmLi41YWJlMmViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTI2LDYgKzEyNiw3IEBAIGxpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfQ1BQCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Ob3RpZmljYXRpb25zIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggNzkwY2Y3Yy4uY2JhODBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC04NzAsNiArODcwLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFu
YWdlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5J
bmZvQ2FjaGUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1
Z2luSW5mb0NhY2hlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgv
UGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL3VuaXgvUGx1Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGM5
NjFmMDkuLmY3ZjAxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNDYsNiArMjQ2
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXJD
bGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2Vi
U291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCiAKKyAgICBVSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAorCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5p
eC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1
Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAKIApAQCAtNDA3LDYgKzQwOSw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nl
c3MvQVBJL2NwcC9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrIgog
ICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291
cCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvZ3RrIgogICAgICIke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3Mv
c291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmgKaW5kZXggMzNiN2I4NS4uZDJhOTU5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1pbWVDbGFzc0luZm87Cit9CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBSYXdQbHVnaW5NZXRhRGF0YTsKQEAgLTY3LDYgKzcxLDggQEAgcHVibGlj
OgogCiAjaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShYMTEpCiAgICAgc3RhdGljIGJvb2wgc2NhblBs
dWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgpOworICAgIHN0YXRpYyB2b2lkIHBhcnNlTUlN
RURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uLCBWZWN0b3I8V2ViQ29y
ZTo6TWltZUNsYXNzSW5mbz4mIHJlc3VsdCk7CisgICAgc3RhdGljIFN0cmluZyBidWlsZE1JTUVE
ZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8V2ViQ29yZTo6TWltZUNsYXNzSW5mbz4mKTsKICNlbmRp
ZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAK
aW5kZXggNDcxNTc0Ni4uOGQ1OWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5N
b2R1bGVYMTEuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC02
Nyw3ICs2OCw3IEBAIFN0ZG91dERldk51bGxSZWRpcmVjdG9yOjp+U3Rkb3V0RGV2TnVsbFJlZGly
ZWN0b3IoKQogfQogCiAKLXN0YXRpYyB2b2lkIHBhcnNlTUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0
cmluZyYgbWltZURlc2NyaXB0aW9uLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mIHJlc3VsdCkKK3Zv
aWQgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnBhcnNlTUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmlu
ZyYgbWltZURlc2NyaXB0aW9uLCBWZWN0b3I8TWltZUNsYXNzSW5mbz4mIHJlc3VsdCkKIHsKICAg
ICBBU1NFUlRfQVJHKHJlc3VsdCwgcmVzdWx0LmlzRW1wdHkoKSk7CiAKQEAgLTk0LDYgKzk1LDMy
IEBAIHN0YXRpYyB2b2lkIHBhcnNlTUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURl
c2NyaXB0aW9uLCBWZWN0b3I8TWltZUNsYXNzCiAgICAgfQogfQogCitTdHJpbmcgTmV0c2NhcGVQ
bHVnaW5Nb2R1bGU6OmJ1aWxkTUlNRURlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvPiYgbWltZURlc2NyaXB0aW9uKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKwor
ICAgIHNpemVfdCBtaW1lSW5mb0NvdW50ID0gbWltZURlc2NyaXB0aW9uLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1pbWVJbmZvQ291bnQ7ICsraSkgeworICAgICAgICBjb25z
dCBNaW1lQ2xhc3NJbmZvJiBtaW1lSW5mbyA9IG1pbWVEZXNjcmlwdGlvbltpXTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQobWltZUluZm8udHlwZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc6
Jyk7CisKKyAgICAgICAgc2l6ZV90IGV4dGVuc2lvbnNDb3VudCA9IG1pbWVJbmZvLmV4dGVuc2lv
bnMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV4dGVuc2lvbnNDb3Vu
dDsgKytqKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtaW1lSW5mby5leHRlbnNpb25z
W2pdKTsKKyAgICAgICAgICAgIGlmIChqICE9IGV4dGVuc2lvbnNDb3VudCAtIDEpCisgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJywnKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVy
LmFwcGVuZCgnOicpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1pbWVJbmZvLmRlc2MpOwor
ICAgICAgICBpZiAoaSAhPSBtaW1lSW5mb0NvdW50IC0gMSkKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCc7Jyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30K
KwogYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mb0ZvckxvYWRlZFBsdWdp
bihSYXdQbHVnaW5NZXRhRGF0YSYgbWV0YURhdGEpCiB7CiAgICAgQVNTRVJUKG1faXNJbml0aWFs
aXplZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsv
UGx1Z2luSW5mb0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0
ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU4YTdiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb0NhY2hlLmgiCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKworI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGx1Z2luSW5mb0NhY2hlJiBQbHVnaW5JbmZvQ2FjaGU6
OnNoYXJlZCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBsdWdpbkluZm9DYWNoZT4g
cGx1Z2luSW5mb0NhY2hlOworICAgIHJldHVybiBwbHVnaW5JbmZvQ2FjaGU7Cit9CisKK1BsdWdp
bkluZm9DYWNoZTo6UGx1Z2luSW5mb0NhY2hlKCkKKyAgICA6IG1fY2FjaGVGaWxlKGdfa2V5X2Zp
bGVfbmV3KCkpCisgICAgLCBtX2NhY2hlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJf
Y2FjaGVfZGlyKCksICJ3ZWJraXRndGsiLCAicGx1Z2lucyIsIG51bGxwdHIpKQorICAgICwgbV9z
YXZlVG9GaWxlSWRsZUlkKDApCit7CisgICAgZ19rZXlfZmlsZV9sb2FkX2Zyb21fZmlsZShtX2Nh
Y2hlRmlsZS5nZXQoKSwgbV9jYWNoZVBhdGguZ2V0KCksIEdfS0VZX0ZJTEVfTk9ORSwgbnVsbHB0
cik7Cit9CisKK1BsdWdpbkluZm9DYWNoZTo6flBsdWdpbkluZm9DYWNoZSgpCit7CisgICAgaWYg
KG1fc2F2ZVRvRmlsZUlkbGVJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zYXZlVG9G
aWxlSWRsZUlkKTsKKyAgICAgICAgc2F2ZVRvRmlsZSgpOworICAgIH0KK30KKworZ2Jvb2xlYW4g
UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlSWRsZUNhbGxiYWNrKFBsdWdpbkluZm9DYWNoZSog
Y2FjaGUpCit7CisgICAgY2FjaGUtPnNhdmVUb0ZpbGUoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3ZvaWQgUGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlKCkKK3sKKyAgICBtX3NhdmVUb0Zp
bGVJZGxlSWQgPSAwOworCisgICAgZ3NpemUgZGF0YUxlbmd0aDsKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IGRhdGEoZ19rZXlfZmlsZV90b19kYXRhKG1fY2FjaGVGaWxlLmdldCgpLCAmZGF0YUxlbmd0
aCwgbnVsbHB0cikpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19m
aWxlX3NldF9jb250ZW50cyhtX2NhY2hlUGF0aC5nZXQoKSwgZGF0YS5nZXQoKSwgZGF0YUxlbmd0
aCwgbnVsbHB0cik7Cit9CisKK2Jvb2wgUGx1Z2luSW5mb0NhY2hlOjpnZXRQbHVnaW5JbmZvKGNv
bnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQoreworICAg
IENTdHJpbmcgcGx1Z2luR3JvdXAgPSBwbHVnaW5QYXRoLnV0ZjgoKTsKKyAgICBpZiAoIWdfa2V5
X2ZpbGVfaGFzX2dyb3VwKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgIGlm
ICghV2ViQ29yZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGx1Z2luUGF0aCwgbGFzdE1vZGlm
aWVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHRpbWVfdCBjYWNoZWRMYXN0TW9kaWZp
ZWQgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KGdfa2V5X2ZpbGVfZ2V0X3VpbnQ2NChtX2NhY2hlRmls
ZS5nZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAibXRpbWUiLCBudWxscHRyKSk7CisgICAgaWYg
KGxhc3RNb2RpZmllZCAhPSBjYWNoZWRMYXN0TW9kaWZpZWQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHBsdWdpbi5wYXRoID0gcGx1Z2luUGF0aDsKKyAgICBwbHVnaW4uaW5mby5maWxl
ID0gV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKHBsdWdpblBhdGgpOworCisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBzdHJpbmdWYWx1ZShnX2tleV9maWxlX2dldF9zdHJpbmcobV9jYWNoZUZpbGUuZ2V0
KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm5hbWUiLCBudWxscHRyKSk7CisgICAgcGx1Z2luLmlu
Zm8ubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nVmFsdWUuZ2V0KCkpOworCisgICAgc3Ry
aW5nVmFsdWUucmVzZXQoZ19rZXlfZmlsZV9nZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBw
bHVnaW5Hcm91cC5kYXRhKCksICJkZXNjcmlwdGlvbiIsIG51bGxwdHIpKTsKKyAgICBwbHVnaW4u
aW5mby5kZXNjID0gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmdWYWx1ZS5nZXQoKSk7CisKKyAgICBz
dHJpbmdWYWx1ZS5yZXNldChnX2tleV9maWxlX2dldF9zdHJpbmcobV9jYWNoZUZpbGUuZ2V0KCks
IHBsdWdpbkdyb3VwLmRhdGEoKSwgIm1pbWUtZGVzY3JpcHRpb24iLCBudWxscHRyKSk7CisgICAg
TmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnBhcnNlTUlNRURlc2NyaXB0aW9uKFN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nVmFsdWUuZ2V0KCkpLCBwbHVnaW4uaW5mby5taW1lcyk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQbHVnaW5JbmZvQ2FjaGU6OnVwZGF0ZVBsdWdpbkluZm8oY29uc3Qg
U3RyaW5nJiBwbHVnaW5QYXRoLCBjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCit7Cisg
ICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVNb2RpZmlj
YXRpb25UaW1lKHBsdWdpblBhdGgsIGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTdHJpbmcgcGx1Z2luR3JvdXAgPSBwbHVnaW5QYXRoLnV0ZjgoKTsKKyAgICBnX2tleV9m
aWxlX3NldF91aW50NjQobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm10
aW1lIiwgc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4obGFzdE1vZGlmaWVkKSk7CisgICAgZ19rZXlfZmls
ZV9zZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJuYW1l
IiwgcGx1Z2luLmluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX2tleV9maWxlX3NldF9z
dHJpbmcobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgImRlc2NyaXB0aW9u
IiwgcGx1Z2luLmluZm8uZGVzYy51dGY4KCkuZGF0YSgpKTsKKworICAgIFN0cmluZyBtaW1lRGVz
Y3JpcHRpb24gPSBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6YnVpbGRNSU1FRGVzY3JpcHRpb24ocGx1
Z2luLmluZm8ubWltZXMpOworICAgIGdfa2V5X2ZpbGVfc2V0X3N0cmluZyhtX2NhY2hlRmlsZS5n
ZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAibWltZS1kZXNjcmlwdGlvbiIsIG1pbWVEZXNjcmlw
dGlvbi51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIFNhdmUgdGhlIGNhY2hlIGZpbGUgaW4gYW4g
aWRsZSB0byBtYWtlIHN1cmUgaXQgaGFwcGVucyBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kCisgICAg
Ly8gaXQncyBkb25lIG9ubHkgb25jZSB3aGVuIHRoaXMgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVz
IGluIGEgdmVyeSBzaG9ydCB0aW1lLgorICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlSWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2F2ZVRvRmlsZUlkbGVJZCA9IGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oUGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlSWRsZUNh
bGxiYWNrKSwgdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzk3YzNjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaApAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUGx1Z2luSW5mb0NhY2hlX2gKKyNkZWZpbmUgUGx1Z2luSW5mb0NhY2hlX2gKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCisjaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5m
by5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBsdWdpbklu
Zm9DYWNoZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luSW5mb0NhY2hlKTsKKyAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UGx1Z2luSW5mb0NhY2hlPjsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGx1Z2luSW5mb0NhY2hlJiBzaGFyZWQoKTsKKworICAgIGJvb2wgZ2V0UGx1
Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mKTsKKyAg
ICB2b2lkIHVwZGF0ZVBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjb25zdCBQ
bHVnaW5Nb2R1bGVJbmZvJik7CisKK3ByaXZhdGU6CisgICAgUGx1Z2luSW5mb0NhY2hlKCk7Cisg
ICAgflBsdWdpbkluZm9DYWNoZSgpOworCisgICAgdm9pZCBzYXZlVG9GaWxlKCk7CisgICAgc3Rh
dGljIGdib29sZWFuIHNhdmVUb0ZpbGVJZGxlQ2FsbGJhY2soUGx1Z2luSW5mb0NhY2hlKik7CisK
KyAgICBHVW5pcXVlUHRyPEdLZXlGaWxlPiBtX2NhY2hlRmlsZTsKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IG1fY2FjaGVQYXRoOworICAgIHVuc2lnbmVkIG1fc2F2ZVRvRmlsZUlkbGVJZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisKKyNlbmRpZiAvLyBQbHVnaW5JbmZvQ2FjaGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5p
eC5jcHAKaW5kZXggMzcyNjQwMS4uYTk2ODU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3Bw
CkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAi
UGx1Z2luSW5mb0NhY2hlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtOTgsNyArMTAyLDE4IEBAIFZlY3RvcjxTdHJpbmc+IFBs
dWdpbkluZm9TdG9yZTo6aW5kaXZpZHVhbFBsdWdpblBhdGhzKCkKIAogYm9vbCBQbHVnaW5JbmZv
U3RvcmU6OmdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1
bGVJbmZvJiBwbHVnaW4pCiB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChQbHVnaW5JbmZv
Q2FjaGU6OnNoYXJlZCgpLmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdp
bkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkgeworICAgICAgICBQbHVnaW5JbmZvQ2FjaGU6OnNo
YXJlZCgpLnVwZGF0ZVBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgcmV0dXJuIE5l
dHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbik7Cisj
ZW5kaWYKIH0KIAogYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnNob3VsZFVzZVBsdWdpbihWZWN0b3I8
UGx1Z2luTW9kdWxlSW5mbz4mIC8qYWxyZWFkeUxvYWRlZFBsdWdpbnMqLywgY29uc3QgUGx1Z2lu
TW9kdWxlSW5mbyYgLypwbHVnaW4qLykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225140</attachid>
            <date>2014-02-25 05:53:55 -0800</date>
            <delta_ts>2014-02-27 04:30:23 -0800</delta_ts>
            <desc>Try to fix mac build</desc>
            <filename>wk2-plugins-cache2.diff</filename>
            <type>text/plain</type>
            <size>15871</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NmZmYTdkLi5hYjNkZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMDItMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW1dLMl0gQmxvY2tzIHdoZW4gZmV0Y2hpbmcgcGx1Z2lucyBpbmZv
cm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE1NjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIGEgcGVyc2lzdGVudCBjYWNoZSB0byBzdG9yZSB0aGUgcGx1Z2lucyBtZXRhZGF0YSB0byBh
dm9pZAorICAgICAgICBoYXZpbmcgdG8gbG9hZCBhbGwgdGhlIHBsdWdpbnMgZXZlcnl0aW1lIGEg
cGx1Z2luIGlzIHVzZWQgZm9yIHRoZQorICAgICAgICBmaXJzdCB0aW1lLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbik6IE1ha2UgdGhpcworICAgICAg
ICBtZXRob2QgcHVibGljLgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6
YnVpbGRNSU1FRGVzY3JpcHRpb24pOiBBZGRlZCB0aGlzCisgICAgICAgIGhlbHBlciB0byBidWls
ZCB0aGUgTUlNRSBkZXNjcmlwdGlvbiBzdHJpbmcuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdp
bnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5JbmZvQ2FjaGU6OnNoYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6
UGx1Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp+UGx1
Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9G
aWxlSWRsZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZl
VG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpnZXRQbHVnaW5JbmZv
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5JbmZvKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyk6IENo
ZWNrIGZpcnN0IGlmIHdlIGhhdmUKKyAgICAgICAgbWV0YWRhdGEgb2YgdGhlIHBsdWdpbiBpbiB0
aGUgY2FjaGUgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgaWYgd2UKKyAgICAgICAgbG9hZGVkIHRoZSBw
bHVnaW4gdG8gZ2V0IGl0cyBtZXRhZGF0YS4KKwogMjAxNC0wMi0xNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1h
a2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBjMjk5YjFmLi41YWJlMmViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTI2LDYgKzEyNiw3IEBAIGxpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfQ1BQCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Ob3RpZmljYXRpb25zIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggNzkwY2Y3Yy4uY2JhODBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC04NzAsNiArODcwLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFu
YWdlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5J
bmZvQ2FjaGUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1
Z2luSW5mb0NhY2hlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgv
UGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL3VuaXgvUGx1Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGM5
NjFmMDkuLmY3ZjAxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNDYsNiArMjQ2
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXJD
bGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2Vi
U291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCiAKKyAgICBVSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAorCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5p
eC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1
Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAKIApAQCAtNDA3LDYgKzQwOSw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nl
c3MvQVBJL2NwcC9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrIgog
ICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291
cCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvZ3RrIgogICAgICIke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3Mv
c291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmgKaW5kZXggMzNiN2I4NS4uZmI1ZTg4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBNaW1lQ2xhc3NJbmZvOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgUmF3UGx1Z2luTWV0YURhdGE7CkBAIC02Nyw2ICs3MSw4IEBAIHB1Ymxp
YzoKIAogI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoWDExKQogICAgIHN0YXRpYyBib29sIHNjYW5Q
bHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBwYXJzZU1J
TUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPFdlYkNv
cmU6Ok1pbWVDbGFzc0luZm8+JiByZXN1bHQpOworICAgIHN0YXRpYyBTdHJpbmcgYnVpbGRNSU1F
RGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+Jik7CiAjZW5k
aWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3Bw
CmluZGV4IDQ3MTU3NDYuLjhkNTlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
TW9kdWxlWDExLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
NjcsNyArNjgsNyBAQCBTdGRvdXREZXZOdWxsUmVkaXJlY3Rvcjo6flN0ZG91dERldk51bGxSZWRp
cmVjdG9yKCkKIH0KIAogCi1zdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBT
dHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQpCit2
b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJp
bmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQpCiB7CiAg
ICAgQVNTRVJUX0FSRyhyZXN1bHQsIHJlc3VsdC5pc0VtcHR5KCkpOwogCkBAIC05NCw2ICs5NSwz
MiBAQCBzdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVE
ZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzcwogICAgIH0KIH0KIAorU3RyaW5nIE5ldHNjYXBl
UGx1Z2luTW9kdWxlOjpidWlsZE1JTUVEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8TWltZUNsYXNz
SW5mbz4mIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisK
KyAgICBzaXplX3QgbWltZUluZm9Db3VudCA9IG1pbWVEZXNjcmlwdGlvbi5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtaW1lSW5mb0NvdW50OyArK2kpIHsKKyAgICAgICAgY29u
c3QgTWltZUNsYXNzSW5mbyYgbWltZUluZm8gPSBtaW1lRGVzY3JpcHRpb25baV07CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1pbWVJbmZvLnR5cGUpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgn
OicpOworCisgICAgICAgIHNpemVfdCBleHRlbnNpb25zQ291bnQgPSBtaW1lSW5mby5leHRlbnNp
b25zLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBleHRlbnNpb25zQ291
bnQ7ICsraikgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWltZUluZm8uZXh0ZW5zaW9u
c1tqXSk7CisgICAgICAgICAgICBpZiAoaiAhPSBleHRlbnNpb25zQ291bnQgLSAxKQorICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJzonKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChtaW1lSW5mby5kZXNjKTsK
KyAgICAgICAgaWYgKGkgIT0gbWltZUluZm9Db3VudCAtIDEpCisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnOycpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKIGJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm9Gb3JMb2FkZWRQbHVn
aW4oUmF3UGx1Z2luTWV0YURhdGEmIG1ldGFEYXRhKQogewogICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3Rr
L1BsdWdpbkluZm9DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9n
dGsvUGx1Z2luSW5mb0NhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lOGE3YmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9DYWNoZS5oIgorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BsdWdpbkluZm9DYWNoZSYgUGx1Z2luSW5mb0NhY2hl
OjpzaGFyZWQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5JbmZvQ2FjaGU+
IHBsdWdpbkluZm9DYWNoZTsKKyAgICByZXR1cm4gcGx1Z2luSW5mb0NhY2hlOworfQorCitQbHVn
aW5JbmZvQ2FjaGU6OlBsdWdpbkluZm9DYWNoZSgpCisgICAgOiBtX2NhY2hlRmlsZShnX2tleV9m
aWxlX25ldygpKQorICAgICwgbV9jYWNoZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2Vy
X2NhY2hlX2RpcigpLCAid2Via2l0Z3RrIiwgInBsdWdpbnMiLCBudWxscHRyKSkKKyAgICAsIG1f
c2F2ZVRvRmlsZUlkbGVJZCgwKQoreworICAgIGdfa2V5X2ZpbGVfbG9hZF9mcm9tX2ZpbGUobV9j
YWNoZUZpbGUuZ2V0KCksIG1fY2FjaGVQYXRoLmdldCgpLCBHX0tFWV9GSUxFX05PTkUsIG51bGxw
dHIpOworfQorCitQbHVnaW5JbmZvQ2FjaGU6On5QbHVnaW5JbmZvQ2FjaGUoKQoreworICAgIGlm
IChtX3NhdmVUb0ZpbGVJZGxlSWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc2F2ZVRv
RmlsZUlkbGVJZCk7CisgICAgICAgIHNhdmVUb0ZpbGUoKTsKKyAgICB9Cit9CisKK2dib29sZWFu
IFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZUlkbGVDYWxsYmFjayhQbHVnaW5JbmZvQ2FjaGUq
IGNhY2hlKQoreworICAgIGNhY2hlLT5zYXZlVG9GaWxlKCk7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCit2b2lkIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSgpCit7CisgICAgbV9zYXZlVG9G
aWxlSWRsZUlkID0gMDsKKworICAgIGdzaXplIGRhdGFMZW5ndGg7CisgICAgR1VuaXF1ZVB0cjxj
aGFyPiBkYXRhKGdfa2V5X2ZpbGVfdG9fZGF0YShtX2NhY2hlRmlsZS5nZXQoKSwgJmRhdGFMZW5n
dGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGdf
ZmlsZV9zZXRfY29udGVudHMobV9jYWNoZVBhdGguZ2V0KCksIGRhdGEuZ2V0KCksIGRhdGFMZW5n
dGgsIG51bGxwdHIpOworfQorCitib29sIFBsdWdpbkluZm9DYWNoZTo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKK3sKKyAg
ICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1Z2luUGF0aC51dGY4KCk7CisgICAgaWYgKCFnX2tl
eV9maWxlX2hhc19ncm91cChtX2NhY2hlRmlsZS5nZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICBp
ZiAoIVdlYkNvcmU6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBsdWdpblBhdGgsIGxhc3RNb2Rp
ZmllZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0aW1lX3QgY2FjaGVkTGFzdE1vZGlm
aWVkID0gc3RhdGljX2Nhc3Q8dGltZV90PihnX2tleV9maWxlX2dldF91aW50NjQobV9jYWNoZUZp
bGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm10aW1lIiwgbnVsbHB0cikpOworICAgIGlm
IChsYXN0TW9kaWZpZWQgIT0gY2FjaGVkTGFzdE1vZGlmaWVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBwbHVnaW4ucGF0aCA9IHBsdWdpblBhdGg7CisgICAgcGx1Z2luLmluZm8uZmls
ZSA9IFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZShwbHVnaW5QYXRoKTsKKworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gc3RyaW5nVmFsdWUoZ19rZXlfZmlsZV9nZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdl
dCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJuYW1lIiwgbnVsbHB0cikpOworICAgIHBsdWdpbi5p
bmZvLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHN0cmluZ1ZhbHVlLmdldCgpKTsKKworICAgIHN0
cmluZ1ZhbHVlLnJlc2V0KGdfa2V5X2ZpbGVfZ2V0X3N0cmluZyhtX2NhY2hlRmlsZS5nZXQoKSwg
cGx1Z2luR3JvdXAuZGF0YSgpLCAiZGVzY3JpcHRpb24iLCBudWxscHRyKSk7CisgICAgcGx1Z2lu
LmluZm8uZGVzYyA9IFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nVmFsdWUuZ2V0KCkpOworCisgICAg
c3RyaW5nVmFsdWUucmVzZXQoZ19rZXlfZmlsZV9nZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgp
LCBwbHVnaW5Hcm91cC5kYXRhKCksICJtaW1lLWRlc2NyaXB0aW9uIiwgbnVsbHB0cikpOworICAg
IE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihTdHJpbmc6OmZyb21V
VEY4KHN0cmluZ1ZhbHVlLmdldCgpKSwgcGx1Z2luLmluZm8ubWltZXMpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5JbmZvKGNvbnN0
IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQorewor
ICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7CisgICAgaWYgKCFXZWJDb3JlOjpnZXRGaWxlTW9kaWZp
Y2F0aW9uVGltZShwbHVnaW5QYXRoLCBsYXN0TW9kaWZpZWQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1Z2luUGF0aC51dGY4KCk7CisgICAgZ19rZXlf
ZmlsZV9zZXRfdWludDY0KG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJt
dGltZSIsIHN0YXRpY19jYXN0PGd1aW50NjQ+KGxhc3RNb2RpZmllZCkpOworICAgIGdfa2V5X2Zp
bGVfc2V0X3N0cmluZyhtX2NhY2hlRmlsZS5nZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAibmFt
ZSIsIHBsdWdpbi5pbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgZ19rZXlfZmlsZV9zZXRf
c3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJkZXNjcmlwdGlv
biIsIHBsdWdpbi5pbmZvLmRlc2MudXRmOCgpLmRhdGEoKSk7CisKKyAgICBTdHJpbmcgbWltZURl
c2NyaXB0aW9uID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmJ1aWxkTUlNRURlc2NyaXB0aW9uKHBs
dWdpbi5pbmZvLm1pbWVzKTsKKyAgICBnX2tleV9maWxlX3NldF9zdHJpbmcobV9jYWNoZUZpbGUu
Z2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm1pbWUtZGVzY3JpcHRpb24iLCBtaW1lRGVzY3Jp
cHRpb24udXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBTYXZlIHRoZSBjYWNoZSBmaWxlIGluIGFu
IGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBlbnMgaW4gdGhlIG1haW4gdGhyZWFkIGFuZAorICAg
IC8vIGl0J3MgZG9uZSBvbmx5IG9uY2Ugd2hlbiB0aGlzIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1l
cyBpbiBhIHZlcnkgc2hvcnQgdGltZS4KKyAgICBpZiAobV9zYXZlVG9GaWxlSWRsZUlkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NhdmVUb0ZpbGVJZGxlSWQgPSBnX2lkbGVfYWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZUlkbGVD
YWxsYmFjayksIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc5N2MzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFBsdWdpbkluZm9DYWNoZV9oCisjZGVmaW5lIFBsdWdpbkluZm9DYWNoZV9oCisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKworI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUlu
Zm8uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQbHVnaW5J
bmZvQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbkluZm9DYWNoZSk7Cisg
ICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFBsdWdpbkluZm9DYWNoZT47CitwdWJsaWM6
CisgICAgc3RhdGljIFBsdWdpbkluZm9DYWNoZSYgc2hhcmVkKCk7CisKKyAgICBib29sIGdldFBs
dWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7Cisg
ICAgdm9pZCB1cGRhdGVQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYpOworCitwcml2YXRlOgorICAgIFBsdWdpbkluZm9DYWNoZSgpOwor
ICAgIH5QbHVnaW5JbmZvQ2FjaGUoKTsKKworICAgIHZvaWQgc2F2ZVRvRmlsZSgpOworICAgIHN0
YXRpYyBnYm9vbGVhbiBzYXZlVG9GaWxlSWRsZUNhbGxiYWNrKFBsdWdpbkluZm9DYWNoZSopOwor
CisgICAgR1VuaXF1ZVB0cjxHS2V5RmlsZT4gbV9jYWNoZUZpbGU7CisgICAgR1VuaXF1ZVB0cjxj
aGFyPiBtX2NhY2hlUGF0aDsKKyAgICB1bnNpZ25lZCBtX3NhdmVUb0ZpbGVJZGxlSWQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorCisjZW5kaWYgLy8gUGx1Z2luSW5mb0NhY2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVu
aXguY3BwCmluZGV4IDM3MjY0MDEuLmE5Njg1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNw
cApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUg
IlBsdWdpbkluZm9DYWNoZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTk4LDcgKzEwMiwxOCBAQCBWZWN0b3I8U3RyaW5nPiBQ
bHVnaW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVnaW5QYXRocygpCiAKIGJvb2wgUGx1Z2luSW5m
b1N0b3JlOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luKQogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoUGx1Z2luSW5m
b0NhY2hlOjpzaGFyZWQoKS5nZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVn
aW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpIHsKKyAgICAgICAgUGx1Z2luSW5mb0NhY2hlOjpz
aGFyZWQoKS51cGRhdGVQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQogICAgIHJldHVybiBO
ZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pOwor
I2VuZGlmCiB9CiAKIGJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzaG91bGRVc2VQbHVnaW4oVmVjdG9y
PFBsdWdpbk1vZHVsZUluZm8+JiAvKmFscmVhZHlMb2FkZWRQbHVnaW5zKi8sIGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mIC8qcGx1Z2luKi8pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225356</attachid>
            <date>2014-02-27 04:30:23 -0800</date>
            <delta_ts>2014-02-27 09:09:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-plugins-cached.diff</filename>
            <type>text/plain</type>
            <size>16411</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NmZmYTdkLi5hYjNkZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMDItMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW1dLMl0gQmxvY2tzIHdoZW4gZmV0Y2hpbmcgcGx1Z2lucyBpbmZv
cm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE1NjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIGEgcGVyc2lzdGVudCBjYWNoZSB0byBzdG9yZSB0aGUgcGx1Z2lucyBtZXRhZGF0YSB0byBh
dm9pZAorICAgICAgICBoYXZpbmcgdG8gbG9hZCBhbGwgdGhlIHBsdWdpbnMgZXZlcnl0aW1lIGEg
cGx1Z2luIGlzIHVzZWQgZm9yIHRoZQorICAgICAgICBmaXJzdCB0aW1lLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbik6IE1ha2UgdGhpcworICAgICAg
ICBtZXRob2QgcHVibGljLgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6
YnVpbGRNSU1FRGVzY3JpcHRpb24pOiBBZGRlZCB0aGlzCisgICAgICAgIGhlbHBlciB0byBidWls
ZCB0aGUgTUlNRSBkZXNjcmlwdGlvbiBzdHJpbmcuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdp
bnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5JbmZvQ2FjaGU6OnNoYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6
UGx1Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp+UGx1
Z2luSW5mb0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9G
aWxlSWRsZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZl
VG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpnZXRQbHVnaW5JbmZv
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5JbmZvKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyk6IENo
ZWNrIGZpcnN0IGlmIHdlIGhhdmUKKyAgICAgICAgbWV0YWRhdGEgb2YgdGhlIHBsdWdpbiBpbiB0
aGUgY2FjaGUgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgaWYgd2UKKyAgICAgICAgbG9hZGVkIHRoZSBw
bHVnaW4gdG8gZ2V0IGl0cyBtZXRhZGF0YS4KKwogMjAxNC0wMi0xNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1h
a2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBjMjk5YjFmLi41YWJlMmViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTI2LDYgKzEyNiw3IEBAIGxpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfQ1BQCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Ob3RpZmljYXRpb25zIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggNzkwY2Y3Yy4uY2JhODBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC04NzAsNiArODcwLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFu
YWdlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5J
bmZvQ2FjaGUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1
Z2luSW5mb0NhY2hlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgv
UGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL3VuaXgvUGx1Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGM5
NjFmMDkuLmY3ZjAxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNDYsNiArMjQ2
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXJD
bGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2Vi
U291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCiAKKyAgICBVSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAorCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5p
eC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1
Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAKIApAQCAtNDA3LDYgKzQwOSw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nl
c3MvQVBJL2NwcC9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrIgog
ICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291
cCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvZ3RrIgogICAgICIke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3Mv
c291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmgKaW5kZXggMzNiN2I4NS4uZmI1ZTg4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBNaW1lQ2xhc3NJbmZvOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgUmF3UGx1Z2luTWV0YURhdGE7CkBAIC02Nyw2ICs3MSw4IEBAIHB1Ymxp
YzoKIAogI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoWDExKQogICAgIHN0YXRpYyBib29sIHNjYW5Q
bHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBwYXJzZU1J
TUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPFdlYkNv
cmU6Ok1pbWVDbGFzc0luZm8+JiByZXN1bHQpOworICAgIHN0YXRpYyBTdHJpbmcgYnVpbGRNSU1F
RGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+Jik7CiAjZW5k
aWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3Bw
CmluZGV4IDQ3MTU3NDYuLjhkNTlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
TW9kdWxlWDExLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
NjcsNyArNjgsNyBAQCBTdGRvdXREZXZOdWxsUmVkaXJlY3Rvcjo6flN0ZG91dERldk51bGxSZWRp
cmVjdG9yKCkKIH0KIAogCi1zdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBT
dHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQpCit2
b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJp
bmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQpCiB7CiAg
ICAgQVNTRVJUX0FSRyhyZXN1bHQsIHJlc3VsdC5pc0VtcHR5KCkpOwogCkBAIC05NCw2ICs5NSwz
MiBAQCBzdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVE
ZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzcwogICAgIH0KIH0KIAorU3RyaW5nIE5ldHNjYXBl
UGx1Z2luTW9kdWxlOjpidWlsZE1JTUVEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8TWltZUNsYXNz
SW5mbz4mIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisK
KyAgICBzaXplX3QgbWltZUluZm9Db3VudCA9IG1pbWVEZXNjcmlwdGlvbi5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtaW1lSW5mb0NvdW50OyArK2kpIHsKKyAgICAgICAgY29u
c3QgTWltZUNsYXNzSW5mbyYgbWltZUluZm8gPSBtaW1lRGVzY3JpcHRpb25baV07CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1pbWVJbmZvLnR5cGUpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgn
OicpOworCisgICAgICAgIHNpemVfdCBleHRlbnNpb25zQ291bnQgPSBtaW1lSW5mby5leHRlbnNp
b25zLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBleHRlbnNpb25zQ291
bnQ7ICsraikgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWltZUluZm8uZXh0ZW5zaW9u
c1tqXSk7CisgICAgICAgICAgICBpZiAoaiAhPSBleHRlbnNpb25zQ291bnQgLSAxKQorICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJzonKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChtaW1lSW5mby5kZXNjKTsK
KyAgICAgICAgaWYgKGkgIT0gbWltZUluZm9Db3VudCAtIDEpCisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnOycpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKIGJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm9Gb3JMb2FkZWRQbHVn
aW4oUmF3UGx1Z2luTWV0YURhdGEmIG1ldGFEYXRhKQogewogICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3Rr
L1BsdWdpbkluZm9DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9n
dGsvUGx1Z2luSW5mb0NhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hZjQ3NDIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9DYWNoZS5oIgorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBnU2NoZW1hVmVy
c2lvbiA9IDE7CisKK1BsdWdpbkluZm9DYWNoZSYgUGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5JbmZvQ2FjaGU+IHBsdWdpbkluZm9D
YWNoZTsKKyAgICByZXR1cm4gcGx1Z2luSW5mb0NhY2hlOworfQorCitQbHVnaW5JbmZvQ2FjaGU6
OlBsdWdpbkluZm9DYWNoZSgpCisgICAgOiBtX2NhY2hlRmlsZShnX2tleV9maWxlX25ldygpKQor
ICAgICwgbV9jYWNoZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2NhY2hlX2Rpcigp
LCAid2Via2l0Z3RrIiwgInBsdWdpbnMiLCBudWxscHRyKSkKKyAgICAsIG1fc2F2ZVRvRmlsZUlk
bGVJZCgwKQoreworICAgIGdfa2V5X2ZpbGVfbG9hZF9mcm9tX2ZpbGUobV9jYWNoZUZpbGUuZ2V0
KCksIG1fY2FjaGVQYXRoLmdldCgpLCBHX0tFWV9GSUxFX05PTkUsIG51bGxwdHIpOworCisgICAg
aWYgKGdfa2V5X2ZpbGVfaGFzX2dyb3VwKG1fY2FjaGVGaWxlLmdldCgpLCAic2NoZW1hIikpIHsK
KyAgICAgICAgdW5zaWduZWQgc2NoZW1hVmVyc2lvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihn
X2tleV9maWxlX2dldF9pbnRlZ2VyKG1fY2FjaGVGaWxlLmdldCgpLCAic2NoZW1hIiwgInZlcnNp
b24iLCBudWxscHRyKSk7CisgICAgICAgIGlmIChzY2hlbWFWZXJzaW9uID09IGdTY2hlbWFWZXJz
aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENhY2hlIGZpbGUgdXNpbmcg
YW4gb2xkIHNjaGVtYSwgY3JlYXRlIGEgbmV3IGVtcHR5IGZpbGUuCisgICAgICAgIG1fY2FjaGVG
aWxlLnJlc2V0KGdfa2V5X2ZpbGVfbmV3KCkpOworICAgIH0KKworICAgIGdfa2V5X2ZpbGVfc2V0
X2ludGVnZXIobV9jYWNoZUZpbGUuZ2V0KCksICJzY2hlbWEiLCAidmVyc2lvbiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihnU2NoZW1hVmVyc2lvbikpOworfQorCitQbHVnaW5JbmZvQ2FjaGU6On5Q
bHVnaW5JbmZvQ2FjaGUoKQoreworICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlSWQpIHsKKyAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKG1fc2F2ZVRvRmlsZUlkbGVJZCk7CisgICAgICAgIHNhdmVUb0Zp
bGUoKTsKKyAgICB9Cit9CisKK2dib29sZWFuIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZUlk
bGVDYWxsYmFjayhQbHVnaW5JbmZvQ2FjaGUqIGNhY2hlKQoreworICAgIGNhY2hlLT5zYXZlVG9G
aWxlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFBsdWdpbkluZm9DYWNoZTo6c2F2
ZVRvRmlsZSgpCit7CisgICAgbV9zYXZlVG9GaWxlSWRsZUlkID0gMDsKKworICAgIGdzaXplIGRh
dGFMZW5ndGg7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkYXRhKGdfa2V5X2ZpbGVfdG9fZGF0YSht
X2NhY2hlRmlsZS5nZXQoKSwgJmRhdGFMZW5ndGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIGdfZmlsZV9zZXRfY29udGVudHMobV9jYWNoZVBhdGgu
Z2V0KCksIGRhdGEuZ2V0KCksIGRhdGFMZW5ndGgsIG51bGxwdHIpOworfQorCitib29sIFBsdWdp
bkluZm9DYWNoZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdp
bk1vZHVsZUluZm8mIHBsdWdpbikKK3sKKyAgICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1Z2lu
UGF0aC51dGY4KCk7CisgICAgaWYgKCFnX2tleV9maWxlX2hhc19ncm91cChtX2NhY2hlRmlsZS5n
ZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dGltZV90IGxhc3RNb2RpZmllZDsKKyAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVNb2RpZmljYXRp
b25UaW1lKHBsdWdpblBhdGgsIGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB0aW1lX3QgY2FjaGVkTGFzdE1vZGlmaWVkID0gc3RhdGljX2Nhc3Q8dGltZV90PihnX2tl
eV9maWxlX2dldF91aW50NjQobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwg
Im10aW1lIiwgbnVsbHB0cikpOworICAgIGlmIChsYXN0TW9kaWZpZWQgIT0gY2FjaGVkTGFzdE1v
ZGlmaWVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbHVnaW4ucGF0aCA9IHBsdWdp
blBhdGg7CisgICAgcGx1Z2luLmluZm8uZmlsZSA9IFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZShw
bHVnaW5QYXRoKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3RyaW5nVmFsdWUoZ19rZXlfZmls
ZV9nZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJuYW1l
IiwgbnVsbHB0cikpOworICAgIHBsdWdpbi5pbmZvLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHN0
cmluZ1ZhbHVlLmdldCgpKTsKKworICAgIHN0cmluZ1ZhbHVlLnJlc2V0KGdfa2V5X2ZpbGVfZ2V0
X3N0cmluZyhtX2NhY2hlRmlsZS5nZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAiZGVzY3JpcHRp
b24iLCBudWxscHRyKSk7CisgICAgcGx1Z2luLmluZm8uZGVzYyA9IFN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nVmFsdWUuZ2V0KCkpOworCisgICAgc3RyaW5nVmFsdWUucmVzZXQoZ19rZXlfZmlsZV9n
ZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJtaW1lLWRl
c2NyaXB0aW9uIiwgbnVsbHB0cikpOworICAgIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1J
TUVEZXNjcmlwdGlvbihTdHJpbmc6OmZyb21VVEY4KHN0cmluZ1ZhbHVlLmdldCgpKSwgcGx1Z2lu
LmluZm8ubWltZXMpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luSW5mb0Nh
Y2hlOjp1cGRhdGVQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1
Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQoreworICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7CisgICAg
aWYgKCFXZWJDb3JlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwbHVnaW5QYXRoLCBsYXN0TW9k
aWZpZWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1
Z2luUGF0aC51dGY4KCk7CisgICAgZ19rZXlfZmlsZV9zZXRfdWludDY0KG1fY2FjaGVGaWxlLmdl
dCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJtdGltZSIsIHN0YXRpY19jYXN0PGd1aW50NjQ+KGxh
c3RNb2RpZmllZCkpOworICAgIGdfa2V5X2ZpbGVfc2V0X3N0cmluZyhtX2NhY2hlRmlsZS5nZXQo
KSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAibmFtZSIsIHBsdWdpbi5pbmZvLm5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVn
aW5Hcm91cC5kYXRhKCksICJkZXNjcmlwdGlvbiIsIHBsdWdpbi5pbmZvLmRlc2MudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBTdHJpbmcgbWltZURlc2NyaXB0aW9uID0gTmV0c2NhcGVQbHVnaW5Nb2R1
bGU6OmJ1aWxkTUlNRURlc2NyaXB0aW9uKHBsdWdpbi5pbmZvLm1pbWVzKTsKKyAgICBnX2tleV9m
aWxlX3NldF9zdHJpbmcobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm1p
bWUtZGVzY3JpcHRpb24iLCBtaW1lRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSk7CisKKyAgICAv
LyBTYXZlIHRoZSBjYWNoZSBmaWxlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBlbnMg
aW4gdGhlIG1haW4gdGhyZWFkIGFuZAorICAgIC8vIGl0J3MgZG9uZSBvbmx5IG9uY2Ugd2hlbiB0
aGlzIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHZlcnkgc2hvcnQgdGltZS4KKyAgICBp
ZiAobV9zYXZlVG9GaWxlSWRsZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhdmVUb0Zp
bGVJZGxlSWQgPSBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KFBsdWdp
bkluZm9DYWNoZTo6c2F2ZVRvRmlsZUlkbGVDYWxsYmFjayksIHRoaXMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbklu
Zm9DYWNoZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbklu
Zm9DYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2MzYzkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1
Z2luSW5mb0NhY2hlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkluZm9DYWNoZV9oCisjZGVm
aW5lIFBsdWdpbkluZm9DYWNoZV9oCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KworI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBQbHVnaW5JbmZvQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBsdWdpbkluZm9DYWNoZSk7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFBsdWdpbkluZm9DYWNoZT47CitwdWJsaWM6CisgICAgc3RhdGljIFBsdWdpbkluZm9DYWNoZSYg
c2hhcmVkKCk7CisKKyAgICBib29sIGdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5Q
YXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVQbHVnaW5JbmZvKGNvbnN0
IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpOworCitwcml2YXRl
OgorICAgIFBsdWdpbkluZm9DYWNoZSgpOworICAgIH5QbHVnaW5JbmZvQ2FjaGUoKTsKKworICAg
IHZvaWQgc2F2ZVRvRmlsZSgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBzYXZlVG9GaWxlSWRsZUNh
bGxiYWNrKFBsdWdpbkluZm9DYWNoZSopOworCisgICAgR1VuaXF1ZVB0cjxHS2V5RmlsZT4gbV9j
YWNoZUZpbGU7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX2NhY2hlUGF0aDsKKyAgICB1bnNpZ25l
ZCBtX3NhdmVUb0ZpbGVJZGxlSWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCisjZW5kaWYgLy8gUGx1Z2luSW5m
b0NhY2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3Vu
aXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCmluZGV4IDM3MjY0MDEuLmE5Njg1NjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2lu
SW5mb1N0b3JlVW5peC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
dW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogCisj
aWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIlBsdWdpbkluZm9DYWNoZS5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTk4LDcg
KzEwMiwxOCBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVn
aW5QYXRocygpCiAKIGJvb2wgUGx1Z2luSW5mb1N0b3JlOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFN0
cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQogeworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICBpZiAoUGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQoKS5nZXRQbHVnaW5JbmZv
KHBsdWdpblBhdGgsIHBsdWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKE5l
dHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpIHsK
KyAgICAgICAgUGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQoKS51cGRhdGVQbHVnaW5JbmZvKHBsdWdp
blBhdGgsIHBsdWdpbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisjZWxzZQogICAgIHJldHVybiBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2lu
SW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pOworI2VuZGlmCiB9CiAKIGJvb2wgUGx1Z2luSW5mb1N0
b3JlOjpzaG91bGRVc2VQbHVnaW4oVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiAvKmFscmVhZHlM
b2FkZWRQbHVnaW5zKi8sIGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIC8qcGx1Z2luKi8pCg==
</data>
<flag name="review"
          id="249483"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225375</attachid>
            <date>2014-02-27 09:09:01 -0800</date>
            <delta_ts>2014-02-27 09:09:01 -0800</delta_ts>
            <desc>Updated patch using a mutex</desc>
            <filename>wk2-plugins-cached2.diff</filename>
            <type>text/plain</type>
            <size>16553</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyOWNhZGVlLi43ZmMyOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMDItMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW1dLMl0gQmxvY2tzIHdoZW4gZmV0Y2hpbmcgcGx1Z2lucyBpbmZv
cm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE1NjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgorCisg
ICAgICAgIFVzZSBhIHBlcnNpc3RlbnQgY2FjaGUgdG8gc3RvcmUgdGhlIHBsdWdpbnMgbWV0YWRh
dGEgdG8gYXZvaWQKKyAgICAgICAgaGF2aW5nIHRvIGxvYWQgYWxsIHRoZSBwbHVnaW5zIGV2ZXJ5
dGltZSBhIHBsdWdpbiBpcyB1c2VkIGZvciB0aGUKKyAgICAgICAgZmlyc3QgdGltZS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaDoKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9O
ZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6cGFyc2VNSU1FRGVzY3JpcHRpb24pOiBNYWtlIHRoaXMK
KyAgICAgICAgbWV0aG9kIHB1YmxpYy4KKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5N
b2R1bGU6OmJ1aWxkTUlNRURlc2NyaXB0aW9uKTogQWRkZWQgdGhpcworICAgICAgICBoZWxwZXIg
dG8gYnVpbGQgdGhlIE1JTUUgZGVzY3JpcHRpb24gc3RyaW5nLgorICAgICAgICAqIFVJUHJvY2Vz
cy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZv
Q2FjaGU6OlBsdWdpbkluZm9DYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNo
ZTo6flBsdWdpbkluZm9DYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6
c2F2ZVRvRmlsZUlkbGVDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNo
ZTo6c2F2ZVRvRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6Z2V0UGx1
Z2luSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6dXBkYXRlUGx1Z2lu
SW5mbyk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9y
ZVVuaXguY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvU3RvcmU6OmdldFBsdWdpbklu
Zm8pOiBDaGVjayBmaXJzdCBpZiB3ZSBoYXZlCisgICAgICAgIG1ldGFkYXRhIG9mIHRoZSBwbHVn
aW4gaW4gdGhlIGNhY2hlIGFuZCB1cGRhdGUgdGhlIGNhY2hlIGlmIHdlCisgICAgICAgIGxvYWRl
ZCB0aGUgcGx1Z2luIHRvIGdldCBpdHMgbWV0YWRhdGEuCisKIDIwMTQtMDItMjcgIFJ5YW4gTG9y
dGllICA8ZGVzcnRAZGVzcnQuY2E+CiAKICAgICAgICAgbmVlZCB0byAjaW5jbHVkZSA8bGliZ2Vu
Lmg+IGZvciBiYXNlbmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBjMjk5YjFmLi41YWJlMmVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTI2LDYgKzEyNiw3IEBAIGxpYndlYmtpdDJndGtf
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkBfbGFfQ1BQCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdp
bnMvZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91
bml4IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZSBcCiAJ
LUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNzkwY2Y3Yy4uY2JhODBjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC04NzAsNiArODcwLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2Vy
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRh
TWFuYWdlci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVn
aW5JbmZvQ2FjaGUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsv
UGx1Z2luSW5mb0NhY2hlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3Vu
aXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL3VuaXgvUGx1Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4
IGM5NjFmMDkuLmY3ZjAxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNDYsNiAr
MjQ2LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFn
ZXJDbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAv
V2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCiAKKyAgICBVSVByb2Nlc3Mv
UGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAorCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMv
dW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgv
UGx1Z2luUHJvY2Vzc1Byb3h5VW5peC5jcHAKIApAQCAtNDA3LDYgKzQwOSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVBy
b2Nlc3MvQVBJL2NwcC9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3Rr
IgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMv
c291cCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvZ3RrIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvZ3RrIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nl
c3Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmgKaW5kZXggMzNiN2I4NS4uZmI1ZTg4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW5Nb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBNaW1lQ2xhc3NJbmZvOworfQorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgUmF3UGx1Z2luTWV0YURhdGE7CkBAIC02Nyw2ICs3MSw4IEBAIHB1
YmxpYzoKIAogI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoWDExKQogICAgIHN0YXRpYyBib29sIHNj
YW5QbHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBwYXJz
ZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPFdl
YkNvcmU6Ok1pbWVDbGFzc0luZm8+JiByZXN1bHQpOworICAgIHN0YXRpYyBTdHJpbmcgYnVpbGRN
SU1FRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+Jik7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEu
Y3BwCmluZGV4IDQ3MTU3NDYuLjhkNTlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1
Z2luTW9kdWxlWDExLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+
CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtNjcsNyArNjgsNyBAQCBTdGRvdXREZXZOdWxsUmVkaXJlY3Rvcjo6flN0ZG91dERldk51bGxS
ZWRpcmVjdG9yKCkKIH0KIAogCi1zdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25z
dCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQp
Cit2b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBT
dHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzc0luZm8+JiByZXN1bHQpCiB7
CiAgICAgQVNTRVJUX0FSRyhyZXN1bHQsIHJlc3VsdC5pc0VtcHR5KCkpOwogCkBAIC05NCw2ICs5
NSwzMiBAQCBzdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1p
bWVEZXNjcmlwdGlvbiwgVmVjdG9yPE1pbWVDbGFzcwogICAgIH0KIH0KIAorU3RyaW5nIE5ldHNj
YXBlUGx1Z2luTW9kdWxlOjpidWlsZE1JTUVEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8TWltZUNs
YXNzSW5mbz4mIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisKKyAgICBzaXplX3QgbWltZUluZm9Db3VudCA9IG1pbWVEZXNjcmlwdGlvbi5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtaW1lSW5mb0NvdW50OyArK2kpIHsKKyAgICAgICAg
Y29uc3QgTWltZUNsYXNzSW5mbyYgbWltZUluZm8gPSBtaW1lRGVzY3JpcHRpb25baV07CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKG1pbWVJbmZvLnR5cGUpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnOicpOworCisgICAgICAgIHNpemVfdCBleHRlbnNpb25zQ291bnQgPSBtaW1lSW5mby5leHRl
bnNpb25zLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBleHRlbnNpb25z
Q291bnQ7ICsraikgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWltZUluZm8uZXh0ZW5z
aW9uc1tqXSk7CisgICAgICAgICAgICBpZiAoaiAhPSBleHRlbnNpb25zQ291bnQgLSAxKQorICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoJzonKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChtaW1lSW5mby5kZXNj
KTsKKyAgICAgICAgaWYgKGkgIT0gbWltZUluZm9Db3VudCAtIDEpCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCgnOycpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKIGJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm9Gb3JMb2FkZWRQ
bHVnaW4oUmF3UGx1Z2luTWV0YURhdGEmIG1ldGFEYXRhKQogewogICAgIEFTU0VSVChtX2lzSW5p
dGlhbGl6ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lu
cy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MmU0NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9DYWNoZS5oIgorCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBnU2NoZW1h
VmVyc2lvbiA9IDE7CisKK1BsdWdpbkluZm9DYWNoZSYgUGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5JbmZvQ2FjaGU+IHBsdWdpbklu
Zm9DYWNoZTsKKyAgICByZXR1cm4gcGx1Z2luSW5mb0NhY2hlOworfQorCitQbHVnaW5JbmZvQ2Fj
aGU6OlBsdWdpbkluZm9DYWNoZSgpCisgICAgOiBtX2NhY2hlRmlsZShnX2tleV9maWxlX25ldygp
KQorICAgICwgbV9jYWNoZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2NhY2hlX2Rp
cigpLCAid2Via2l0Z3RrIiwgInBsdWdpbnMiLCBudWxscHRyKSkKKyAgICAsIG1fc2F2ZVRvRmls
ZUlkbGVJZCgwKQoreworICAgIGdfa2V5X2ZpbGVfbG9hZF9mcm9tX2ZpbGUobV9jYWNoZUZpbGUu
Z2V0KCksIG1fY2FjaGVQYXRoLmdldCgpLCBHX0tFWV9GSUxFX05PTkUsIG51bGxwdHIpOworCisg
ICAgaWYgKGdfa2V5X2ZpbGVfaGFzX2dyb3VwKG1fY2FjaGVGaWxlLmdldCgpLCAic2NoZW1hIikp
IHsKKyAgICAgICAgdW5zaWduZWQgc2NoZW1hVmVyc2lvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihnX2tleV9maWxlX2dldF9pbnRlZ2VyKG1fY2FjaGVGaWxlLmdldCgpLCAic2NoZW1hIiwgInZl
cnNpb24iLCBudWxscHRyKSk7CisgICAgICAgIGlmIChzY2hlbWFWZXJzaW9uID09IGdTY2hlbWFW
ZXJzaW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENhY2hlIGZpbGUgdXNp
bmcgYW4gb2xkIHNjaGVtYSwgY3JlYXRlIGEgbmV3IGVtcHR5IGZpbGUuCisgICAgICAgIG1fY2Fj
aGVGaWxlLnJlc2V0KGdfa2V5X2ZpbGVfbmV3KCkpOworICAgIH0KKworICAgIGdfa2V5X2ZpbGVf
c2V0X2ludGVnZXIobV9jYWNoZUZpbGUuZ2V0KCksICJzY2hlbWEiLCAidmVyc2lvbiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnU2NoZW1hVmVyc2lvbikpOworfQorCitQbHVnaW5JbmZvQ2FjaGU6
On5QbHVnaW5JbmZvQ2FjaGUoKQoreworICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlSWQpIHsKKyAg
ICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc2F2ZVRvRmlsZUlkbGVJZCk7CisgICAgICAgIHNhdmVU
b0ZpbGUoKTsKKyAgICB9Cit9CisKK2dib29sZWFuIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmls
ZUlkbGVDYWxsYmFjayhQbHVnaW5JbmZvQ2FjaGUqIGNhY2hlKQoreworICAgIGNhY2hlLT5zYXZl
VG9GaWxlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFBsdWdpbkluZm9DYWNoZTo6
c2F2ZVRvRmlsZSgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9t
dXRleCk7CisgICAgbV9zYXZlVG9GaWxlSWRsZUlkID0gMDsKKworICAgIGdzaXplIGRhdGFMZW5n
dGg7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkYXRhKGdfa2V5X2ZpbGVfdG9fZGF0YShtX2NhY2hl
RmlsZS5nZXQoKSwgJmRhdGFMZW5ndGgsIG51bGxwdHIpKTsKKyAgICBpZiAoIWRhdGEpCisgICAg
ICAgIHJldHVybjsKKworICAgIGdfZmlsZV9zZXRfY29udGVudHMobV9jYWNoZVBhdGguZ2V0KCks
IGRhdGEuZ2V0KCksIGRhdGFMZW5ndGgsIG51bGxwdHIpOworfQorCitib29sIFBsdWdpbkluZm9D
YWNoZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVs
ZUluZm8mIHBsdWdpbikKK3sKKyAgICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1Z2luUGF0aC51
dGY4KCk7CisgICAgaWYgKCFnX2tleV9maWxlX2hhc19ncm91cChtX2NhY2hlRmlsZS5nZXQoKSwg
cGx1Z2luR3JvdXAuZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGltZV90
IGxhc3RNb2RpZmllZDsKKyAgICBpZiAoIVdlYkNvcmU6OmdldEZpbGVNb2RpZmljYXRpb25UaW1l
KHBsdWdpblBhdGgsIGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0
aW1lX3QgY2FjaGVkTGFzdE1vZGlmaWVkID0gc3RhdGljX2Nhc3Q8dGltZV90PihnX2tleV9maWxl
X2dldF91aW50NjQobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm10aW1l
IiwgbnVsbHB0cikpOworICAgIGlmIChsYXN0TW9kaWZpZWQgIT0gY2FjaGVkTGFzdE1vZGlmaWVk
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbHVnaW4ucGF0aCA9IHBsdWdpblBhdGg7
CisgICAgcGx1Z2luLmluZm8uZmlsZSA9IFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZShwbHVnaW5Q
YXRoKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3RyaW5nVmFsdWUoZ19rZXlfZmlsZV9nZXRf
c3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJuYW1lIiwgbnVs
bHB0cikpOworICAgIHBsdWdpbi5pbmZvLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHN0cmluZ1Zh
bHVlLmdldCgpKTsKKworICAgIHN0cmluZ1ZhbHVlLnJlc2V0KGdfa2V5X2ZpbGVfZ2V0X3N0cmlu
ZyhtX2NhY2hlRmlsZS5nZXQoKSwgcGx1Z2luR3JvdXAuZGF0YSgpLCAiZGVzY3JpcHRpb24iLCBu
dWxscHRyKSk7CisgICAgcGx1Z2luLmluZm8uZGVzYyA9IFN0cmluZzo6ZnJvbVVURjgoc3RyaW5n
VmFsdWUuZ2V0KCkpOworCisgICAgc3RyaW5nVmFsdWUucmVzZXQoZ19rZXlfZmlsZV9nZXRfc3Ry
aW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91cC5kYXRhKCksICJtaW1lLWRlc2NyaXB0
aW9uIiwgbnVsbHB0cikpOworICAgIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpwYXJzZU1JTUVEZXNj
cmlwdGlvbihTdHJpbmc6OmZyb21VVEY4KHN0cmluZ1ZhbHVlLmdldCgpKSwgcGx1Z2luLmluZm8u
bWltZXMpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luSW5mb0NhY2hlOjp1
cGRhdGVQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luKQoreworICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7CisgICAgaWYgKCFX
ZWJDb3JlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwbHVnaW5QYXRoLCBsYXN0TW9kaWZpZWQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIHBsdWdpbkdyb3VwID0gcGx1Z2luUGF0
aC51dGY4KCk7CisgICAgZ19rZXlfZmlsZV9zZXRfdWludDY0KG1fY2FjaGVGaWxlLmdldCgpLCBw
bHVnaW5Hcm91cC5kYXRhKCksICJtdGltZSIsIHN0YXRpY19jYXN0PGd1aW50NjQ+KGxhc3RNb2Rp
ZmllZCkpOworICAgIGdfa2V5X2ZpbGVfc2V0X3N0cmluZyhtX2NhY2hlRmlsZS5nZXQoKSwgcGx1
Z2luR3JvdXAuZGF0YSgpLCAibmFtZSIsIHBsdWdpbi5pbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7
CisgICAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nKG1fY2FjaGVGaWxlLmdldCgpLCBwbHVnaW5Hcm91
cC5kYXRhKCksICJkZXNjcmlwdGlvbiIsIHBsdWdpbi5pbmZvLmRlc2MudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBTdHJpbmcgbWltZURlc2NyaXB0aW9uID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmJ1
aWxkTUlNRURlc2NyaXB0aW9uKHBsdWdpbi5pbmZvLm1pbWVzKTsKKyAgICBnX2tleV9maWxlX3Nl
dF9zdHJpbmcobV9jYWNoZUZpbGUuZ2V0KCksIHBsdWdpbkdyb3VwLmRhdGEoKSwgIm1pbWUtZGVz
Y3JpcHRpb24iLCBtaW1lRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBTYXZl
IHRoZSBjYWNoZSBmaWxlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBlbnMgaW4gdGhl
IG1haW4gdGhyZWFkIGFuZAorICAgIC8vIGl0J3MgZG9uZSBvbmx5IG9uY2Ugd2hlbiB0aGlzIGlz
IGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHZlcnkgc2hvcnQgdGltZS4KKyAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBpZiAobV9zYXZlVG9GaWxl
SWRsZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhdmVUb0ZpbGVJZGxlSWQgPSBnX2lk
bGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KFBsdWdpbkluZm9DYWNoZTo6c2F2
ZVRvRmlsZUlkbGVDYWxsYmFjayksIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzJkYzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkluZm9DYWNoZV9oCisjZGVmaW5lIFBsdWdpbkluZm9D
YWNoZV9oCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKworI2luY2x1ZGUgIlBs
dWdpbk1vZHVsZUluZm8uaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBQbHVnaW5JbmZvQ2FjaGUgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBsdWdpbkluZm9DYWNoZSk7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFBsdWdpbkluZm9DYWNoZT47CitwdWJsaWM6CisgICAgc3RhdGljIFBsdWdpbkluZm9DYWNo
ZSYgc2hhcmVkKCk7CisKKyAgICBib29sIGdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVn
aW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVQbHVnaW5JbmZvKGNv
bnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpOworCitwcml2
YXRlOgorICAgIFBsdWdpbkluZm9DYWNoZSgpOworICAgIH5QbHVnaW5JbmZvQ2FjaGUoKTsKKwor
ICAgIHZvaWQgc2F2ZVRvRmlsZSgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBzYXZlVG9GaWxlSWRs
ZUNhbGxiYWNrKFBsdWdpbkluZm9DYWNoZSopOworCisgICAgR1VuaXF1ZVB0cjxHS2V5RmlsZT4g
bV9jYWNoZUZpbGU7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX2NhY2hlUGF0aDsKKyAgICB1bnNp
Z25lZCBtX3NhdmVUb0ZpbGVJZGxlSWQ7CisgICAgc3RkOjptdXRleCBtX211dGV4OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKworI2VuZGlmIC8vIFBsdWdpbkluZm9DYWNoZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4
LmNwcAppbmRleCAzNzI2NDAxLi5hOTY4NTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAK
QEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KIAorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJQ
bHVnaW5JbmZvQ2FjaGUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC05OCw3ICsxMDIsMTggQEAgVmVjdG9yPFN0cmluZz4gUGx1
Z2luSW5mb1N0b3JlOjppbmRpdmlkdWFsUGx1Z2luUGF0aHMoKQogCiBib29sIFBsdWdpbkluZm9T
dG9yZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVs
ZUluZm8mIHBsdWdpbikKIHsKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKFBsdWdpbkluZm9D
YWNoZTo6c2hhcmVkKCkuZ2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2lu
SW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pKSB7CisgICAgICAgIFBsdWdpbkluZm9DYWNoZTo6c2hh
cmVkKCkudXBkYXRlUGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKICAgICByZXR1cm4gTmV0
c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKTsKKyNl
bmRpZgogfQogCiBib29sIFBsdWdpbkluZm9TdG9yZTo6c2hvdWxkVXNlUGx1Z2luKFZlY3RvcjxQ
bHVnaW5Nb2R1bGVJbmZvPiYgLyphbHJlYWR5TG9hZGVkUGx1Z2lucyovLCBjb25zdCBQbHVnaW5N
b2R1bGVJbmZvJiAvKnBsdWdpbiovKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>