<?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>61287</bug_id>
          
          <creation_ts>2011-05-23 08:12:10 -0700</creation_ts>
          <short_desc>[UNIX] Use SOCK_SEQPACKET when available</short_desc>
          <delta_ts>2011-10-18 01:47:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kimmo.t.kinnunen</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407981</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-23 08:12:10 -0700</bug_when>
    <thetext>While implemeting the plugin process for the GTK port I noticed that when closing a page containing a plugin, the web process got blocked waiting for a sync message reply which was never sent because the plugin process was about to die. Since DGRAM sockets are not connection-oriented, when one end closes the connection the other end is not notifed. With STREAM sockets a 0-byte read happens when the other end closes the connection. So, the trivial fix would be just using STREAM instead of DGRAM, but in that case, sendmsg/recvmsg behaves a bit differently, there&apos;s not 1 to 1 relationship between sendmsg and recvmsg calls, we need to handle the message boundaries in the receiver. In Linux there&apos;s SOCK_SEQPACKET that does exactly what we want, it uses the same STREAM function but message boundaries in incoming datagrams are preserved, but it&apos;s Linux specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408015</commentid>
    <comment_count>1</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-05-23 10:03:55 -0700</bug_when>
    <thetext>Performance should be taken into consideration as well.
I&apos;m not an expert of the topic but I can imagine
that datagram sockets are faster because they are not
reliable - which is not a problem for us because our IPC
is happening locally. If this is the case I believe we should try
to work around the problem if it is possible.
Please clue me up if I&apos;m wrong about performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408019</commentid>
    <comment_count>2</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-05-23 10:08:59 -0700</bug_when>
    <thetext>FWIW, it looks like chromium uses SOCK_STREAM sockets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408020</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-23 10:12:04 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Performance should be taken into consideration as well.

Sure.

&gt; I&apos;m not an expert of the topic but I can imagine
&gt; that datagram sockets are faster because they are not
&gt; reliable - which is not a problem for us because our IPC
&gt; is happening locally. If this is the case I believe we should try
&gt; to work around the problem if it is possible.
&gt; Please clue me up if I&apos;m wrong about performance.

I&apos;m not an expert either, but yes, I guess DGRAM sockets should be faster. The only problem we have with DGRAM sockets is being notified when the other end closes the connection, which is not a frequent operation, so maybe we can continue using DGRAM sockets and add a new message only for unix ports to notify when the connection is closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408028</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-23 10:15:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; FWIW, it looks like chromium uses SOCK_STREAM sockets.

No, it seems they use SOCK_SEQPACKET in Linux, see

http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/zygote_host_linux.cc?view=markup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408030</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-23 10:16:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; FWIW, it looks like chromium uses SOCK_STREAM sockets.
&gt; 
&gt; No, it seems they use SOCK_SEQPACKET in Linux, see
&gt; 
&gt; http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/zygote_host_linux.cc?view=markup

well, which are indeed STREAM sockets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409774</commentid>
    <comment_count>6</comment_count>
      <attachid>94813</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-25 11:31:36 -0700</bug_when>
    <thetext>Created attachment 94813
Patch to use SOCK_STREAM

This patch uses SOCK_STREAM instead of SOCK_DGRAM handling message boundaries in the receiver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409776</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-25 11:33:23 -0700</bug_when>
    <thetext>Attachment 94813 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:327:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:334:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409781</commentid>
    <comment_count>8</comment_count>
      <attachid>94816</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-25 11:38:51 -0700</bug_when>
    <thetext>Created attachment 94816
Updated patch fixing style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409997</commentid>
    <comment_count>9</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-05-25 16:08:50 -0700</bug_when>
    <thetext>Could you do some kind of benchmark to compare the performance of stream IPC
with datagram? Would you like me to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410204</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-05-25 22:49:10 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; While implemeting the plugin process for the GTK port I noticed that when closing a page containing a plugin, the web process got blocked waiting for a sync message reply which was never sent because the plugin process was about to die. Since DGRAM sockets are not connection-oriented, when one end closes the connection the other end is not notifed. With STREAM sockets a 0-byte read happens when the other end closes the connection. So, the trivial fix would be just using STREAM instead of DGRAM, but in that case, sendmsg/recvmsg behaves a bit differently, there&apos;s not 1 to 1 relationship between sendmsg and recvmsg calls, we need to handle the message boundaries in the receiver. In Linux there&apos;s SOCK_SEQPACKET that does exactly what we want, it uses the same STREAM function but message boundaries in incoming datagrams are preserved, but it&apos;s Linux specific.

I think we should also consult Kimmo about this, since he converted ConnectionQt.cpp to use DGRAM sockets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410232</commentid>
    <comment_count>11</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-25 23:46:08 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; While implemeting the plugin process for the GTK port I noticed that when closing a page containing a plugin, the web process got blocked waiting for a sync message reply which was never sent because the plugin process was about to die. 

So the problem here is not the usage of SOCK_DGRAM per se. AFAICS the real problem is that the web process or UI process is not able to observe plugin process crash.

The original intention of the of using SOCK_DGRAM was two-fold:
 - it guarantees that the message is not buffered at any point redundantly (minimum latency)
 - it simplifies implementation greatly

The original solution to the real problem in this bug report was to listen the child process crash by other means.

The original reason of using SOCK_DGRAM instead of SOCK_SEQPACKET was to avoid discussion about Linux specificness of the original patch.

I would advice not using SOCK_STREAM. The main problem I see is the lack of guarantees about buffering and need for receiver to preserve buffers, split messages correctly etc. Also the implementation gets quite complex, as you need to buffer the file descriptors. Anecdotal evidence of this complexity might be for example that the suggested patch leaks file descriptors when connection is closed while the fds are in buffer. (AFAICS from very quick inspection, sorry if I&apos;m wrong). 

Also remember that Mac implementation is dgram-based, so it is very much easier to achieve similar performance characteristics, avoid unnecessary kludging in common parts and maybe even code reuse.

My suggestion would be to (not that it should matter in this point):
 1. Use SOCK_SEQPACKET on Linux, observe crashes with recvmsg == 0
 2. ifdef Non-Linux, use platform specific way of observing child process crash
 3. rename this bug

1. is needed only if you are perfectionist, otherwise only 2. suffices.

To do 2. cross-platform, you can for example open dummy SOCK_STREAM during fork and make that communicate the crash of child process. I would expect this to have much less overhead than redundant buffering of should-not-be-buffered messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410251</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 00:18:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #0)
&gt; &gt; While implemeting the plugin process for the GTK port I noticed that when closing a page containing a plugin, the web process got blocked waiting for a sync message reply which was never sent because the plugin process was about to die. 
&gt; 
&gt; So the problem here is not the usage of SOCK_DGRAM per se. AFAICS the real problem is that the web process or UI process is not able to observe plugin process crash.

Not exactly, we already detect when the child process crashes, and it works, the problem is when the child process closes the connection and finishes. In the case of the plugin process there&apos;s a timeout to finish the process. The plugin process closes the connection and the web process doesn&apos;t notice it, so it gets blocked waiting for the sync reply to DestroyPlugin message. If the plugin process finishes before the sync timeout, the web process is notified and it wakes up, otherwhise it wakes up after the sync timout. Either way the web process gets blocked for a while. So we want to be notified as soon as the connection is closed by the other end, no matter whether the process finishes or not.

&gt; The original intention of the of using SOCK_DGRAM was two-fold:
&gt;  - it guarantees that the message is not buffered at any point redundantly (minimum latency)
&gt;  - it simplifies implementation greatly

Yeah, I agree. 

&gt; The original solution to the real problem in this bug report was to listen the child process crash by other means.
&gt; 
&gt; The original reason of using SOCK_DGRAM instead of SOCK_SEQPACKET was to avoid discussion about Linux specificness of the original patch.

Yes, DGRAM and STREAM are more portable. SEQPACKET is exactly what we want, it uses DGRAM functions internally and we get notified when the other end closes the connection

&gt; I would advice not using SOCK_STREAM. The main problem I see is the lack of guarantees about buffering and need for receiver to preserve buffers, split messages correctly etc. Also the implementation gets quite complex, as you need to buffer the file descriptors. Anecdotal evidence of this complexity might be for example that the suggested patch leaks file descriptors when connection is closed while the fds are in buffer. (AFAICS from very quick inspection, sorry if I&apos;m wrong). 

oops :-P

&gt; Also remember that Mac implementation is dgram-based, so it is very much easier to achieve similar performance characteristics, avoid unnecessary kludging in common parts and maybe even code reuse.

Agree.

&gt; My suggestion would be to (not that it should matter in this point):
&gt;  1. Use SOCK_SEQPACKET on Linux, observe crashes with recvmsg == 0
&gt;  2. ifdef Non-Linux, use platform specific way of observing child process crash
&gt;  3. rename this bug
&gt; 
&gt; 1. is needed only if you are perfectionist, otherwise only 2. suffices.
&gt; 
&gt; To do 2. cross-platform, you can for example open dummy SOCK_STREAM during fork and make that communicate the crash of child process. I would expect this to have much less overhead than redundant buffering of should-not-be-buffered messages.

Wouldn&apos;t polling another socket be a performance issue too? Anyway, I&apos;ll try that way, using SEQPACKET when available and falling back to polling a dummy socket. Thank you very much for the comments. 

Btw, could you also take a look at patch attached to bug #60621, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410252</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 00:19:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; FWIW, it looks like chromium uses SOCK_STREAM sockets.
&gt; &gt; 
&gt; &gt; No, it seems they use SOCK_SEQPACKET in Linux, see
&gt; &gt; 
&gt; &gt; http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/zygote_host_linux.cc?view=markup
&gt; 
&gt; well, which are indeed STREAM sockets.

I was wrong, it actually used DGRAM functions internally, see:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=net/unix/af_unix.c;h=0722a25a3a33e6717b5e305d1cf0550b3abb9bb1;hb=HEAD#l1685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410295</commentid>
    <comment_count>14</comment_count>
      <attachid>94943</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 01:59:28 -0700</bug_when>
    <thetext>Created attachment 94943
New patch using SOCK_SEQPACKET when available

Actually, I think falling back to STREAM sockets is much easier than using a dummy socket, because we can use the same code for both STREAM and SEQPACKET sockets. For SEQPACKET m_readBufferSize == messageLength &amp;&amp; m_fileDescriptorsSize == messageInfo.attachmentCount() so it will never memmove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410305</commentid>
    <comment_count>15</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 02:16:07 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=94943) [details]
&gt; New patch using SOCK_SEQPACKET when available
&gt; 
&gt; Actually, I think falling back to STREAM sockets is much easier than using a dummy socket, because we can use the same code for both STREAM and SEQPACKET 


No you cannot, if you don&apos;t modify the current code.

If you do modify the current code, as with this patch, then you don&apos;t accept the point about redundant complexity and possible regressions the patch causes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410311</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 02:26:11 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Created an attachment (id=94943) [details] [details]
&gt; &gt; New patch using SOCK_SEQPACKET when available
&gt; &gt; 
&gt; &gt; Actually, I think falling back to STREAM sockets is much easier than using a dummy socket, because we can use the same code for both STREAM and SEQPACKET 
&gt; 
&gt; 
&gt; No you cannot, if you don&apos;t modify the current code.
&gt; 
&gt; If you do modify the current code, as with this patch, then you don&apos;t accept the point about redundant complexity and possible regressions the patch causes.

If it&apos;s matter of code complexity, I don&apos;t think this patch is that different than current code though, wouldn&apos;t it be better to split this again and use QSocket/GSocket?, Using GSocket this code would be just a few lines, and I guess it would be the same for Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410320</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 02:46:00 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Created an attachment (id=94943) [details] [details] [details]
&gt; &gt; &gt; New patch using SOCK_SEQPACKET when available
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually, I think falling back to STREAM sockets is much easier than using a dummy socket, because we can use the same code for both STREAM and SEQPACKET 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; No you cannot, if you don&apos;t modify the current code.
&gt; &gt; 
&gt; &gt; If you do modify the current code, as with this patch, then you don&apos;t accept the point about redundant complexity and possible regressions the patch causes.
&gt; 
&gt; If it&apos;s matter of code complexity, I don&apos;t think this patch is that different than current code though, wouldn&apos;t it be better to split this again and use QSocket/GSocket?, Using GSocket this code would be just a few lines, and I guess it would be the same for Qt.

And the same code would work on windows too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410321</commentid>
    <comment_count>18</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 02:51:12 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; wouldn&apos;t it be better to split this again and use QSocket/GSocket?, Using GSocket this code would be just a few lines, and I guess it would be the same for Qt.

You have to ask the person who introduced this to Gtk. I don&apos;t feel I&apos;m the correct person to express opinions about Gtk port.

As for Qt port:
Qt socket API cannot provide the features needed, and it&apos;s anyway more robust to use the direct low-level API calls for such a low-level feature as IPC. The datagram based implementation is IMHO superior to the stream based implementation for the rationale given already in this bug entry. As such, again in my opinion, it would be sad choise to regress the current implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410322</commentid>
    <comment_count>19</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 02:51:48 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; And the same code would work on windows too.

I don&apos;t think it&apos;s the correct solution to windows IPC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410329</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 03:23:44 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #17)
&gt; &gt; And the same code would work on windows too.
&gt; 
&gt; I don&apos;t think it&apos;s the correct solution to windows IPC.

Yes, you are right, and I agree using low level apis might be more robust even if it&apos;s more code and I think it&apos;s good sharing code. 

When you say the message is buffered redundantly, what do you mean? Comparing current code and the patch we have the followingf heap allocations:

 - Current code: We allocate the readBuffer in platformInitialize(), then everytime readyReadHandler() is called
  + attachmentDescriptorBuffer is allocated/deallocated
  + attachmentSizes is allocated/deallocated
  + fileDescriptors is allocated/deallocated

 - With the patch: We allocate readBuffer and fileDescriptors buffers in platformInitialize(), then everytime readyReadHandler() is called:
  + attachmentDescriptorBuffer is allocated/deallocated in readBytesFromSocket()
  + attachmentSizes  is allocated/deallocated in processMessage()

So we are even reducing the number of allocations/deallocations. We could avoid also attachmentDescriptorBuffer allocation in both cases using alloca() if available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410342</commentid>
    <comment_count>21</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 03:46:23 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; When you say the message is buffered redundantly, what do you mean? 

I mean, SOCK_STREAM sockets are buffered. The socket API doesn&apos;t say when and what amount of data is sent.

I also mean:
Kernel does not guarantee anything regrading the message sizes.

In other words:
With stream socket, possible non-message-border-aligned data has to survive across your read buffer. Thus you need to buffer fractional messages in your application code.

Quickly glancing to the diff I would say your patch doesn&apos;t take this into account, but again, sorry if I&apos;m wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410345</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 03:59:14 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; When you say the message is buffered redundantly, what do you mean? 
&gt; 
&gt; I mean, SOCK_STREAM sockets are buffered. The socket API doesn&apos;t say when and what amount of data is sent.

Yes, note that STREAM socket would only be used if SOCK_SEQPACKET is not available.

&gt; I also mean:
&gt; Kernel does not guarantee anything regrading the message sizes.
&gt; 
&gt; In other words:
&gt; With stream socket, possible non-message-border-aligned data has to survive across your read buffer. Thus you need to buffer fractional messages in your application code.

Yes, but we use the same buffer by simply moving the outstanding memory at the beginning of the buffer after processing every message, then we simply make sure to not read more memory that what is available in the buffer. You could also read more than one message with a single recvmsg() reducing the amount of syscalls. 

&gt; Quickly glancing to the diff I would say your patch doesn&apos;t take this into account, but again, sorry if I&apos;m wrong.

Yes, it handles it for both the bytes read and the file descriptors received using a single buffer in both cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410359</commentid>
    <comment_count>23</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 05:07:11 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Quickly glancing to the diff I would say your patch doesn&apos;t take this into account, but again, sorry if I&apos;m wrong.
&gt; 
&gt; Yes, it handles it for both the bytes read and the file descriptors received using a single buffer in both cases.

Ok, good. sorry.

&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; When you say the message is buffered redundantly, what do you mean? 
&gt; &gt; 
&gt; &gt; I mean, SOCK_STREAM sockets are buffered. The socket API doesn&apos;t say when and what amount of data is sent.
&gt; 
&gt; Yes, note that STREAM socket would only be used if SOCK_SEQPACKET is not available.

First you say STREAM is not used..

&gt; You could also read more than one message with a single recvmsg() reducing the amount of syscalls. 

..then you argument justification of the complexity due to a STREAM feature? 

Look, I gotta stop right now wasting your and my own time. I&apos;m not a reviewer, I don&apos;t have much to say about this issue and you don&apos;t need to listen to my argumentation. Certainly this is even more the case with Gtk port.

To conclude my stand here: You are solving the problem of notifying of closing the connection. I don&apos;t think implementing entirely correct, arbitrary stream protocol parsing is the way to do it. The IPC is designed as a datagram protocol. Requiring 100% correct stream protocol implementation is insanity.

I could think of few other, far simpler implementations for close notifications. One is the socket thing, which solves the crash problem too. &quot;The orderly shutdown&quot; scenario can be solved by also sending a simple message. For example, you can send datagram &quot;KIMMO&quot; to signify close, and that will work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410363</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 05:27:42 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; First you say STREAM is not used..

Yes, I meant it&apos;s used only as a fallback for non-linux systems.

&gt; &gt; You could also read more than one message with a single recvmsg() reducing the amount of syscalls. 
&gt; 
&gt; ..then you argument justification of the complexity due to a STREAM feature? 

you are right, that comment is  out of place.

&gt; Look, I gotta stop right now wasting your and my own time. I&apos;m not a reviewer, I don&apos;t have much to say about this issue and you don&apos;t need to listen to my argumentation. Certainly this is even more the case with Gtk port.

I appreciate your argumentation, the Qt port will have the same problem when plugin process is implemented, I&apos;m just trying to find the better way to fix it.

&gt; 
&gt; To conclude my stand here: You are solving the problem of notifying of closing the connection. I don&apos;t think implementing entirely correct, arbitrary stream protocol parsing is the way to do it. The IPC is designed as a datagram protocol. Requiring 100% correct stream protocol implementation is insanity.

I agree, but this is only for the fallback case, what I was trying to say is that the same implementation that works for stream sockets, works for dgram sockets too without performance penalty. 

&gt; I could think of few other, far simpler implementations for close notifications. One is the socket thing, which solves the crash problem too.

I don&apos;t think the socket thing is that easy, we would need another pair of connected sockets, right? so we would need to keep two sockets per connection and close both when the connection finishes. But only when SOCK_SEQPACKET is not available.

&gt; &quot;The orderly shutdown&quot; scenario can be solved by also sending a simple message. For example, you can send datagram &quot;KIMMO&quot; to signify close, and that will work.

That was my first proposal, and apple guys said: there must be another way to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410365</commentid>
    <comment_count>25</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-26 05:40:05 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; I appreciate your argumentation

This doesn&apos;t really come across. I don&apos;t argument for fun, and this discussion is still going nowhere!

&gt; I don&apos;t think the socket thing is that easy, we would need another pair of connected sockets, right? so we would need to keep two sockets per connection and close both when the connection finishes. But only when SOCK_SEQPACKET is not available.

I would expect this be &quot;easier&quot; than what you are currently doing.

I haven&apos;t implemented it, but socketpair before fork gives you the sockets, and then you just observe them..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410369</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 05:47:47 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; I appreciate your argumentation
&gt; 
&gt; This doesn&apos;t really come across. I don&apos;t argument for fun, and this discussion is still going nowhere!

I meant I don&apos;t think the discussion is going nowhere and knowing what other people think it&apos;s helpful for me to see how we can solve this in a way we all agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410402</commentid>
    <comment_count>27</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-05-26 07:05:57 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; To conclude my stand here: You are solving the problem of notifying of closing the connection. I don&apos;t think implementing entirely correct, arbitrary stream protocol parsing is the way to do it. The IPC is designed as a datagram protocol. Requiring 100% correct stream protocol implementation is insanity.
&gt; 
&gt; I could think of few other, far simpler implementations for close notifications. One is the socket thing, which solves the crash problem too. &quot;The orderly shutdown&quot; scenario can be solved by also sending a simple message. For example, you can send datagram &quot;KIMMO&quot; to signify close, and that will work.

I agree with Kimmo here. The current DGRAM socket based code is optimal for IPC and thus the common case. I don&apos;t think we should pessimize the common case just to cover the close notification with the same mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410471</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 08:55:15 -0700</bug_when>
    <thetext>Ok, there are two different things here:

 - Use SEQPACKET when available
 - How to implement the fallback when SEQPACKET is not available

I think we agree on the first one, at least, so I&apos;ll split the patch and open a new bug report for the second one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410481</commentid>
    <comment_count>29</comment_count>
      <attachid>94982</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 09:01:01 -0700</bug_when>
    <thetext>Created attachment 94982
Patch to use SEQPACKET when possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410498</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 09:11:40 -0700</bug_when>
    <thetext>Just created a new bug report for the second issue:

https://bugs.webkit.org/show_bug.cgi?id=61538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410511</commentid>
    <comment_count>31</comment_count>
      <attachid>94982</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-26 09:21:28 -0700</bug_when>
    <thetext>Comment on attachment 94982
Patch to use SEQPACKET when possible

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

This approach seems optimal for systems with SOCKET_SEQPACKET.

&gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:196
&gt; +        // Connection has been closed.
&gt; +        connectionDidClose();
&gt; +        return;
&gt; +    }

I think the method call here makes the comment redundant.

&gt; Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:47
&gt; +#ifdef SOCK_SEQPACKET
&gt; +#define SOCKET_TYPE SOCK_SEQPACKET
&gt; +#else
&gt; +#define SOCKET_TYPE SOCK_DGRAM
&gt; +#endif
&gt; +

It&apos;s probably better to use SOCK_SEQPACKET directly until we have the fallback. People packaging for platforms that don&apos;t support SOCK_SEQPACKET will have some advance notice that we currently fail for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410518</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-26 09:29:13 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 94982 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94982&amp;action=review
&gt; 
&gt; This approach seems optimal for systems with SOCKET_SEQPACKET.
&gt; 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:196
&gt; &gt; +        // Connection has been closed.
&gt; &gt; +        connectionDidClose();
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; I think the method call here makes the comment redundant.

Right, I added the comment because it&apos;s not obvious that a 0-byte read means the other end closed the connection, but the method name makes it clear, so I&apos;ll remove the comment

&gt; &gt; Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:47
&gt; &gt; +#ifdef SOCK_SEQPACKET
&gt; &gt; +#define SOCKET_TYPE SOCK_SEQPACKET
&gt; &gt; +#else
&gt; &gt; +#define SOCKET_TYPE SOCK_DGRAM
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; It&apos;s probably better to use SOCK_SEQPACKET directly until we have the fallback. People packaging for platforms that don&apos;t support SOCK_SEQPACKET will have some advance notice that we currently fail for them.

Well, it will work with SOCK_DGRAM, it&apos;s just in a few corner cases that the web process might get blocked for a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410564</commentid>
    <comment_count>33</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-05-26 10:14:15 -0700</bug_when>
    <thetext>One of the requirements of CoreIPC is that you should be able to know when the connection is closed. Just because a connection is closed doesn&apos;t mean that the process on the other end went away either, as is the case with the plug-in process.

I&apos;d also like to see Connection::setShouldCloseConnectionOnProcessTermination to be removed. When the process is terminated, the connection should know this and close automatically.

Again, looking at the Chromium IPC:

http://src.chromium.org/viewvc/chrome/trunk/src/ipc/ipc_channel_posix.cc?revision=82485&amp;view=markup

they are using a stream socket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411708</commentid>
    <comment_count>34</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-05-27 16:27:16 -0700</bug_when>
    <thetext>My opinion (and not more) after reading the discussion. If we want to support systems without SOCK_SEQPACKET (and I guess we do) then we need to implement the fallback for SOCK_DGRAM. So, I don&apos;t think we should implement a path for SOCK_SEQPACKET at all (for systems where it is available). Furthermore, if SOCK_DGRAM is more effective than SOCK_SEQPACKET (I guess Kimmo and Simon believes that it is) than it is better to use SOCK_DGRAM with the fallback everywhere. Regarding to Anders&apos;s comment: I don&apos;t think it is a really serious problem that we have a quirk for platforms that implement CoreIPC with sightly different technique than what is used on Mac and Windows (and Chromium).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412128</commentid>
    <comment_count>35</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-05-29 23:10:25 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; My opinion (and not more) after reading the discussion. If we want to support systems without SOCK_SEQPACKET (and I guess we do) then we need to implement the fallback for SOCK_DGRAM.
&gt; So, I don&apos;t think we should implement a path for SOCK_SEQPACKET at all (for systems where it is available).

I don&apos;t really understand these two comments.
There&apos;s no separate codepath for SOCK_SEQPACKET. The main codepath for SEQPACKET will be identical to DGRAM, eg. you can just switch the socket type and it will work. 

The difference with it is that with SEQPACKET you can observe the closing of the stream. And here is where you need the fallback if DGRAM is used. And the fallback can be an extra dummy stream socket.

&gt; Furthermore, if SOCK_DGRAM is more effective than SOCK_SEQPACKET (I guess Kimmo and Simon believes that it is) than it is better to use SOCK_DGRAM with the fallback everywhere.

No, this is wrong interpretation. I never said that there would be a perf difference in SEQPACKET vs. DGRAM. In my comments &quot;datagram&quot; is used to define the type of the message handling, as in as opposed to &quot;stream&quot;. IOW: SEQPACKET == datagram.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412164</commentid>
    <comment_count>36</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-05-30 01:39:56 -0700</bug_when>
    <thetext>I see.In this case it seems like the approach of the patch is good for everyone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485400</commentid>
    <comment_count>37</comment_count>
      <attachid>94982</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 12:39:28 -0700</bug_when>
    <thetext>Comment on attachment 94982
Patch to use SEQPACKET when possible

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

&gt;&gt;&gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:196
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; I think the method call here makes the comment redundant.
&gt; 
&gt; Right, I added the comment because it&apos;s not obvious that a 0-byte read means the other end closed the connection, but the method name makes it clear, so I&apos;ll remove the comment

A comment you could leave in would be &quot;// A zero byte read indicates that the other end closed the connection.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485914</commentid>
    <comment_count>38</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-18 01:47:29 -0700</bug_when>
    <thetext>Committed r97728: &lt;http://trac.webkit.org/changeset/97728&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94813</attachid>
            <date>2011-05-25 11:31:36 -0700</date>
            <delta_ts>2011-05-25 11:38:51 -0700</delta_ts>
            <desc>Patch to use SOCK_STREAM</desc>
            <filename>wk2-stream-sockets.diff</filename>
            <type>text/plain</type>
            <size>13535</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3OGJlNjZkLi41NDMwYjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTEtMDUtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtVTklY
XSBEb24ndCB1c2UgU09DS19ER1JBTSBpbiBzb2NrZXRwYWlyKCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjg3CisKKyAgICAgICAgVXNlIFNPQ0tf
U1RSRUFNIGluc3RlYWQgb2YgU09DS19ER1JBTSBzb2NrZXRzLiBSZXdvcmsgdGhlIG1lc3NhZ2UK
KyAgICAgICAgcmVjZWl2ZXIgY29kZSB0byBzdXBwb3J0IHN0cmVhbSBzb2NrZXRzLCBzaW5jZSBp
dCByZXF1aXJlcyB0byBoYW5kbGUKKyAgICAgICAgbWVzc2FnZSBib3VuZGFyaWVzLgorCisgICAg
ICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9u
Ojpwcm9jZXNzTWVzc2FnZSk6IFByb2Nlc3MgbWVzc2FnZXMgZnJvbSBkYXRhCisgICAgICAgIGFs
cmVhZHkgcmVjZWl2ZWQuCisgICAgICAgIChDb3JlSVBDOjpyZWFkQnl0ZXNGcm9tU29ja2V0KTog
UmVhZCBmcm9tIHNvY2tldCB1c2luZyByZWN2bXNnLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0
ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNo
ZXI6OmxhdW5jaFByb2Nlc3MpOgorCiAyMDExLTA1LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1v
dGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHRoZSBXZWIgSW5zcGVjdG9yIGJyaW5nIHRo
ZSByaWdodCB3aW5kb3cgdG8gdGhlIGZyb250IHdoZW4gZG9ja2VkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA2MjljN2IwLi43MzM2NzYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzM3
LDkgKzMzNywxMiBAQCBwcml2YXRlOgogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8
IE9TKFNZTUJJQU4pCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgogICAg
IHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOworICAgIGJvb2wgcHJvY2Vzc01lc3NhZ2UoKTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7Ci0gICAgc2l6ZV90IG1fY3VycmVudE1l
c3NhZ2VTaXplOworICAgIHNpemVfdCBtX3JlYWRCdWZmZXJTaXplOworICAgIFZlY3RvcjxpbnQ+
IG1fZmlsZURlc2NyaXB0b3JzOworICAgIHNpemVfdCBtX2ZpbGVEZXNjcmlwdG9yc1NpemU7CiAg
ICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5j
cHAKaW5kZXggOTJmZmZmMy4uMTUwNGJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC05NCw3ICs5NCw5
IEBAIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRp
ZmllcikKIHsKICAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpZGVudGlmaWVyOwogICAgIG1fcmVh
ZEJ1ZmZlci5yZXNpemUobWVzc2FnZU1heFNpemUpOwotICAgIG1fY3VycmVudE1lc3NhZ2VTaXpl
ID0gMDsKKyAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKKyAgICBtX2ZpbGVEZXNjcmlwdG9ycy5y
ZXNpemUoYXR0YWNobWVudE1heEFtb3VudCk7CisgICAgbV9maWxlRGVzY3JpcHRvcnNTaXplID0g
MDsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIG1fc29ja2V0Tm90aWZpZXIgPSAwOwpAQCAtMTU4
LDExNiArMTYwLDE3OSBAQCBwcml2YXRlOgogICAgIFQmIG1fYXR0YWNobWVudHM7CiB9OwogCi12
b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQorYm9vbCBDb25uZWN0aW9uOjpwcm9j
ZXNzTWVzc2FnZSgpCiB7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPCBzaXplb2YoTWVzc2Fn
ZUluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50OF90KiBtZXNzYWdlRGF0
YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87Cisg
ICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgbWVzc2FnZURhdGEsIHNpemVvZihtZXNzYWdlSW5mbykp
OworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBzaXplX3Qg
bWVzc2FnZUxlbmd0aCA9IHNpemVvZihNZXNzYWdlSW5mbykgKyBtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKSAqIHNpemVvZihzaXplX3QpICsgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlP
T0woKSA/IDAgOiBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICBpZiAobV9yZWFkQnVmZmVy
U2l6ZSA8IG1lc3NhZ2VMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIERlcXVl
PEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzOwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFNvY2tldE5v
dGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmllckVuYWJsZXIobV9zb2NrZXROb3RpZmll
cik7Ci0jZW5kaWYKICAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxEZXF1ZTxBdHRhY2htZW50
PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFj
aG1lbnRzKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5
OwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gYXR0YWNobWVudERlc2NyaXB0b3JCdWZmZXIgPSBh
ZG9wdEFycmF5UHRyKG5ldyBjaGFyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVu
dE1heEFtb3VudCkpXSk7Ci0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOwotICAgIG1lbXNldCgm
bWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07
Ci0gICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKyAgICBpbnQgYXR0YWNobWVudENv
dW50ID0gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnRD
b3VudCkgeworICAgICAgICBPd25BcnJheVB0cjxzaXplX3Q+IGF0dGFjaG1lbnRTaXplcyA9IGFk
b3B0QXJyYXlQdHIobmV3IHNpemVfdFthdHRhY2htZW50Q291bnRdKTsKKyAgICAgICAgbWVtY3B5
KGF0dGFjaG1lbnRTaXplcy5nZXQoKSwgbWVzc2FnZURhdGEsIHNpemVvZihzaXplX3QpICogYXR0
YWNobWVudENvdW50KTsKKyAgICAgICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKHNpemVfdCkgKiBh
dHRhY2htZW50Q291bnQ7CiAKLSAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudERl
c2NyaXB0b3JCdWZmZXIuZ2V0KCk7Ci0gICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IENNU0df
U1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOworICAgICAgICBpZiAo
bWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQorICAgICAgICAgICAgYXR0YWNobWVudENv
dW50LS07CiAKLSAgICBpb3ZbMF0uaW92X2Jhc2UgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOwotICAg
IGlvdlswXS5pb3ZfbGVuID0gbV9yZWFkQnVmZmVyLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkKKyAgICAgICAgICAgIGF0dGFjaG1lbnRz
LmFwcGVuZChBdHRhY2htZW50KG1fZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNb
aV0pKTsKIAotICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsKLSAgICBtZXNzYWdlLm1zZ19pb3Zs
ZW4gPSAxOworICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobWVzc2FnZUluZm8uYm9keVNpemUoKSk7CiAKKyAgICAgICAgICAg
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgaGFuZGxl
LmFkb3B0RnJvbUF0dGFjaG1lbnQobV9maWxlRGVzY3JpcHRvcnNbYXR0YWNobWVudENvdW50XSwg
YXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRDb3VudF0pOworICAgICAgICAgICAgaWYgKGhhbmRs
ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KIAotICAgIGludCBtZXNz
YWdlTGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29j
a2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBvb2xNZXNzYWdlQm9k
eSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6UmVhZE9ubHkpOworICAgICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0cnVjdCBj
bXNnaGRyKiBjb250cm9sTWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOworICAgIEFT
U0VSVChhdHRhY2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgp
ID8gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUluZm8uYXR0YWNo
bWVudENvdW50KCkpOwogCi0gICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87Ci0gICAgdW5zaWdu
ZWQgY2hhciogbWVzc2FnZURhdGEgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOworICAgIHVpbnQ4X3Qq
IG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7CisgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2Fn
ZUJvZHlPT0woKSkKKyAgICAgICAgbWVzc2FnZUJvZHkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihvb2xNZXNzYWdlQm9keS0+ZGF0YSgpKTsKIAotICAgIG1lbWNweSgmbWVzc2FnZUluZm8s
IG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2FnZUluZm8pKTsKLSAgICBBU1NFUlQobWVzc2FnZUxl
bmd0aCA9PSBzaXplb2YobWVzc2FnZUluZm8pICsgbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50
KCkgKiBzaXplb2Yoc2l6ZV90KSArIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkgPyAw
IDogbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOworICAgIEFyZ3VtZW50RGVjb2RlciogYXJndW1l
bnREZWNvZGVyOworICAgIGlmIChhdHRhY2htZW50cy5pc0VtcHR5KCkpCisgICAgICAgIGFyZ3Vt
ZW50RGVjb2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZv
LmJvZHlTaXplKCkpOworICAgIGVsc2UKKyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFy
Z3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSwgYXR0YWNo
bWVudHMpOwogCi0gICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKKyAgICBw
cm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBhZG9wdFB0cihh
cmd1bWVudERlY29kZXIpKTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29s
TWVzc2FnZUJvZHk7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPiBtZXNzYWdlTGVuZ3RoKSB7
CisgICAgICAgIG1lbW1vdmUobV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9yZWFkQnVmZmVyLmRhdGEo
KSArIG1lc3NhZ2VMZW5ndGgsIG1fcmVhZEJ1ZmZlclNpemUgLSBtZXNzYWdlTGVuZ3RoKTsKKyAg
ICAgICAgbV9yZWFkQnVmZmVyU2l6ZSAtPSBtZXNzYWdlTGVuZ3RoOworICAgIH0gZWxzZQorICAg
ICAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKIAogICAgIGlmIChtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKSkgewotICAgICAgICBpZiAoY29udHJvbE1lc3NhZ2UgJiYgY29udHJvbE1lc3Nh
Z2UtPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ190eXBl
ID09IFNDTV9SSUdIVFMpIHsKLSAgICAgICAgICAgIE93bkFycmF5UHRyPHNpemVfdD4gYXR0YWNo
bWVudFNpemVzID0gYWRvcHRBcnJheVB0cihuZXcgc2l6ZV90W21lc3NhZ2VJbmZvLmF0dGFjaG1l
bnRDb3VudCgpXSk7Ci0gICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVzLmdldCgpLCBt
ZXNzYWdlRGF0YSwgc2l6ZW9mKHNpemVfdCkgKiBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQo
KSk7CisgICAgICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yc1NpemUgPiBtZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKSkgeworICAgICAgICAgICAgc2l6ZV90IGZpbGVEZXNjcmlwdG9yc0xlbmd0
aCA9IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKGludCk7CisgICAgICAg
ICAgICBtZW1tb3ZlKG1fZmlsZURlc2NyaXB0b3JzLmRhdGEoKSwgbV9maWxlRGVzY3JpcHRvcnMu
ZGF0YSgpICsgZmlsZURlc2NyaXB0b3JzTGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9yc1NpemUgLSBm
aWxlRGVzY3JpcHRvcnNMZW5ndGgpOworICAgICAgICAgICAgbV9maWxlRGVzY3JpcHRvcnNTaXpl
IC09IGZpbGVEZXNjcmlwdG9yc0xlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X2ZpbGVEZXNjcmlwdG9yc1NpemUgPSAwOworICAgIH0KKworCisgICAgcmV0dXJuIHRydWU7Cit9
CiAKLSAgICAgICAgICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihhdHRhY2htZW50U2l6ZXMpOwor
c3RhdGljIHNzaXplX3QgcmVhZEJ5dGVzRnJvbVNvY2tldChpbnQgc29ja2V0RGVzY3JpcHRvciwg
dWludDhfdCogYnVmZmVyLCBpbnQgY291bnQsIGludCogZmlsZURlc2NyaXB0b3JzLCBzaXplX3Qq
IGZpbGVEZXNjcmlwdG9yc0NvdW50KQoreworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAg
ICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CiAKLSAgICAgICAgICAgIE93
bkFycmF5UHRyPGludD4gZmlsZURlc2NyaXB0b3JzID0gYWRvcHRBcnJheVB0cihuZXcgaW50W21l
c3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXSk7Ci0gICAgICAgICAgICBtZW1jcHkoZmlsZURl
c2NyaXB0b3JzLmdldCgpLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoaW50KSAq
IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzFd
OworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CiAKLSAgICAgICAgICAgIGludCBh
dHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKKyAgICBtZXNz
YWdlLm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShzaXplb2YoaW50KSAqIGF0dGFjaG1lbnRN
YXhBbW91bnQpOworICAgIE93bkFycmF5UHRyPGNoYXI+IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVm
ZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttZXNzYWdlLm1zZ19jb250cm9sbGVuXSk7Cisg
ICAgbWVtc2V0KGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyLmdldCgpLCAwLCBtZXNzYWdlLm1z
Z19jb250cm9sbGVuKTsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudERlc2Ny
aXB0b3JCdWZmZXIuZ2V0KCk7CiAKLSAgICAgICAgICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3Nh
Z2VCb2R5T09MKCkpCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudENvdW50LS07CisgICAgaW92
WzBdLmlvdl9iYXNlID0gYnVmZmVyOworICAgIGlvdlswXS5pb3ZfbGVuID0gY291bnQ7CiAKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoZmNudGwoZmlsZURlc2NyaXB0b3JzW2ldLCBGX1NFVEZMLCBG
RF9DTE9FWEVDKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsK
KyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwogCi0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGF0dGFjaG1lbnRDb3VudDsgKytpKQotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRz
LmFwcGVuZChBdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1tpXSwgYXR0YWNobWVudFNpemVzW2ld
KSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3NpemVfdCBieXRlc1JlYWQgPSByZWN2
bXNnKHNvY2tldERlc2NyaXB0b3IsICZtZXNzYWdlLCAwKTsKIAotICAgICAgICAgICAgaWYgKG1l
c3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCht
ZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAg
ICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwot
ICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9y
c1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdlOworICAg
ICAgICBmb3IgKGNvbnRyb2xNZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7IGNvbnRy
b2xNZXNzYWdlOyBjb250cm9sTWVzc2FnZSA9IENNU0dfTlhUSERSKCZtZXNzYWdlLCBjb250cm9s
TWVzc2FnZSkpIHsKKyAgICAgICAgICAgIGlmIChjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9
PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykg
eworICAgICAgICAgICAgICAgICpmaWxlRGVzY3JpcHRvcnNDb3VudCA9IChjb250cm9sTWVzc2Fn
ZS0+Y21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTsKKyAgICAgICAgICAgICAg
ICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXpl
b2YoaW50KSAqICpmaWxlRGVzY3JpcHRvcnNDb3VudCk7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8ICpmaWxlRGVzY3JpcHRvcnNDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZE
X0NMT0VYRUMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0g
RUlOVFIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVz
c2FnZSwgY29udHJvbE1lc3NhZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgICpmaWxlRGVzY3JpcHRv
cnNDb3VudCA9IDA7CisKKyAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDsKICAgICB9CiAKLSAgICBB
U1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0wo
KSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZvLmF0dGFj
aG1lbnRDb3VudCgpKTsKKyAgICByZXR1cm4gLTE7Cit9CiAKLSAgICB1bnNpZ25lZCBjaGFyKiBt
ZXNzYWdlQm9keSA9IG1lc3NhZ2VEYXRhOwordm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5k
bGVyKCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3Vh
cmQgc29ja2V0Tm90aWZpZXJFbmFibGVyKG1fc29ja2V0Tm90aWZpZXIpOworI2VuZGlmCiAKLSAg
ICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAgICAgICBtZXNzYWdlQm9k
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9vbE1lc3NhZ2VCb2R5LT5kYXRh
KCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHNpemVfdCBmaWxlRGVzY3JpcHRvcnND
b3VudCA9IDA7CisgICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1fcmVhZEJ1ZmZlci5zaXpl
KCkgLSBtX3JlYWRCdWZmZXJTaXplOworICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZCA9IHJlYWRC
eXRlc0Zyb21Tb2NrZXQobV9zb2NrZXREZXNjcmlwdG9yLCBtX3JlYWRCdWZmZXIuZGF0YSgpICsg
bV9yZWFkQnVmZmVyU2l6ZSwgYnl0ZXNUb1JlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ZpbGVEZXNjcmlwdG9ycy5kYXRhKCkgKyBtX2ZpbGVE
ZXNjcmlwdG9yc1NpemUsICZmaWxlRGVzY3JpcHRvcnNDb3VudCk7CiAKLSAgICBBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50RGVjb2RlcjsKLSAgICBpZiAoYXR0YWNobWVudHMuaXNFbXB0eSgpKQot
ICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5
LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50RGVj
b2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlT
aXplKCksIGF0dGFjaG1lbnRzKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAgICAg
ICAgICAgIC8vIEVJTlRSIHdhcyBhbHJlYWR5IGhhbmRsZWQgYnkgcmVhZEJ5dGVzRnJvbVNvY2tl
dC4KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxP
Q0spCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2Vzc0luY29taW5nTWVzc2Fn
ZShtZXNzYWdlSW5mby5tZXNzYWdlSUQoKSwgYWRvcHRQdHIoYXJndW1lbnREZWNvZGVyKSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIGVycm9ycyBoZXJlPworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBBU1NFUlQoIWNvbnRyb2xNZXNzYWdlKTsKKyAg
ICAgICAgbV9yZWFkQnVmZmVyU2l6ZSArPSBieXRlc1JlYWQ7CisgICAgICAgIG1fZmlsZURlc2Ny
aXB0b3JzU2l6ZSArPSBmaWxlRGVzY3JpcHRvcnNDb3VudDsKKworICAgICAgICBpZiAoYnl0ZXNS
ZWFkID09IDApIHsKKyAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gY2xvc2VkLgorICAgICAgICAg
ICAgY29ubmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBQcm9jZXNzIG1lc3NhZ2VzIGZyb20gZGF0YSByZWNlaXZlZC4KKyAgICAg
ICAgd2hpbGUgKHByb2Nlc3NNZXNzYWdlKCkpOworICAgIH0KIH0KIAogYm9vbCBDb25uZWN0aW9u
OjpvcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9n
dGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAppbmRleCBmODc3MjA5Li4zNmQyOWJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NM
YXVuY2hlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0
ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgUHJvY2Vzc0xh
dW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBHUGlkIHBpZCA9IDA7CiAKICAgICBpbnQgc29j
a2V0c1syXTsKLSAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBzb2Nr
ZXRzKSA8IDApIHsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwg
c29ja2V0cykgPCAwKSB7CiAgICAgICAgIGdfcHJpbnRlcnIoIkNyZWF0aW9uIG9mIHNvY2tldCBm
YWlsZWQ6ICVzLlxuIiwgZ19zdHJlcnJvcihlcnJubykpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94816</attachid>
            <date>2011-05-25 11:38:51 -0700</date>
            <delta_ts>2011-05-26 01:59:28 -0700</delta_ts>
            <desc>Updated patch fixing style issues</desc>
            <filename>wk2-stream-sockets2.diff</filename>
            <type>text/plain</type>
            <size>13534</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3OGJlNjZkLi41NDMwYjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTEtMDUtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtVTklY
XSBEb24ndCB1c2UgU09DS19ER1JBTSBpbiBzb2NrZXRwYWlyKCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjg3CisKKyAgICAgICAgVXNlIFNPQ0tf
U1RSRUFNIGluc3RlYWQgb2YgU09DS19ER1JBTSBzb2NrZXRzLiBSZXdvcmsgdGhlIG1lc3NhZ2UK
KyAgICAgICAgcmVjZWl2ZXIgY29kZSB0byBzdXBwb3J0IHN0cmVhbSBzb2NrZXRzLCBzaW5jZSBp
dCByZXF1aXJlcyB0byBoYW5kbGUKKyAgICAgICAgbWVzc2FnZSBib3VuZGFyaWVzLgorCisgICAg
ICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5l
Y3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9u
Ojpwcm9jZXNzTWVzc2FnZSk6IFByb2Nlc3MgbWVzc2FnZXMgZnJvbSBkYXRhCisgICAgICAgIGFs
cmVhZHkgcmVjZWl2ZWQuCisgICAgICAgIChDb3JlSVBDOjpyZWFkQnl0ZXNGcm9tU29ja2V0KTog
UmVhZCBmcm9tIHNvY2tldCB1c2luZyByZWN2bXNnLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2d0
ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNo
ZXI6OmxhdW5jaFByb2Nlc3MpOgorCiAyMDExLTA1LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1v
dGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHRoZSBXZWIgSW5zcGVjdG9yIGJyaW5nIHRo
ZSByaWdodCB3aW5kb3cgdG8gdGhlIGZyb250IHdoZW4gZG9ja2VkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA2MjljN2IwLi43MzM2NzYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzM3
LDkgKzMzNywxMiBAQCBwcml2YXRlOgogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8
IE9TKFNZTUJJQU4pCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgogICAg
IHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOworICAgIGJvb2wgcHJvY2Vzc01lc3NhZ2UoKTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7Ci0gICAgc2l6ZV90IG1fY3VycmVudE1l
c3NhZ2VTaXplOworICAgIHNpemVfdCBtX3JlYWRCdWZmZXJTaXplOworICAgIFZlY3RvcjxpbnQ+
IG1fZmlsZURlc2NyaXB0b3JzOworICAgIHNpemVfdCBtX2ZpbGVEZXNjcmlwdG9yc1NpemU7CiAg
ICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5j
cHAKaW5kZXggOTJmZmZmMy4uNjUwMDczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC05NCw3ICs5NCw5
IEBAIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRp
ZmllcikKIHsKICAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpZGVudGlmaWVyOwogICAgIG1fcmVh
ZEJ1ZmZlci5yZXNpemUobWVzc2FnZU1heFNpemUpOwotICAgIG1fY3VycmVudE1lc3NhZ2VTaXpl
ID0gMDsKKyAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKKyAgICBtX2ZpbGVEZXNjcmlwdG9ycy5y
ZXNpemUoYXR0YWNobWVudE1heEFtb3VudCk7CisgICAgbV9maWxlRGVzY3JpcHRvcnNTaXplID0g
MDsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIG1fc29ja2V0Tm90aWZpZXIgPSAwOwpAQCAtMTU4
LDExNiArMTYwLDE3OSBAQCBwcml2YXRlOgogICAgIFQmIG1fYXR0YWNobWVudHM7CiB9OwogCi12
b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQorYm9vbCBDb25uZWN0aW9uOjpwcm9j
ZXNzTWVzc2FnZSgpCiB7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPCBzaXplb2YoTWVzc2Fn
ZUluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50OF90KiBtZXNzYWdlRGF0
YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87Cisg
ICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgbWVzc2FnZURhdGEsIHNpemVvZihtZXNzYWdlSW5mbykp
OworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBzaXplX3Qg
bWVzc2FnZUxlbmd0aCA9IHNpemVvZihNZXNzYWdlSW5mbykgKyBtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKSAqIHNpemVvZihzaXplX3QpICsgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlP
T0woKSA/IDAgOiBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICBpZiAobV9yZWFkQnVmZmVy
U2l6ZSA8IG1lc3NhZ2VMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIERlcXVl
PEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzOwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFNvY2tldE5v
dGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmllckVuYWJsZXIobV9zb2NrZXROb3RpZmll
cik7Ci0jZW5kaWYKICAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxEZXF1ZTxBdHRhY2htZW50
PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFj
aG1lbnRzKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5
OwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gYXR0YWNobWVudERlc2NyaXB0b3JCdWZmZXIgPSBh
ZG9wdEFycmF5UHRyKG5ldyBjaGFyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVu
dE1heEFtb3VudCkpXSk7Ci0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOwotICAgIG1lbXNldCgm
bWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07
Ci0gICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKyAgICBpbnQgYXR0YWNobWVudENv
dW50ID0gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnRD
b3VudCkgeworICAgICAgICBPd25BcnJheVB0cjxzaXplX3Q+IGF0dGFjaG1lbnRTaXplcyA9IGFk
b3B0QXJyYXlQdHIobmV3IHNpemVfdFthdHRhY2htZW50Q291bnRdKTsKKyAgICAgICAgbWVtY3B5
KGF0dGFjaG1lbnRTaXplcy5nZXQoKSwgbWVzc2FnZURhdGEsIHNpemVvZihzaXplX3QpICogYXR0
YWNobWVudENvdW50KTsKKyAgICAgICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKHNpemVfdCkgKiBh
dHRhY2htZW50Q291bnQ7CiAKLSAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudERl
c2NyaXB0b3JCdWZmZXIuZ2V0KCk7Ci0gICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IENNU0df
U1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOworICAgICAgICBpZiAo
bWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQorICAgICAgICAgICAgYXR0YWNobWVudENv
dW50LS07CiAKLSAgICBpb3ZbMF0uaW92X2Jhc2UgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOwotICAg
IGlvdlswXS5pb3ZfbGVuID0gbV9yZWFkQnVmZmVyLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkKKyAgICAgICAgICAgIGF0dGFjaG1lbnRz
LmFwcGVuZChBdHRhY2htZW50KG1fZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNb
aV0pKTsKIAotICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsKLSAgICBtZXNzYWdlLm1zZ19pb3Zs
ZW4gPSAxOworICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobWVzc2FnZUluZm8uYm9keVNpemUoKSk7CiAKKyAgICAgICAgICAg
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgaGFuZGxl
LmFkb3B0RnJvbUF0dGFjaG1lbnQobV9maWxlRGVzY3JpcHRvcnNbYXR0YWNobWVudENvdW50XSwg
YXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRDb3VudF0pOworICAgICAgICAgICAgaWYgKGhhbmRs
ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KIAotICAgIGludCBtZXNz
YWdlTGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29j
a2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBvb2xNZXNzYWdlQm9k
eSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6UmVhZE9ubHkpOworICAgICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0cnVjdCBj
bXNnaGRyKiBjb250cm9sTWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOworICAgIEFT
U0VSVChhdHRhY2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgp
ID8gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUluZm8uYXR0YWNo
bWVudENvdW50KCkpOwogCi0gICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87Ci0gICAgdW5zaWdu
ZWQgY2hhciogbWVzc2FnZURhdGEgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOworICAgIHVpbnQ4X3Qq
IG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7CisgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2Fn
ZUJvZHlPT0woKSkKKyAgICAgICAgbWVzc2FnZUJvZHkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihvb2xNZXNzYWdlQm9keS0+ZGF0YSgpKTsKIAotICAgIG1lbWNweSgmbWVzc2FnZUluZm8s
IG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2FnZUluZm8pKTsKLSAgICBBU1NFUlQobWVzc2FnZUxl
bmd0aCA9PSBzaXplb2YobWVzc2FnZUluZm8pICsgbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50
KCkgKiBzaXplb2Yoc2l6ZV90KSArIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkgPyAw
IDogbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOworICAgIEFyZ3VtZW50RGVjb2RlciogYXJndW1l
bnREZWNvZGVyOworICAgIGlmIChhdHRhY2htZW50cy5pc0VtcHR5KCkpCisgICAgICAgIGFyZ3Vt
ZW50RGVjb2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZv
LmJvZHlTaXplKCkpOworICAgIGVsc2UKKyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFy
Z3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSwgYXR0YWNo
bWVudHMpOwogCi0gICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKKyAgICBw
cm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBhZG9wdFB0cihh
cmd1bWVudERlY29kZXIpKTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29s
TWVzc2FnZUJvZHk7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPiBtZXNzYWdlTGVuZ3RoKSB7
CisgICAgICAgIG1lbW1vdmUobV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9yZWFkQnVmZmVyLmRhdGEo
KSArIG1lc3NhZ2VMZW5ndGgsIG1fcmVhZEJ1ZmZlclNpemUgLSBtZXNzYWdlTGVuZ3RoKTsKKyAg
ICAgICAgbV9yZWFkQnVmZmVyU2l6ZSAtPSBtZXNzYWdlTGVuZ3RoOworICAgIH0gZWxzZQorICAg
ICAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKIAogICAgIGlmIChtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKSkgewotICAgICAgICBpZiAoY29udHJvbE1lc3NhZ2UgJiYgY29udHJvbE1lc3Nh
Z2UtPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ190eXBl
ID09IFNDTV9SSUdIVFMpIHsKLSAgICAgICAgICAgIE93bkFycmF5UHRyPHNpemVfdD4gYXR0YWNo
bWVudFNpemVzID0gYWRvcHRBcnJheVB0cihuZXcgc2l6ZV90W21lc3NhZ2VJbmZvLmF0dGFjaG1l
bnRDb3VudCgpXSk7Ci0gICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVzLmdldCgpLCBt
ZXNzYWdlRGF0YSwgc2l6ZW9mKHNpemVfdCkgKiBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQo
KSk7CisgICAgICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yc1NpemUgPiBtZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKSkgeworICAgICAgICAgICAgc2l6ZV90IGZpbGVEZXNjcmlwdG9yc0xlbmd0
aCA9IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKGludCk7CisgICAgICAg
ICAgICBtZW1tb3ZlKG1fZmlsZURlc2NyaXB0b3JzLmRhdGEoKSwgbV9maWxlRGVzY3JpcHRvcnMu
ZGF0YSgpICsgZmlsZURlc2NyaXB0b3JzTGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9yc1NpemUgLSBm
aWxlRGVzY3JpcHRvcnNMZW5ndGgpOworICAgICAgICAgICAgbV9maWxlRGVzY3JpcHRvcnNTaXpl
IC09IGZpbGVEZXNjcmlwdG9yc0xlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X2ZpbGVEZXNjcmlwdG9yc1NpemUgPSAwOworICAgIH0KKworCisgICAgcmV0dXJuIHRydWU7Cit9
CiAKLSAgICAgICAgICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihhdHRhY2htZW50U2l6ZXMpOwor
c3RhdGljIHNzaXplX3QgcmVhZEJ5dGVzRnJvbVNvY2tldChpbnQgc29ja2V0RGVzY3JpcHRvciwg
dWludDhfdCogYnVmZmVyLCBpbnQgY291bnQsIGludCogZmlsZURlc2NyaXB0b3JzLCBzaXplX3Qq
IGZpbGVEZXNjcmlwdG9yc0NvdW50KQoreworICAgIHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKKyAg
ICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7CiAKLSAgICAgICAgICAgIE93
bkFycmF5UHRyPGludD4gZmlsZURlc2NyaXB0b3JzID0gYWRvcHRBcnJheVB0cihuZXcgaW50W21l
c3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXSk7Ci0gICAgICAgICAgICBtZW1jcHkoZmlsZURl
c2NyaXB0b3JzLmdldCgpLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoaW50KSAq
IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKKyAgICBzdHJ1Y3QgaW92ZWMgaW92WzFd
OworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CiAKLSAgICAgICAgICAgIGludCBh
dHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKKyAgICBtZXNz
YWdlLm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShzaXplb2YoaW50KSAqIGF0dGFjaG1lbnRN
YXhBbW91bnQpOworICAgIE93bkFycmF5UHRyPGNoYXI+IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVm
ZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttZXNzYWdlLm1zZ19jb250cm9sbGVuXSk7Cisg
ICAgbWVtc2V0KGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyLmdldCgpLCAwLCBtZXNzYWdlLm1z
Z19jb250cm9sbGVuKTsKKyAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudERlc2Ny
aXB0b3JCdWZmZXIuZ2V0KCk7CiAKLSAgICAgICAgICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3Nh
Z2VCb2R5T09MKCkpCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudENvdW50LS07CisgICAgaW92
WzBdLmlvdl9iYXNlID0gYnVmZmVyOworICAgIGlvdlswXS5pb3ZfbGVuID0gY291bnQ7CiAKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoZmNudGwoZmlsZURlc2NyaXB0b3JzW2ldLCBGX1NFVEZMLCBG
RF9DTE9FWEVDKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsK
KyAgICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSAxOwogCi0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGF0dGFjaG1lbnRDb3VudDsgKytpKQotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRz
LmFwcGVuZChBdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1tpXSwgYXR0YWNobWVudFNpemVzW2ld
KSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3NpemVfdCBieXRlc1JlYWQgPSByZWN2
bXNnKHNvY2tldERlc2NyaXB0b3IsICZtZXNzYWdlLCAwKTsKIAotICAgICAgICAgICAgaWYgKG1l
c3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCht
ZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAg
ICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwot
ICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9y
c1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdlOworICAg
ICAgICBmb3IgKGNvbnRyb2xNZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7IGNvbnRy
b2xNZXNzYWdlOyBjb250cm9sTWVzc2FnZSA9IENNU0dfTlhUSERSKCZtZXNzYWdlLCBjb250cm9s
TWVzc2FnZSkpIHsKKyAgICAgICAgICAgIGlmIChjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9
PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykg
eworICAgICAgICAgICAgICAgICpmaWxlRGVzY3JpcHRvcnNDb3VudCA9IChjb250cm9sTWVzc2Fn
ZS0+Y21zZ19sZW4gLSBDTVNHX0xFTigwKSkgLyBzaXplb2YoaW50KTsKKyAgICAgICAgICAgICAg
ICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXpl
b2YoaW50KSAqICpmaWxlRGVzY3JpcHRvcnNDb3VudCk7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8ICpmaWxlRGVzY3JpcHRvcnNDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZE
X0NMT0VYRUMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gIT0g
RUlOVFIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVz
c2FnZSwgY29udHJvbE1lc3NhZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgICpmaWxlRGVzY3JpcHRv
cnNDb3VudCA9IDA7CisKKyAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDsKICAgICB9CiAKLSAgICBB
U1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0wo
KSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZvLmF0dGFj
aG1lbnRDb3VudCgpKTsKKyAgICByZXR1cm4gLTE7Cit9CiAKLSAgICB1bnNpZ25lZCBjaGFyKiBt
ZXNzYWdlQm9keSA9IG1lc3NhZ2VEYXRhOwordm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5k
bGVyKCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3Vh
cmQgc29ja2V0Tm90aWZpZXJFbmFibGVyKG1fc29ja2V0Tm90aWZpZXIpOworI2VuZGlmCiAKLSAg
ICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAgICAgICBtZXNzYWdlQm9k
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9vbE1lc3NhZ2VCb2R5LT5kYXRh
KCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHNpemVfdCBmaWxlRGVzY3JpcHRvcnND
b3VudCA9IDA7CisgICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1fcmVhZEJ1ZmZlci5zaXpl
KCkgLSBtX3JlYWRCdWZmZXJTaXplOworICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZCA9IHJlYWRC
eXRlc0Zyb21Tb2NrZXQobV9zb2NrZXREZXNjcmlwdG9yLCBtX3JlYWRCdWZmZXIuZGF0YSgpICsg
bV9yZWFkQnVmZmVyU2l6ZSwgYnl0ZXNUb1JlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ZpbGVEZXNjcmlwdG9ycy5kYXRhKCkgKyBtX2ZpbGVE
ZXNjcmlwdG9yc1NpemUsICZmaWxlRGVzY3JpcHRvcnNDb3VudCk7CiAKLSAgICBBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50RGVjb2RlcjsKLSAgICBpZiAoYXR0YWNobWVudHMuaXNFbXB0eSgpKQot
ICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5
LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50RGVj
b2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlT
aXplKCksIGF0dGFjaG1lbnRzKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAgICAg
ICAgICAgIC8vIEVJTlRSIHdhcyBhbHJlYWR5IGhhbmRsZWQgYnkgcmVhZEJ5dGVzRnJvbVNvY2tl
dC4KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxP
Q0spCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2Vzc0luY29taW5nTWVzc2Fn
ZShtZXNzYWdlSW5mby5tZXNzYWdlSUQoKSwgYWRvcHRQdHIoYXJndW1lbnREZWNvZGVyKSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIGVycm9ycyBoZXJlPworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBBU1NFUlQoIWNvbnRyb2xNZXNzYWdlKTsKKyAg
ICAgICAgbV9yZWFkQnVmZmVyU2l6ZSArPSBieXRlc1JlYWQ7CisgICAgICAgIG1fZmlsZURlc2Ny
aXB0b3JzU2l6ZSArPSBmaWxlRGVzY3JpcHRvcnNDb3VudDsKKworICAgICAgICBpZiAoIWJ5dGVz
UmVhZCkgeworICAgICAgICAgICAgLy8gQ29ubmVjdGlvbiBjbG9zZWQuCisgICAgICAgICAgICBj
b25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFByb2Nlc3MgbWVzc2FnZXMgZnJvbSBkYXRhIHJlY2VpdmVkLgorICAgICAgICB3
aGlsZSAocHJvY2Vzc01lc3NhZ2UoKSkgeyB9CisgICAgfQogfQogCiBib29sIENvbm5lY3Rpb246
Om9wZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0
ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCmluZGV4IGY4NzcyMDkuLjM2ZDI5YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xh
dW5jaGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3Rr
L1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBQcm9jZXNzTGF1
bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIEdQaWQgcGlkID0gMDsKIAogICAgIGludCBzb2Nr
ZXRzWzJdOwotICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfREdSQU0sIDAsIHNvY2tl
dHMpIDwgMCkgeworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBz
b2NrZXRzKSA8IDApIHsKICAgICAgICAgZ19wcmludGVycigiQ3JlYXRpb24gb2Ygc29ja2V0IGZh
aWxlZDogJXMuXG4iLCBnX3N0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94943</attachid>
            <date>2011-05-26 01:59:28 -0700</date>
            <delta_ts>2011-05-26 09:01:01 -0700</delta_ts>
            <desc>New patch using SOCK_SEQPACKET when available</desc>
            <filename>wk2-sockets.diff</filename>
            <type>text/plain</type>
            <size>14732</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhZWYwNGY3Li5hYTc2ZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDUtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtVTklY
XSBEb24ndCB1c2UgU09DS19ER1JBTSBpbiBzb2NrZXRwYWlyKCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjg3CisKKyAgICAgICAgVXNlIFNPQ0tf
U0VRUEFDS0VUIGluc3RlYWQgd2hlbiBpdCdzIGF2YWlsYWJsZSwgYW5kIGZhbGwgYmFjayB0bwor
ICAgICAgICBTT0NLX1NUUkVBTSBmb3Igbm9uLWxpbnV4IHBsYXRmb3Jtcy4gUmV3b3JrIHRoZSBt
ZXNzYWdlIHJlY2VpdmVyCisgICAgICAgIGNvZGUgdG8gc3VwcG9ydCBzdHJlYW0gc29ja2V0cywg
c2luY2UgaXQgcmVxdWlyZXMgdG8gaGFuZGxlCisgICAgICAgIG1lc3NhZ2UgYm91bmRhcmllcy4K
KworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6cHJvY2Vzc01lc3NhZ2UpOiBQcm9jZXNzIG1lc3NhZ2VzIGZyb20gZGF0YQorICAg
ICAgICBhbHJlYWR5IHJlY2VpdmVkLgorICAgICAgICAoQ29yZUlQQzo6cmVhZEJ5dGVzRnJvbVNv
Y2tldCk6IFJlYWQgZnJvbSBzb2NrZXQgdXNpbmcgcmVjdm1zZy4KKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIv
cXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNo
ZXI6OmxhdW5jaFByb2Nlc3MpOgorCiAyMDExLTA1LTI1ICBRaSBaaGFuZyAgPHFpLjIuemhhbmdA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCA2MjljN2IwLi43
MzM2NzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5l
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24u
aApAQCAtMzM3LDkgKzMzNywxMiBAQCBwcml2YXRlOgogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpIHx8IE9TKFNZTUJJQU4pCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1
ZXVlLgogICAgIHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOworICAgIGJvb2wgcHJvY2Vzc01lc3Nh
Z2UoKTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7Ci0gICAgc2l6ZV90IG1f
Y3VycmVudE1lc3NhZ2VTaXplOworICAgIHNpemVfdCBtX3JlYWRCdWZmZXJTaXplOworICAgIFZl
Y3RvcjxpbnQ+IG1fZmlsZURlc2NyaXB0b3JzOworICAgIHNpemVfdCBtX2ZpbGVEZXNjcmlwdG9y
c1NpemU7CiAgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKIAogI2lmIFBMQVRGT1JNKFFUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rp
b25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAKaW5kZXggOTJmZmZmMy4uMWJmZjczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC05
NCw3ICs5NCw5IEBAIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZp
ZXIgaWRlbnRpZmllcikKIHsKICAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpZGVudGlmaWVyOwog
ICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUobWVzc2FnZU1heFNpemUpOwotICAgIG1fY3VycmVudE1l
c3NhZ2VTaXplID0gMDsKKyAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKKyAgICBtX2ZpbGVEZXNj
cmlwdG9ycy5yZXNpemUoYXR0YWNobWVudE1heEFtb3VudCk7CisgICAgbV9maWxlRGVzY3JpcHRv
cnNTaXplID0gMDsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIG1fc29ja2V0Tm90aWZpZXIgPSAw
OwpAQCAtMTU4LDExNiArMTYwLDE3OCBAQCBwcml2YXRlOgogICAgIFQmIG1fYXR0YWNobWVudHM7
CiB9OwogCi12b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQorYm9vbCBDb25uZWN0
aW9uOjpwcm9jZXNzTWVzc2FnZSgpCiB7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPCBzaXpl
b2YoTWVzc2FnZUluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50OF90KiBt
ZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgTWVzc2FnZUluZm8gbWVzc2Fn
ZUluZm87CisgICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgbWVzc2FnZURhdGEsIHNpemVvZihtZXNz
YWdlSW5mbykpOworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAg
ICBzaXplX3QgbWVzc2FnZUxlbmd0aCA9IHNpemVvZihNZXNzYWdlSW5mbykgKyBtZXNzYWdlSW5m
by5hdHRhY2htZW50Q291bnQoKSAqIHNpemVvZihzaXplX3QpICsgKG1lc3NhZ2VJbmZvLmlzTWVz
c2FnZUJvZHlPT0woKSA/IDAgOiBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAgICBpZiAobV9y
ZWFkQnVmZmVyU2l6ZSA8IG1lc3NhZ2VMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzOwotI2lmIFBMQVRGT1JNKFFUKQotICAg
IFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmllckVuYWJsZXIobV9zb2Nr
ZXROb3RpZmllcik7Ci0jZW5kaWYKICAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxEZXF1ZTxB
dHRhY2htZW50PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bv
c2VyKGF0dGFjaG1lbnRzKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1l
c3NhZ2VCb2R5OwogCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gYXR0YWNobWVudERlc2NyaXB0b3JC
dWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAo
YXR0YWNobWVudE1heEFtb3VudCkpXSk7Ci0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOwotICAg
IG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVjdCBpb3Zl
YyBpb3ZbMV07Ci0gICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKyAgICBpbnQgYXR0
YWNobWVudENvdW50ID0gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCk7CisgICAgaWYgKGF0
dGFjaG1lbnRDb3VudCkgeworICAgICAgICBPd25BcnJheVB0cjxzaXplX3Q+IGF0dGFjaG1lbnRT
aXplcyA9IGFkb3B0QXJyYXlQdHIobmV3IHNpemVfdFthdHRhY2htZW50Q291bnRdKTsKKyAgICAg
ICAgbWVtY3B5KGF0dGFjaG1lbnRTaXplcy5nZXQoKSwgbWVzc2FnZURhdGEsIHNpemVvZihzaXpl
X3QpICogYXR0YWNobWVudENvdW50KTsKKyAgICAgICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKHNp
emVfdCkgKiBhdHRhY2htZW50Q291bnQ7CiAKLSAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0
YWNobWVudERlc2NyaXB0b3JCdWZmZXIuZ2V0KCk7Ci0gICAgbWVzc2FnZS5tc2dfY29udHJvbGxl
biA9IENNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOworICAg
ICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQorICAgICAgICAgICAgYXR0
YWNobWVudENvdW50LS07CiAKLSAgICBpb3ZbMF0uaW92X2Jhc2UgPSBtX3JlYWRCdWZmZXIuZGF0
YSgpOwotICAgIGlvdlswXS5pb3ZfbGVuID0gbV9yZWFkQnVmZmVyLnNpemUoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkKKyAgICAgICAgICAgIGF0
dGFjaG1lbnRzLmFwcGVuZChBdHRhY2htZW50KG1fZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2ht
ZW50U2l6ZXNbaV0pKTsKIAotICAgIG1lc3NhZ2UubXNnX2lvdiA9IGlvdjsKLSAgICBtZXNzYWdl
Lm1zZ19pb3ZsZW4gPSAxOworICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9P
TCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZUluZm8uYm9keVNpemUoKSk7CiAKKyAg
ICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAg
ICAgaGFuZGxlLmFkb3B0RnJvbUF0dGFjaG1lbnQobV9maWxlRGVzY3JpcHRvcnNbYXR0YWNobWVu
dENvdW50XSwgYXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRDb3VudF0pOworICAgICAgICAgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KIAotICAg
IGludCBtZXNzYWdlTGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2
bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgewotICAgICAgICBp
ZiAoZXJybm8gIT0gRUlOVFIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBvb2xN
ZXNzYWdlQm9keSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9k
eSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAg
IHN0cnVjdCBjbXNnaGRyKiBjb250cm9sTWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2Up
OworICAgIEFTU0VSVChhdHRhY2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8uaXNNZXNzYWdl
Qm9keU9PTCgpID8gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUlu
Zm8uYXR0YWNobWVudENvdW50KCkpOwogCi0gICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87Ci0g
ICAgdW5zaWduZWQgY2hhciogbWVzc2FnZURhdGEgPSBtX3JlYWRCdWZmZXIuZGF0YSgpOworICAg
IHVpbnQ4X3QqIG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7CisgICAgaWYgKG1lc3NhZ2VJbmZv
LmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAgICAgbWVzc2FnZUJvZHkgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihvb2xNZXNzYWdlQm9keS0+ZGF0YSgpKTsKIAotICAgIG1lbWNweSgmbWVz
c2FnZUluZm8sIG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2FnZUluZm8pKTsKLSAgICBBU1NFUlQo
bWVzc2FnZUxlbmd0aCA9PSBzaXplb2YobWVzc2FnZUluZm8pICsgbWVzc2FnZUluZm8uYXR0YWNo
bWVudENvdW50KCkgKiBzaXplb2Yoc2l6ZV90KSArIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5
T09MKCkgPyAwIDogbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOworICAgIEFyZ3VtZW50RGVjb2Rl
ciogYXJndW1lbnREZWNvZGVyOworICAgIGlmIChhdHRhY2htZW50cy5pc0VtcHR5KCkpCisgICAg
ICAgIGFyZ3VtZW50RGVjb2RlciA9IG5ldyBBcmd1bWVudERlY29kZXIobWVzc2FnZUJvZHksIG1l
c3NhZ2VJbmZvLmJvZHlTaXplKCkpOworICAgIGVsc2UKKyAgICAgICAgYXJndW1lbnREZWNvZGVy
ID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUo
KSwgYXR0YWNobWVudHMpOwogCi0gICAgbWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZv
KTsKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBh
ZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlZE1l
bW9yeT4gb29sTWVzc2FnZUJvZHk7CisgICAgaWYgKG1fcmVhZEJ1ZmZlclNpemUgPiBtZXNzYWdl
TGVuZ3RoKSB7CisgICAgICAgIG1lbW1vdmUobV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9yZWFkQnVm
ZmVyLmRhdGEoKSArIG1lc3NhZ2VMZW5ndGgsIG1fcmVhZEJ1ZmZlclNpemUgLSBtZXNzYWdlTGVu
Z3RoKTsKKyAgICAgICAgbV9yZWFkQnVmZmVyU2l6ZSAtPSBtZXNzYWdlTGVuZ3RoOworICAgIH0g
ZWxzZQorICAgICAgICBtX3JlYWRCdWZmZXJTaXplID0gMDsKIAogICAgIGlmIChtZXNzYWdlSW5m
by5hdHRhY2htZW50Q291bnQoKSkgewotICAgICAgICBpZiAoY29udHJvbE1lc3NhZ2UgJiYgY29u
dHJvbE1lc3NhZ2UtPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjb250cm9sTWVzc2FnZS0+
Y21zZ190eXBlID09IFNDTV9SSUdIVFMpIHsKLSAgICAgICAgICAgIE93bkFycmF5UHRyPHNpemVf
dD4gYXR0YWNobWVudFNpemVzID0gYWRvcHRBcnJheVB0cihuZXcgc2l6ZV90W21lc3NhZ2VJbmZv
LmF0dGFjaG1lbnRDb3VudCgpXSk7Ci0gICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVz
LmdldCgpLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKHNpemVfdCkgKiBtZXNzYWdlSW5mby5hdHRhY2ht
ZW50Q291bnQoKSk7CisgICAgICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yc1NpemUgPiBtZXNzYWdl
SW5mby5hdHRhY2htZW50Q291bnQoKSkgeworICAgICAgICAgICAgc2l6ZV90IGZpbGVEZXNjcmlw
dG9yc0xlbmd0aCA9IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKGludCk7
CisgICAgICAgICAgICBtZW1tb3ZlKG1fZmlsZURlc2NyaXB0b3JzLmRhdGEoKSwgbV9maWxlRGVz
Y3JpcHRvcnMuZGF0YSgpICsgZmlsZURlc2NyaXB0b3JzTGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9y
c1NpemUgLSBmaWxlRGVzY3JpcHRvcnNMZW5ndGgpOworICAgICAgICAgICAgbV9maWxlRGVzY3Jp
cHRvcnNTaXplIC09IGZpbGVEZXNjcmlwdG9yc0xlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yc1NpemUgPSAwOworICAgIH0KIAotICAgICAgICAgICAg
bWVzc2FnZURhdGEgKz0gc2l6ZW9mKGF0dGFjaG1lbnRTaXplcyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CiAKLSAgICAgICAgICAgIE93bkFycmF5UHRyPGludD4gZmlsZURlc2NyaXB0b3JzID0gYWRv
cHRBcnJheVB0cihuZXcgaW50W21lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXSk7Ci0gICAg
ICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLmdldCgpLCBDTVNHX0RBVEEoY29udHJvbE1l
c3NhZ2UpLCBzaXplb2YoaW50KSAqIG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKK3N0
YXRpYyBzc2l6ZV90IHJlYWRCeXRlc0Zyb21Tb2NrZXQoaW50IHNvY2tldERlc2NyaXB0b3IsIHVp
bnQ4X3QqIGJ1ZmZlciwgaW50IGNvdW50LCBpbnQqIGZpbGVEZXNjcmlwdG9ycywgc2l6ZV90KiBm
aWxlRGVzY3JpcHRvcnNDb3VudCkKK3sKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAg
bWVtc2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOwogCi0gICAgICAgICAgICBpbnQg
YXR0YWNobWVudENvdW50ID0gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCk7CisgICAgc3Ry
dWN0IGlvdmVjIGlvdlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOwogCi0g
ICAgICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRDb3VudC0tOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBD
TVNHX1NQQUNFKHNpemVvZihpbnQpICogYXR0YWNobWVudE1heEFtb3VudCk7CisgICAgT3duQXJy
YXlQdHI8Y2hhcj4gYXR0YWNobWVudERlc2NyaXB0b3JCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5l
dyBjaGFyW21lc3NhZ2UubXNnX2NvbnRyb2xsZW5dKTsKKyAgICBtZW1zZXQoYXR0YWNobWVudERl
c2NyaXB0b3JCdWZmZXIuZ2V0KCksIDAsIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4pOworICAgIG1l
c3NhZ2UubXNnX2NvbnRyb2wgPSBhdHRhY2htZW50RGVzY3JpcHRvckJ1ZmZlci5nZXQoKTsKIAot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkgewot
ICAgICAgICAgICAgICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkws
IEZEX0NMT0VYRUMpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSBF
SU5UUikgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgaW92WzBdLmlvdl9iYXNlID0gYnVm
ZmVyOworICAgIGlvdlswXS5pb3ZfbGVuID0gY291bnQ7CiAKLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgYXR0YWNo
bWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6
ZXNbaV0pKTsKKyAgICBtZXNzYWdlLm1zZ19pb3YgPSBpb3Y7CisgICAgbWVzc2FnZS5tc2dfaW92
bGVuID0gMTsKIAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0wo
KSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZCA9IHJlY3Ztc2coc29j
a2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApOwogCi0gICAgICAgICAgICAgICAgV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgICAgICAgICAgaGFuZGxlLmFkb3B0
RnJvbUF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2F0dGFjaG1lbnRDb3VudF0sIGF0dGFjaG1l
bnRTaXplc1thdHRhY2htZW50Q291bnRdKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAo
Ynl0ZXNSZWFkIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgb29sTWVzc2FnZUJvZHkgPSBX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OlJlYWRPbmx5KTsKLSAgICAgICAgICAgICAgICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjb250cm9sTWVzc2Fn
ZTsKKyAgICAgICAgZm9yIChjb250cm9sTWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2Up
OyBjb250cm9sTWVzc2FnZTsgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVzc2FnZSwg
Y29udHJvbE1lc3NhZ2UpKSB7CisgICAgICAgICAgICBpZiAoY29udHJvbE1lc3NhZ2UtPmNtc2df
bGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ190eXBlID09IFNDTV9S
SUdIVFMpIHsKKyAgICAgICAgICAgICAgICAqZmlsZURlc2NyaXB0b3JzQ291bnQgPSAoY29udHJv
bE1lc3NhZ2UtPmNtc2dfbGVuIC0gQ01TR19MRU4oMCkpIC8gc2l6ZW9mKGludCk7CisgICAgICAg
ICAgICAgICAgbWVtY3B5KGZpbGVEZXNjcmlwdG9ycywgQ01TR19EQVRBKGNvbnRyb2xNZXNzYWdl
KSwgc2l6ZW9mKGludCkgKiAqZmlsZURlc2NyaXB0b3JzQ291bnQpOworCisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqZmlsZURlc2NyaXB0b3JzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZmNudGwoZmlsZURlc2NyaXB0b3JzW2ldLCBGX1NF
VEZMLCBGRF9DTE9FWEVDKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVy
cm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnRyb2xNZXNzYWdlID0gQ01TR19OWFRI
RFIoJm1lc3NhZ2UsIGNvbnRyb2xNZXNzYWdlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICAqZmlsZURl
c2NyaXB0b3JzQ291bnQgPSAwOworCisgICAgICAgIHJldHVybiBieXRlc1JlYWQ7CiAgICAgfQog
Ci0gICAgQVNTRVJUKGF0dGFjaG1lbnRzLnNpemUoKSA9PSBtZXNzYWdlSW5mby5pc01lc3NhZ2VC
b2R5T09MKCkgPyBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSAtIDEgOiBtZXNzYWdlSW5m
by5hdHRhY2htZW50Q291bnQoKSk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgdW5zaWduZWQg
Y2hhciogbWVzc2FnZUJvZHkgPSBtZXNzYWdlRGF0YTsKK3ZvaWQgQ29ubmVjdGlvbjo6cmVhZHlS
ZWFkSGFuZGxlcigpCit7CisjaWYgUExBVEZPUk0oUVQpCisgICAgU29ja2V0Tm90aWZpZXJSZXNv
dXJjZUd1YXJkIHNvY2tldE5vdGlmaWVyRW5hYmxlcihtX3NvY2tldE5vdGlmaWVyKTsKKyNlbmRp
ZgogCi0gICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKLSAgICAgICAgbWVz
c2FnZUJvZHkgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvb2xNZXNzYWdlQm9k
eS0+ZGF0YSgpKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzaXplX3QgZmlsZURlc2Ny
aXB0b3JzQ291bnQgPSAwOworICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBtX3JlYWRCdWZm
ZXIuc2l6ZSgpIC0gbV9yZWFkQnVmZmVyU2l6ZTsKKyAgICAgICAgc3NpemVfdCBieXRlc1JlYWQg
PSByZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0RGVzY3JpcHRvciwgbV9yZWFkQnVmZmVyLmRh
dGEoKSArIG1fcmVhZEJ1ZmZlclNpemUsIGJ5dGVzVG9SZWFkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9maWxlRGVzY3JpcHRvcnMuZGF0YSgpICsg
bV9maWxlRGVzY3JpcHRvcnNTaXplLCAmZmlsZURlc2NyaXB0b3JzQ291bnQpOwogCi0gICAgQXJn
dW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29kZXI7Ci0gICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1w
dHkoKSkKLSAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNz
YWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSk7Ci0gICAgZWxzZQotICAgICAgICBhcmd1
bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5m
by5ib2R5U2l6ZSgpLCBhdHRhY2htZW50cyk7CisgICAgICAgIGlmIChieXRlc1JlYWQgPCAwKSB7
CisgICAgICAgICAgICAvLyBFSU5UUiB3YXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHJlYWRCeXRlc0Zy
b21Tb2NrZXQuCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVX
T1VMREJMT0NLKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3NJbmNvbWlu
Z01lc3NhZ2UobWVzc2FnZUluZm8ubWVzc2FnZUlEKCksIGFkb3B0UHRyKGFyZ3VtZW50RGVjb2Rl
cikpOworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBlcnJvcnMgaGVyZT8KKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgQVNTRVJUKCFjb250cm9sTWVzc2Fn
ZSk7CisgICAgICAgIG1fcmVhZEJ1ZmZlclNpemUgKz0gYnl0ZXNSZWFkOworICAgICAgICBtX2Zp
bGVEZXNjcmlwdG9yc1NpemUgKz0gZmlsZURlc2NyaXB0b3JzQ291bnQ7CisKKyAgICAgICAgaWYg
KCFieXRlc1JlYWQpIHsKKyAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gY2xvc2VkLgorICAgICAg
ICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBQcm9jZXNzIG1lc3NhZ2VzIGZyb20gZGF0YSByZWNlaXZlZC4KKyAg
ICAgICAgd2hpbGUgKHByb2Nlc3NNZXNzYWdlKCkpIHsgfQorICAgIH0KIH0KIAogYm9vbCBDb25u
ZWN0aW9uOjpvcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAppbmRleCBmODc3MjA5Li41ZDlk
ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1By
b2Nlc3NMYXVuY2hlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC0zOSw2ICszOSwxMiBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KIAorI2lmZGVmIFNPQ0tfU0VRUEFDS0VUCisjZGVmaW5lIFNPQ0tFVF9UWVBFIFNPQ0tfU0VR
UEFDS0VUCisjZWxzZQorI2RlZmluZSBTT0NLRVRfVFlQRSBTT0NLX1NUUkVBTQorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTYxLDcg
KzY3LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIEdQaWQg
cGlkID0gMDsKIAogICAgIGludCBzb2NrZXRzWzJdOwotICAgIGlmIChzb2NrZXRwYWlyKEFGX1VO
SVgsIFNPQ0tfREdSQU0sIDAsIHNvY2tldHMpIDwgMCkgeworICAgIGlmIChzb2NrZXRwYWlyKEFG
X1VOSVgsIFNPQ0tFVF9UWVBFLCAwLCBzb2NrZXRzKSA8IDApIHsKICAgICAgICAgZ19wcmludGVy
cigiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZDogJXMuXG4iLCBnX3N0cmVycm9yKGVycm5vKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcAppbmRleCA1ZjNjOTlmLi42OTdkYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
QEAgLTU1LDYgKzU1LDEyIEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZW5kaWYKIAorI2lmZGVm
IFNPQ0tfU0VRUEFDS0VUCisjZGVmaW5lIFNPQ0tFVF9UWVBFIFNPQ0tfU0VRUEFDS0VUCisjZWxz
ZQorI2RlZmluZSBTT0NLRVRfVFlQRSBTT0NLX1NUUkVBTQorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNCw3ICsxMTAsNyBAQCB2
b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgfQogCiAgICAgaW50IHNv
Y2tldHNbMl07Ci0gICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29j
a2V0cykgPT0gLTEpIHsKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLRVRfVFlQRSwg
MCwgc29ja2V0cykgPT0gLTEpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkNyZWF0aW9uIG9mIHNv
Y2tldCBmYWlsZWQgd2l0aCBlcnJubzoiIDw8IGVycm5vOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94982</attachid>
            <date>2011-05-26 09:01:01 -0700</date>
            <delta_ts>2011-10-17 12:39:27 -0700</delta_ts>
            <desc>Patch to use SEQPACKET when possible</desc>
            <filename>wk2-seqpacket.diff</filename>
            <type>text/plain</type>
            <size>3445</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhZWYwNGY3Li5hMmMxYTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTEtMDUtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtVTklY
XSBVc2UgU09DS19TRVFQQUNLRVQgd2hlbiBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjg3CisKKyAgICAgICAgU29ja2V0cyBvZiB0
eXBlIFNFUVBBQ0tFVCBhcmUgYWN0dWFsbHkgREdSQU0gc29ja2V0cyBidXQgdGhhdAorICAgICAg
ICBub3RpZmllcyB0aGUgb3RoZXIgZW5kIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLiBX
aGVuCisgICAgICAgIFNFUVBBQ0tFVCBzb2NrZXRzIGFyZSBub3QgYXZhaWxhYmxlIHdlIHVzZSBE
R1JBTSBzb2NrZXRzIGZvciBub3cuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cmVhZHlS
ZWFkSGFuZGxlcik6IENoZWNrIHdoZXRoZXIgdGhlCisgICAgICAgIGNvbm5lY3Rpb24gaGFzIGJl
ZW4gY2xvc2VkIGJ5IHRoZSBvdGhlciBlbmQsIHJlY3Ztc2cgcmV0dXJucyAwLgorICAgICAgICAq
IFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKTogVXNlIFNPQ0tfU0VRUEFD
S0VUIGlmCisgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9x
dC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
cjo6bGF1bmNoUHJvY2Vzcyk6IERpdHRvLgorCiAyMDExLTA1LTI1ICBRaSBaaGFuZyAgPHFpLjIu
emhhbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rp
b25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAKaW5kZXggOTJmZmZmMy4uYmJiMWRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC0x
ODksNiArMTg5LDEyIEBAIHZvaWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKCFtZXNzYWdlTGVuZ3RoKSB7CisgICAg
ICAgIC8vIENvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkLgorICAgICAgICBjb25uZWN0aW9uRGlk
Q2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHN0cnVjdCBjbXNnaGRyKiBj
b250cm9sTWVzc2FnZSA9IENNU0dfRklSU1RIRFIoJm1lc3NhZ2UpOwogCiAgICAgTWVzc2FnZUlu
Zm8gbWVzc2FnZUluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKaW5kZXggZjg3NzIwOS4uZGI3
Njg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Q
cm9jZXNzTGF1bmNoZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcApAQCAtMzksNiArMzksMTIgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CiAKKyNpZmRlZiBTT0NLX1NFUVBBQ0tFVAorI2RlZmluZSBTT0NLRVRfVFlQRSBTT0NLX1NF
UVBBQ0tFVAorI2Vsc2UKKyNkZWZpbmUgU09DS0VUX1RZUEUgU09DS19ER1JBTQorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTYxLDcg
KzY3LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIEdQaWQg
cGlkID0gMDsKIAogICAgIGludCBzb2NrZXRzWzJdOwotICAgIGlmIChzb2NrZXRwYWlyKEFGX1VO
SVgsIFNPQ0tfREdSQU0sIDAsIHNvY2tldHMpIDwgMCkgeworICAgIGlmIChzb2NrZXRwYWlyKEFG
X1VOSVgsIFNPQ0tFVF9UWVBFLCAwLCBzb2NrZXRzKSA8IDApIHsKICAgICAgICAgZ19wcmludGVy
cigiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZDogJXMuXG4iLCBnX3N0cmVycm9yKGVycm5vKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcAppbmRleCA1ZjNjOTlmLi5iNzlhMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
QEAgLTU1LDYgKzU1LDEyIEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZW5kaWYKIAorI2lmZGVm
IFNPQ0tfU0VRUEFDS0VUCisjZGVmaW5lIFNPQ0tFVF9UWVBFIFNPQ0tfU0VRUEFDS0VUCisjZWxz
ZQorI2RlZmluZSBTT0NLRVRfVFlQRSBTT0NLX0RHUkFNCisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTA0LDcgKzExMCw3IEBAIHZv
aWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICB9CiAKICAgICBpbnQgc29j
a2V0c1syXTsKLSAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBzb2Nr
ZXRzKSA9PSAtMSkgeworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tFVF9UWVBFLCAw
LCBzb2NrZXRzKSA9PSAtMSkgewogICAgICAgICBxRGVidWcoKSA8PCAiQ3JlYXRpb24gb2Ygc29j
a2V0IGZhaWxlZCB3aXRoIGVycm5vOiIgPDwgZXJybm87CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="88384"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>