<?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>128864</bug_id>
          
          <creation_ts>2014-02-14 20:34:51 -0800</creation_ts>
          <short_desc>Vector with inline capacity should work with non-PODs</short_desc>
          <delta_ts>2014-02-15 18:49:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128795</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>981080</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 20:34:51 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981081</commentid>
    <comment_count>1</comment_count>
      <attachid>224279</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 20:36:22 -0800</bug_when>
    <thetext>Created attachment 224279
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981083</commentid>
    <comment_count>2</comment_count>
      <attachid>224280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 20:38:38 -0800</bug_when>
    <thetext>Created attachment 224280
the patch

With some fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981084</commentid>
    <comment_count>3</comment_count>
      <attachid>224280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 20:40:03 -0800</bug_when>
    <thetext>Comment on attachment 224280
the patch

Clearing r? because I have another fix on the way.  I&apos;ll actually test this before r?&apos;ing again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981086</commentid>
    <comment_count>4</comment_count>
      <attachid>224281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 20:53:13 -0800</bug_when>
    <thetext>Created attachment 224281
the patch

I&apos;m still going to write a test for this, but it would be good to get a review for the approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981101</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 21:57:45 -0800</bug_when>
    <thetext>Looks like teh build is broken because Deque uses VectorBuffer.  Making that work with VectorBuffer now that VectorBuffer needs to know the size would be cumbersome.  But, luckily, *nobody* uses Deque with a non-zero inline capacity, except for the DFG::Worklist.  I know for a fact that the DFG::Worklist doesn&apos;t need to use a non-zero inline capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981105</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-14 22:38:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Looks like teh build is broken because Deque uses VectorBuffer.  Making that work with VectorBuffer now that VectorBuffer needs to know the size would be cumbersome.  But, luckily, *nobody* uses Deque with a non-zero inline capacity, except for the DFG::Worklist.  I know for a fact that the DFG::Worklist doesn&apos;t need to use a non-zero inline capacity.

WheelEventDeltaTracker also uses inline capacity.  However, I think that only EventHandler allocates it, and EventHandler is sufficiently fat that losing that inline capacity ought not be a big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981120</commentid>
    <comment_count>7</comment_count>
      <attachid>224281</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-15 00:18:20 -0800</bug_when>
    <thetext>Comment on attachment 224281
the patch

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

I would reeaaaallly like a test, even only on OS X. That will take 5 minutes and will avoid any stupid mistakes like this in future refactoring.

&gt; Source/WTF/wtf/Vector.h:480
&gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; +            swapInlineBuffer(other, mySize, otherSize);
&gt;              std::swap(m_capacity, other.m_capacity);
&gt;          } else if (other.buffer() == other.inlineBuffer()) {
&gt;              other.m_buffer = m_buffer;
&gt;              m_buffer = inlineBuffer();
&gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; +            swapInlineBuffer(other, mySize, otherSize);

I am not sure I like swapInlineBuffer() in those cases though.

On remove, we just call the destructor. So it is basically garbage in one or the other of the inlineBuffer and we will swap valid values with garbage.

In these two cases, I would instead do a moveOperation from the buffer to the inline_buffer, followed by a call to the destructors on the unused inlineBuffer.

&gt; Source/WTF/wtf/Vector.h:535
&gt; +        for (unsigned i = swapBound; i--;)
&gt; +            std::swap(left[i], right[i]);

Why do you go from swapBound to zero instead of zero to swapBound-1?

&gt; Source/WTF/wtf/Vector.h:715
&gt; +        Base::swap(other, m_size, other.m_size);

m_size is on VectorBufferBase, not sure you need to pass it here.

We could even have Base::swap() do the m_size swap to make things clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981183</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-15 10:15:40 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 224281 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224281&amp;action=review
&gt; 
&gt; I would reeaaaallly like a test, even only on OS X. That will take 5 minutes and will avoid any stupid mistakes like this in future refactoring.

I will add one.  As I said in an earlier comment, I was using r? to get feedback on an incomplete patch.  The final patch will have to include changes to Deque and a test.  If you prefer, I can wait with requesting feedback until the patch is complete.  However, you just found a bug, so I think it&apos;s a good thing.

&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:480
&gt; &gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; &gt; +            swapInlineBuffer(other, mySize, otherSize);
&gt; &gt;              std::swap(m_capacity, other.m_capacity);
&gt; &gt;          } else if (other.buffer() == other.inlineBuffer()) {
&gt; &gt;              other.m_buffer = m_buffer;
&gt; &gt;              m_buffer = inlineBuffer();
&gt; &gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; &gt; +            swapInlineBuffer(other, mySize, otherSize);
&gt; 
&gt; I am not sure I like swapInlineBuffer() in those cases though.
&gt; 
&gt; On remove, we just call the destructor. So it is basically garbage in one or the other of the inlineBuffer and we will swap valid values with garbage.
&gt; 
&gt; In these two cases, I would instead do a moveOperation from the buffer to the inline_buffer, followed by a call to the destructors on the unused inlineBuffer.

You&apos;re right, this is borked.  It&apos;s not just inelegant, it&apos;s plain broken: the size arguments to swapInlineBuffer() are meant to denote the size in the inline buffer, but in the case where one Vector is using an out-of-line buffer and the other is using an inline buffer, it&apos;s incorrect to say that the size used in the out-of-line buffer is the size used in the inline buffer - in fact that size used in the inline buffer is zero.

I *believe* that the cleanest way to write this is to have these cases call:

swapInlineBuffer(other, mySize, 0);

and:

swapInlineBuffer(other, 0, otherSize);

respectively.  It also means that these statements in swapInlineBuffers:

        leftSize = std::min(leftSize, inlineCapacity);
        rightSize = std::min(rightSize, inlineCapacity);

are unnecessary; we can instead assert that leftSize &lt;= inlineCapacity and rightSize &lt;= inlineCapacity.

I&apos;ll try this out and upload another patch...

&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:535
&gt; &gt; +        for (unsigned i = swapBound; i--;)
&gt; &gt; +            std::swap(left[i], right[i]);
&gt; 
&gt; Why do you go from swapBound to zero instead of zero to swapBound-1?

This goes from swapBound - 1 to 0.  I prefer downward loops because they tend to be slightly cheaper in hardware (loop condition compares against zero, a constant, rather than the length, a non-constant that needs to be kept in a register or somewhere else).  This style of downward loop is particularly robust; it works with both unsigned and signed indices.

&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:715
&gt; &gt; +        Base::swap(other, m_size, other.m_size);
&gt; 
&gt; m_size is on VectorBufferBase, not sure you need to pass it here.

I need to pass it because other subclasses of VectorBufferBase either don&apos;t use m_size at all or use it to mean something different.  The field was moved there not because it is semantically part of VectorBufferBase but because we are optimizing padding for Vector (at the expense of everyone else, FWIW).

&gt; 
&gt; We could even have Base::swap() do the m_size swap to make things clearer.

For example, Deque uses swap() but not m_size.  So, this would break Deque since m_size would have some irrelevant value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981184</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-15 10:20:20 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 224281 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224281&amp;action=review
&gt; 
&gt; I would reeaaaallly like a test, even only on OS X. That will take 5 minutes and will avoid any stupid mistakes like this in future refactoring.
&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:480
&gt; &gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; &gt; +            swapInlineBuffer(other, mySize, otherSize);
&gt; &gt;              std::swap(m_capacity, other.m_capacity);
&gt; &gt;          } else if (other.buffer() == other.inlineBuffer()) {
&gt; &gt;              other.m_buffer = m_buffer;
&gt; &gt;              m_buffer = inlineBuffer();
&gt; &gt; -            std::swap(m_inlineBuffer, other.m_inlineBuffer);
&gt; &gt; +            swapInlineBuffer(other, mySize, otherSize);
&gt; 
&gt; I am not sure I like swapInlineBuffer() in those cases though.
&gt; 
&gt; On remove, we just call the destructor. So it is basically garbage in one or the other of the inlineBuffer and we will swap valid values with garbage.
&gt; 
&gt; In these two cases, I would instead do a moveOperation from the buffer to the inline_buffer, followed by a call to the destructors on the unused inlineBuffer.

I could do this, but VectorTypeOperatins&lt;T&gt;::move() should do all of the right things, obviating the need to call destructors.

&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:535
&gt; &gt; +        for (unsigned i = swapBound; i--;)
&gt; &gt; +            std::swap(left[i], right[i]);
&gt; 
&gt; Why do you go from swapBound to zero instead of zero to swapBound-1?
&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:715
&gt; &gt; +        Base::swap(other, m_size, other.m_size);
&gt; 
&gt; m_size is on VectorBufferBase, not sure you need to pass it here.
&gt; 
&gt; We could even have Base::swap() do the m_size swap to make things clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981199</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-15 13:03:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I will add one.  As I said in an earlier comment, I was using r? to get feedback on an incomplete patch.  The final patch will have to include changes to Deque and a test.  If you prefer, I can wait with requesting feedback until the patch is complete.  However, you just found a bug, so I think it&apos;s a good thing.

My bad. I thought you needed a quick review to unblock your FTL patches.

&gt; &gt; &gt; Source/WTF/wtf/Vector.h:535
&gt; &gt; &gt; +        for (unsigned i = swapBound; i--;)
&gt; &gt; &gt; +            std::swap(left[i], right[i]);
&gt; &gt; 
&gt; &gt; Why do you go from swapBound to zero instead of zero to swapBound-1?
&gt; 
&gt; This goes from swapBound - 1 to 0.  I prefer downward loops because they tend to be slightly cheaper in hardware (loop condition compares against zero, a constant, rather than the length, a non-constant that needs to be kept in a register or somewhere else).  This style of downward loop is particularly robust; it works with both unsigned and signed indices.

I gotta love your way of thinking there :)

You can use a forward loop with clang. It optimizes it to either indexed forward loop or a downward loop depending on what is best for the memory access on the particular platform.
While the comparison with zero is cheap, going backward over memory will mess with the hardware prefetcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981202</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-15 13:13:50 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; I will add one.  As I said in an earlier comment, I was using r? to get feedback on an incomplete patch.  The final patch will have to include changes to Deque and a test.  If you prefer, I can wait with requesting feedback until the patch is complete.  However, you just found a bug, so I think it&apos;s a good thing.
&gt; 
&gt; My bad. I thought you needed a quick review to unblock your FTL patches.
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/Vector.h:535
&gt; &gt; &gt; &gt; +        for (unsigned i = swapBound; i--;)
&gt; &gt; &gt; &gt; +            std::swap(left[i], right[i]);
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do you go from swapBound to zero instead of zero to swapBound-1?
&gt; &gt; 
&gt; &gt; This goes from swapBound - 1 to 0.  I prefer downward loops because they tend to be slightly cheaper in hardware (loop condition compares against zero, a constant, rather than the length, a non-constant that needs to be kept in a register or somewhere else).  This style of downward loop is particularly robust; it works with both unsigned and signed indices.
&gt; 
&gt; I gotta love your way of thinking there :)
&gt; 
&gt; You can use a forward loop with clang. It optimizes it to either indexed forward loop or a downward loop depending on what is best for the memory access on the particular platform.

All compilers do this, if they can prove no loop-carried dependencies; this may be hard if the constructor/destructor of T does anything funny.  Even partial funny business like:

if (soooper rare case)
    call out-of-line function from a different module

will break any change-loop-direction kinds of optimizations.

&gt; While the comparison with zero is cheap, going backward over memory will mess with the hardware prefetcher.

Huh.  Never heard of that one.  I&apos;ll take your word for it though. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981212</commentid>
    <comment_count>12</comment_count>
      <attachid>224302</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-15 16:12:10 -0800</bug_when>
    <thetext>Created attachment 224302
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981213</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-15 16:14:07 -0800</bug_when>
    <thetext>Attachment 224302 did not pass style-queue:


ERROR: Source/WTF/wtf/Deque.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Deque.h:165:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Deque.h:196:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 3 in 9 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>981226</commentid>
    <comment_count>14</comment_count>
      <attachid>224302</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-02-15 18:44:30 -0800</bug_when>
    <thetext>Comment on attachment 224302
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981228</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-15 18:49:32 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/164185</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224279</attachid>
            <date>2014-02-14 20:36:22 -0800</date>
            <delta_ts>2014-02-14 20:38:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>3955</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQxNTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTAyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVmVjdG9yIHdpdGggaW5saW5lIGNhcGFjaXR5IHNob3Vs
ZCB3b3JrIHdpdGggbm9uLVBPRHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyODg2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBpdCB3YXMgc3dhcHBpbmcgYml0cy4gVGhh
dCdzIGJhZCBpZiB0aGUgZWxlbWVudCBpcyBub3QgYSBQT0QgYW5kIHdhbnRzIHRvIGJlCisgICAg
ICAgIG5vdGlmaWVkIHdoZW4geW91IHJlbG9jYXRlZCBpdC4KKworICAgICAgICAqIHd0Zi9WZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdURjo6
VmVjdG9yQnVmZmVyOjpzd2FwSW5saW5lQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjpzd2FwSW5saW5lQnVmZmVycyk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6c3dhcCk6CisK
IDIwMTQtMDItMTQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb24gbW9iaWxlIG9mIEZUUERpcmVjdG9yeURv
Y3VtZW50CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTY0MTQxKQorKysgU291cmNlL1dURi93dGYv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN3
YXAoVmVjdG9yQnVmZmVyPFQsIDA+JiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVy
PFQsIDA+JiBvdGhlciwgc2l6ZV90LCBzaXplX3QpCiAgICAgewogICAgICAgICBzdGQ6OnN3YXAo
bV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNpdHks
IG90aGVyLm1fY2FwYWNpdHkpOwpAQCAtNDY0LDIwICs0NjQsMjAgQEAgcHVibGljOgogICAgICAg
ICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICB9CiAKLSAgICB2b2lk
IHN3YXAoVmVjdG9yQnVmZmVyJiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVyJiBv
dGhlciwgc2l6ZV90IG15U2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKICAgICB7CiAgICAgICAgIGlm
IChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIoKSAmJiBvdGhlci5idWZmZXIoKSA9PSBvdGhlci5p
bmxpbmVCdWZmZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBv
dGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVy
LCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwg
b3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKCkgPT0gaW5saW5l
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7CiAgICAg
ICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG90aGVyLmlubGluZUJ1ZmZlcigpOwotICAgICAgICAg
ICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAg
ICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAg
ICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAg
IH0gZWxzZSBpZiAob3RoZXIuYnVmZmVyKCkgPT0gb3RoZXIuaW5saW5lQnVmZmVyKCkpIHsKICAg
ICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbV9idWZmZXI7CiAgICAgICAgICAgICBtX2J1ZmZl
ciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVy
LCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90
aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0
eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGQ6
OnN3YXAobV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKQEAgLTUxMCw2ICs1MTAsMjkgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICB1c2luZyBCYXNlOjptX2J1ZmZlcjsKICAgICB1c2luZyBC
YXNlOjptX2NhcGFjaXR5OworICAgIAorICAgIHZvaWQgc3dhcElubGluZUJ1ZmZlcihWZWN0b3JC
dWZmZXImIG90aGVyLCBzaXplX3QgbXlTaXplLCBzaXplX3Qgb3RoZXJTaXplKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ugc3dhcCBwYXJ0IG9mIFZlY3RvclR5cGVPcGVy
YXRpb25zCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjg4NjMKKyAgICAgICAgCisgICAgICAgIGlmIChzdGQ6OmlzX3BvZDxUPjo6dmFsdWUpCisg
ICAgICAgICAgICBzdGQ6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dhcElubGluZUJ1ZmZlcnMoaW5saW5lQnVm
ZmVyKCksIG90aGVyLmlubGluZUJ1ZmZlcigpLCBteVNpemUsIG90aGVyU2l6ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHN3YXBJbmxpbmVCdWZmZXJzKFQqIGxlZnQsIFQqIHJpZ2h0
LCBzaXplX3QgbGVmdFNpemUsIHNpemVfdCByaWdodFNpemUpCisgICAgeworICAgICAgICBpZiAo
bGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNp
emVfdCBzd2FwQm91bmQgPSBzdGQ6Om1pbihsZWZ0U2l6ZSwgcmlnaHRTaXplKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN3YXBCb3VuZDsgKytpKQorICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxlZnRbaV0sIHJpZ2h0W2ldKTsKKyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8
VD46Om1vdmUobGVmdCArIHN3YXBCb3VuZCwgbGVmdCArIGxlZnRTaXplLCByaWdodCArIHN3YXBC
b3VuZCk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojptb3ZlKHJpZ2h0ICsgc3dh
cEJvdW5kLCByaWdodCArIHJpZ2h0U2l6ZSwgbGVmdCArIHN3YXBCb3VuZCk7CisgICAgfQogCiAg
ICAgVCogaW5saW5lQnVmZmVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VCo+KG1f
aW5saW5lQnVmZmVyKTsgfQogICAgIGNvbnN0IFQqIGlubGluZUJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFQqPihtX2lubGluZUJ1ZmZlcik7IH0KQEAg
LTY4Niw4ICs3MDksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBvdGhlcikKICAgICB7CisgICAgICAgIEJhc2U6
OnN3YXAob3RoZXIsIG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKICAgICAgICAgc3RkOjpzd2FwKG1f
c2l6ZSwgb3RoZXIubV9zaXplKTsKLSAgICAgICAgQmFzZTo6c3dhcChvdGhlcik7CiAgICAgfQog
CiAgICAgdm9pZCByZXZlcnNlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224280</attachid>
            <date>2014-02-14 20:38:38 -0800</date>
            <delta_ts>2014-02-14 20:53:13 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQxNTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTAyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVmVjdG9yIHdpdGggaW5saW5lIGNhcGFjaXR5IHNob3Vs
ZCB3b3JrIHdpdGggbm9uLVBPRHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyODg2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBpdCB3YXMgc3dhcHBpbmcgYml0cy4gVGhh
dCdzIGJhZCBpZiB0aGUgZWxlbWVudCBpcyBub3QgYSBQT0QgYW5kIHdhbnRzIHRvIGJlCisgICAg
ICAgIG5vdGlmaWVkIHdoZW4geW91IHJlbG9jYXRlZCBpdC4KKworICAgICAgICAqIHd0Zi9WZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdURjo6
VmVjdG9yQnVmZmVyOjpzd2FwSW5saW5lQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjpzd2FwSW5saW5lQnVmZmVycyk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6c3dhcCk6CisK
IDIwMTQtMDItMTQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb24gbW9iaWxlIG9mIEZUUERpcmVjdG9yeURv
Y3VtZW50CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTY0MTQxKQorKysgU291cmNlL1dURi93dGYv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN3
YXAoVmVjdG9yQnVmZmVyPFQsIDA+JiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVy
PFQsIDA+JiBvdGhlciwgc2l6ZV90LCBzaXplX3QpCiAgICAgewogICAgICAgICBzdGQ6OnN3YXAo
bV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNpdHks
IG90aGVyLm1fY2FwYWNpdHkpOwpAQCAtNDY0LDIwICs0NjQsMjAgQEAgcHVibGljOgogICAgICAg
ICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICB9CiAKLSAgICB2b2lk
IHN3YXAoVmVjdG9yQnVmZmVyJiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVyJiBv
dGhlciwgc2l6ZV90IG15U2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKICAgICB7CiAgICAgICAgIGlm
IChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIoKSAmJiBvdGhlci5idWZmZXIoKSA9PSBvdGhlci5p
bmxpbmVCdWZmZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBv
dGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVy
LCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwg
b3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKCkgPT0gaW5saW5l
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7CiAgICAg
ICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG90aGVyLmlubGluZUJ1ZmZlcigpOwotICAgICAgICAg
ICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAg
ICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAg
ICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAg
IH0gZWxzZSBpZiAob3RoZXIuYnVmZmVyKCkgPT0gb3RoZXIuaW5saW5lQnVmZmVyKCkpIHsKICAg
ICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbV9idWZmZXI7CiAgICAgICAgICAgICBtX2J1ZmZl
ciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVy
LCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90
aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0
eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGQ6
OnN3YXAobV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKQEAgLTUxMCw2ICs1MTAsMzEgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICB1c2luZyBCYXNlOjptX2J1ZmZlcjsKICAgICB1c2luZyBC
YXNlOjptX2NhcGFjaXR5OworICAgIAorICAgIHZvaWQgc3dhcElubGluZUJ1ZmZlcihWZWN0b3JC
dWZmZXImIG90aGVyLCBzaXplX3QgbXlTaXplLCBzaXplX3Qgb3RoZXJTaXplKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ugc3dhcCBwYXJ0IG9mIFZlY3RvclR5cGVPcGVy
YXRpb25zCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjg4NjMKKyAgICAgICAgCisgICAgICAgIGlmIChzdGQ6OmlzX3BvZDxUPjo6dmFsdWUpCisg
ICAgICAgICAgICBzdGQ6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dhcElubGluZUJ1ZmZlcnMoaW5saW5lQnVm
ZmVyKCksIG90aGVyLmlubGluZUJ1ZmZlcigpLCBteVNpemUsIG90aGVyU2l6ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHN3YXBJbmxpbmVCdWZmZXJzKFQqIGxlZnQsIFQqIHJpZ2h0
LCBzaXplX3QgbGVmdFNpemUsIHNpemVfdCByaWdodFNpemUpCisgICAgeworICAgICAgICBpZiAo
bGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNp
emVfdCBzd2FwQm91bmQgPSBzdGQ6Om1pbihsZWZ0U2l6ZSwgcmlnaHRTaXplKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN3YXBCb3VuZDsgKytpKQorICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxlZnRbaV0sIHJpZ2h0W2ldKTsKKyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8
VD46Om1vdmUoCisgICAgICAgICAgICBsZWZ0ICsgc3dhcEJvdW5kLCBsZWZ0ICsgc3RkOjptaW4o
bGVmdFNpemUsIGlubGluZUNhcGFjaXR5KSwgcmlnaHQgKyBzd2FwQm91bmQpOworICAgICAgICBW
ZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6bW92ZSgKKyAgICAgICAgICAgIHJpZ2h0ICsgc3dhcEJv
dW5kLCByaWdodCArIHN0ZDo6bWluKHJpZ2h0U2l6ZSwgaW5saW5lQ2FwYWNpdHkpLCBsZWZ0ICsg
c3dhcEJvdW5kKTsKKyAgICB9CiAKICAgICBUKiBpbmxpbmVCdWZmZXIoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0X3B0cjxUKj4obV9pbmxpbmVCdWZmZXIpOyB9CiAgICAgY29uc3QgVCogaW5s
aW5lQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVCo+
KG1faW5saW5lQnVmZmVyKTsgfQpAQCAtNjg2LDggKzcxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc3dhcChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIG90aGVy
KQogICAgIHsKKyAgICAgICAgQmFzZTo6c3dhcChvdGhlciwgbV9zaXplLCBvdGhlci5tX3NpemUp
OwogICAgICAgICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOwotICAgICAgICBCYXNl
Ojpzd2FwKG90aGVyKTsKICAgICB9CiAKICAgICB2b2lkIHJldmVyc2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224281</attachid>
            <date>2014-02-14 20:53:13 -0800</date>
            <delta_ts>2014-02-15 16:12:10 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4073</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQxNTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTAyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVmVjdG9yIHdpdGggaW5saW5lIGNhcGFjaXR5IHNob3Vs
ZCB3b3JrIHdpdGggbm9uLVBPRHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyODg2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBpdCB3YXMgc3dhcHBpbmcgYml0cy4gVGhh
dCdzIGJhZCBpZiB0aGUgZWxlbWVudCBpcyBub3QgYSBQT0QgYW5kIHdhbnRzIHRvIGJlCisgICAg
ICAgIG5vdGlmaWVkIHdoZW4geW91IHJlbG9jYXRlZCBpdC4KKworICAgICAgICAqIHd0Zi9WZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6VmVjdG9yQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdURjo6
VmVjdG9yQnVmZmVyOjpzd2FwSW5saW5lQnVmZmVyKToKKyAgICAgICAgKFdURjo6VmVjdG9yQnVm
ZmVyOjpzd2FwSW5saW5lQnVmZmVycyk6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6c3dhcCk6CisK
IDIwMTQtMDItMTQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb24gbW9iaWxlIG9mIEZUUERpcmVjdG9yeURv
Y3VtZW50CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTY0MTQxKQorKysgU291cmNlL1dURi93dGYv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN3
YXAoVmVjdG9yQnVmZmVyPFQsIDA+JiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVy
PFQsIDA+JiBvdGhlciwgc2l6ZV90LCBzaXplX3QpCiAgICAgewogICAgICAgICBzdGQ6OnN3YXAo
bV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNpdHks
IG90aGVyLm1fY2FwYWNpdHkpOwpAQCAtNDY0LDIwICs0NjQsMjAgQEAgcHVibGljOgogICAgICAg
ICBCYXNlOjpyZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICB9CiAKLSAgICB2b2lk
IHN3YXAoVmVjdG9yQnVmZmVyJiBvdGhlcikKKyAgICB2b2lkIHN3YXAoVmVjdG9yQnVmZmVyJiBv
dGhlciwgc2l6ZV90IG15U2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKICAgICB7CiAgICAgICAgIGlm
IChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIoKSAmJiBvdGhlci5idWZmZXIoKSA9PSBvdGhlci5p
bmxpbmVCdWZmZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBv
dGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVy
LCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwg
b3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKCkgPT0gaW5saW5l
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIG1fYnVmZmVyID0gb3RoZXIubV9idWZmZXI7CiAgICAg
ICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG90aGVyLmlubGluZUJ1ZmZlcigpOwotICAgICAgICAg
ICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAg
ICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAg
ICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAg
IH0gZWxzZSBpZiAob3RoZXIuYnVmZmVyKCkgPT0gb3RoZXIuaW5saW5lQnVmZmVyKCkpIHsKICAg
ICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbV9idWZmZXI7CiAgICAgICAgICAgICBtX2J1ZmZl
ciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVy
LCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5saW5lQnVmZmVyKG90
aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0
eSwgb3RoZXIubV9jYXBhY2l0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGQ6
OnN3YXAobV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKQEAgLTUxMCw2ICs1MTAsMzIgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICB1c2luZyBCYXNlOjptX2J1ZmZlcjsKICAgICB1c2luZyBC
YXNlOjptX2NhcGFjaXR5OworICAgIAorICAgIHZvaWQgc3dhcElubGluZUJ1ZmZlcihWZWN0b3JC
dWZmZXImIG90aGVyLCBzaXplX3QgbXlTaXplLCBzaXplX3Qgb3RoZXJTaXplKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ugc3dhcCBwYXJ0IG9mIFZlY3RvclR5cGVPcGVy
YXRpb25zCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjg4NjMKKyAgICAgICAgCisgICAgICAgIGlmIChzdGQ6OmlzX3BvZDxUPjo6dmFsdWUpCisg
ICAgICAgICAgICBzdGQ6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3dhcElubGluZUJ1ZmZlcnMoaW5saW5lQnVm
ZmVyKCksIG90aGVyLmlubGluZUJ1ZmZlcigpLCBteVNpemUsIG90aGVyU2l6ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHN3YXBJbmxpbmVCdWZmZXJzKFQqIGxlZnQsIFQqIHJpZ2h0
LCBzaXplX3QgbGVmdFNpemUsIHNpemVfdCByaWdodFNpemUpCisgICAgeworICAgICAgICBpZiAo
bGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGxl
ZnRTaXplID0gc3RkOjptaW4obGVmdFNpemUsIGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmln
aHRTaXplID0gc3RkOjptaW4ocmlnaHRTaXplLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIAor
ICAgICAgICBzaXplX3Qgc3dhcEJvdW5kID0gc3RkOjptaW4obGVmdFNpemUsIHJpZ2h0U2l6ZSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN3YXBCb3VuZDsgaS0tOykKKyAgICAgICAgICAg
IHN0ZDo6c3dhcChsZWZ0W2ldLCByaWdodFtpXSk7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRp
b25zPFQ+Ojptb3ZlKGxlZnQgKyBzd2FwQm91bmQsIGxlZnQgKyBsZWZ0U2l6ZSwgcmlnaHQgKyBz
d2FwQm91bmQpOworICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6bW92ZShyaWdodCAr
IHN3YXBCb3VuZCwgcmlnaHQgKyByaWdodFNpemUsIGxlZnQgKyBzd2FwQm91bmQpOworICAgIH0K
IAogICAgIFQqIGlubGluZUJ1ZmZlcigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFQq
PihtX2lubGluZUJ1ZmZlcik7IH0KICAgICBjb25zdCBUKiBpbmxpbmVCdWZmZXIoKSBjb25zdCB7
IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBUKj4obV9pbmxpbmVCdWZmZXIpOyB9
CkBAIC02ODYsOCArNzEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzd2FwKFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgb3RoZXIpCiAgICAgeworICAgICAgICBC
YXNlOjpzd2FwKG90aGVyLCBtX3NpemUsIG90aGVyLm1fc2l6ZSk7CiAgICAgICAgIHN0ZDo6c3dh
cChtX3NpemUsIG90aGVyLm1fc2l6ZSk7Ci0gICAgICAgIEJhc2U6OnN3YXAob3RoZXIpOwogICAg
IH0KIAogICAgIHZvaWQgcmV2ZXJzZSgpOwo=
</data>
<flag name="review"
          id="248363"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224302</attachid>
            <date>2014-02-15 16:12:10 -0800</date>
            <delta_ts>2014-02-15 18:44:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31398</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDE0LTAyLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VmVjdG9yIHdpdGggaW5saW5lIGNhcGFjaXR5IHNob3VsZCB3b3JrIHdpdGggbm9uLVBPRHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODg2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR1dv
cmtsaXN0Lmg6CisKIDIwMTQtMDItMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsIG91dCByMTY0MTY2LgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTY0MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3
ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wKGNvbnN0IE11dGV4TG9ja2VyJiwgUHJp
bnRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIFVzZWQgdG8gaW5mb3JtIHRoZSB0aHJlYWQgYWJv
dXQgd2hhdCB3b3JrIHRoZXJlIGlzIGxlZnQgdG8gZG8uCi0gICAgRGVxdWU8UmVmUHRyPFBsYW4+
LCAxNj4gbV9xdWV1ZTsKKyAgICBEZXF1ZTxSZWZQdHI8UGxhbj4+IG1fcXVldWU7CiAgICAgCiAg
ICAgLy8gVXNlZCB0byBhbnN3ZXIgcXVlc3Rpb25zIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9m
IGEgY29kZSBibG9jay4gVGhpcwogICAgIC8vIGlzIHBhcnRpY3VsYXJseSBncmVhdCBmb3IgdGhl
IGN0aV9vcHRpbWl6ZSBPU1Igc2xvdyBwYXRoLCB3aGljaCB3YW50cwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE2NDE4MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNTkgQEAKKzIwMTQtMDItMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBWZWN0b3Igd2l0aCBpbmxpbmUgY2FwYWNpdHkgc2hvdWxkIHdvcmsgd2l0aCBub24t
UE9EcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4
ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBjb3B5IHRoZSBpbmxpbmUgc3RvcmFnZSBvZiBhIHZl
Y3RvciBhcyBpZiBpdCB3YXMgYSBiYWcgb2YgYml0cy4KKyAgICAgICAgVGhpcyBwcmVzdW1lZCB0
aGF0IHRoZSBlbGVtZW50IHR5cGUgd2FzIHJlbG9jYXRhYmxlLiBJbiBnZW5lcmFsIHRoaXMgaXMg
b25seSB0cnVlIGZvcgorICAgICAgICBQT0RzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBjaGFuZ2VzIHRoaXMgYnkgaW50cm9kdWNpbmcgYSBzd2FwIG9wZXJhdGlvbiBvdmVyIGlubGlu
ZSBzdG9yYWdlLiBUaGlzIHN3YXAKKyAgICAgICAgb3BlcmF0aW9uIHJlcXVpcmVzIGJlaW5nIHRv
bGQgYWJvdXQgdGhlIHNpemUgdGhhdCBpcyBpbiB1c2UuCisgICAgICAgIAorICAgICAgICBEZXF1
ZXMgd291bGQgaGF2ZSByZXF1aXJlZCBzb21lIGNsZXZlcm5lc3MgdG8gbWFrZSB0aGlzIHdvcmss
IGJlY2F1c2UgdGhlIHN3YXAKKyAgICAgICAgb3BlcmF0aW9uIG5lZWRzIHRvIGtub3cgd2hpY2gg
c3Vic2V0IG9mIGVsZW1lbnRzIGFyZSBpbi11c2UgYW5kIGFzc3VtZXMgdGhhdCBhIHNpemUgaXMK
KyAgICAgICAgc3VmZmljaWVudCBmb3IgdGhpcy4gVGhhdCdzIG5vdCB0cnVlIGZvciBkZXF1ZXMu
IEluc3RlYWQgb2YgdHJ5aW5nIHRvIGRvIHZlcnkgY2xldmVyCisgICAgICAgIHRoaW5ncywgSSBq
dXN0IHJlbW92ZWQgdGhlIGlubGluZSBjYXBhY2l0eSBvcHRpb24gZnJvbSBEZXF1ZS4gSSBiZWxp
ZXZlIHRoYXQgdGhpcyBpcworICAgICAgICBmaW5lIHNpbmNlIHRoZXJlIGFyZSBvbmx5IHR3byB1
c2VycyBvZiBEZXF1ZSB3aXRoIGlubGluZSBjYXBhY2l0eSwgYW5kIGJvdGggb2YgdGhlbQorICAg
ICAgICBhcHBlYXIgdG8gYmUgYWxsb2NhdGVkIHJhcmVseSBlbm91Z2ggdGhhdCBpbmxpbmUgY2Fw
YWNpdHkgcHJvYmFibHkgZG9lc24ndCBoZWxwIG11Y2guCisKKyAgICAgICAgKiB3dGYvRGVxdWUu
aDoKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvcjo6RGVxdWVJdGVyYXRvcik6CisgICAgICAg
IChXVEY6OkRlcXVlQ29uc3RJdGVyYXRvcjo6RGVxdWVDb25zdEl0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6RGVxdWU8VD46OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6
Y2hlY2tJbmRleFZhbGlkaXR5KToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OmludmFsaWRhdGVJ
dGVyYXRvcnMpOgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6RGVxdWUpOgorICAgICAgICAoV1RG
Ojo9KToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OmRlc3Ryb3lBbGwpOgorICAgICAgICAoV1RG
OjpEZXF1ZTxUPjo6fkRlcXVlKToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OnN3YXApOgorICAg
ICAgICAoV1RGOjpEZXF1ZTxUPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6ZXhw
YW5kQ2FwYWNpdHlJZk5lZWRlZCk6CisgICAgICAgIChXVEY6OkRlcXVlPFQ+OjpleHBhbmRDYXBh
Y2l0eSk6CisgICAgICAgIChXVEY6OkRlcXVlPFQ+OjphcHBlbmQpOgorICAgICAgICAoV1RGOjpE
ZXF1ZTxUPjo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6OkRlcXVlPFQ+OjpyZW1vdmVGaXJzdCk6
CisgICAgICAgIChXVEY6OkRlcXVlPFQ+OjpyZW1vdmVMYXN0KToKKyAgICAgICAgKFdURjo6RGVx
dWU8VD46OnJlbW92ZSk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVj
a1ZhbGlkaXR5KToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OmFkZFRvSXRl
cmF0b3JzTGlzdCk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+OjpyZW1vdmVG
cm9tSXRlcmF0b3JzTGlzdCk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+OjpE
ZXF1ZUl0ZXJhdG9yQmFzZSk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+Ojp+
RGVxdWVJdGVyYXRvckJhc2UpOgorICAgICAgICAoV1RGOjpEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
aXNFcXVhbCk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+OjppbmNyZW1lbnQp
OgorICAgICAgICAoV1RGOjpEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6ZGVjcmVtZW50KToKKyAgICAg
ICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OmFmdGVyKToKKyAgICAgICAgKFdURjo6RGVx
dWVJdGVyYXRvckJhc2U8VD46OmJlZm9yZSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpWZWN0b3JCdWZmZXI6OnN3YXApOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZm
ZXI6OnN3YXBJbmxpbmVCdWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXI6OnN3YXBJ
bmxpbmVCdWZmZXJzKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjpzd2FwKToKKwogMjAxNC0wMi0x
NSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgJ3N0YXRpYycgc3BlY2lmaWVyIGZyb20gZnJlZSBpbmxpbmUgZnVuY3Rp
b25zIGluIFN0cmluZ0ltcGwuaApJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAxNjQxNzgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOCwyNSArMzgsMjUgQEAKIAogbmFtZXNw
YWNlIFdURiB7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVlQ29uc3RJdGVyYXRv
cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlQ29uc3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICBjbGFzcyBEZXF1ZSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNh
cGFjaXR5PiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRl
cmF0b3I8VD4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+
IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxp
dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2Vf
aXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKICAgICAg
ICAgRGVxdWUoKTsKLSAgICAgICAgRGVxdWUoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+
Jik7Ci0gICAgICAgIERlcXVlJiBvcGVyYXRvcj0oY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+Jik7CisgICAgICAgIERlcXVlKGNvbnN0IERlcXVlPFQ+Jik7CisgICAgICAgIERlcXVlJiBv
cGVyYXRvcj0oY29uc3QgRGVxdWU8VD4mKTsKICAgICAgICAgfkRlcXVlKCk7CiAKLSAgICAgICAg
dm9pZCBzd2FwKERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYpOworICAgICAgICB2b2lkIHN3YXAo
RGVxdWU8VD4mKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQgPD0gbV9lbmQgPyBtX2VuZCAtIG1fc3RhcnQgOiBtX2VuZCArIG1fYnVmZmVyLmNhcGFjaXR5
KCkgLSBtX3N0YXJ0OyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnQgPT0gbV9lbmQ7IH0KQEAgLTkxLDExICs5MSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgaXRlcmF0b3IgZmluZElmKFByZWRpY2F0ZSYmKTsKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT47Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjsKIAotICAgICAgICB0eXBl
ZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQnVmZmVyOworICAgICAgICB0eXBl
ZGVmIFZlY3RvckJ1ZmZlcjxULCAwPiBCdWZmZXI7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlw
ZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlvbnM7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJhdG9yQmFzZTsKKyAgICAgICAgdHlwZWRl
ZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBJdGVyYXRvckJhc2U7CiAKICAgICAgICAgdm9pZCByZW1v
dmUoc2l6ZV90IHBvc2l0aW9uKTsKICAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CkBAIC0xMTMsMTEgKzExMywxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgY2xhc3MgRGVxdWVJdGVyYXRvckJhc2UgewogICAg
IHByb3RlY3RlZDoKICAgICAgICAgRGVxdWVJdGVyYXRvckJhc2UoKTsKLSAgICAgICAgRGVxdWVJ
dGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Kiwgc2l6ZV90KTsKKyAg
ICAgICAgRGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qLCBzaXplX3QpOwogICAgICAg
ICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYpOwogICAgICAgICBE
ZXF1ZUl0ZXJhdG9yQmFzZSYgb3BlcmF0b3I9KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJik7CiAg
ICAgICAgIH5EZXF1ZUl0ZXJhdG9yQmFzZSgpOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eSgpIGNvbnN0OwogICAgICAgICB2
b2lkIGNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKSBjb25zdDsKIAotICAg
ICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7CisgICAgICAgIERlcXVlPFQ+
KiBtX2RlcXVlOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKIAotICAgICAgICBmcmllbmQgY2xh
c3MgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OworICAgICAgICBmcmllbmQgY2xhc3MgRGVxdWU8
VD47CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG11dGFibGUgRGVxdWVJdGVyYXRvckJhc2Uq
IG1fbmV4dDsKQEAgLTE0OSwxMSArMTQ5LDExIEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlmCiAg
ICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9
IDA+Ci0gICAgY2xhc3MgRGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxU
LCBpbmxpbmVDYXBhY2l0eT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3Mg
RGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4g
QmFzZTsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBJ
dGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBCYXNlOworICAg
ICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAKICAgICBwdWJsaWM6CiAg
ICAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKQEAgLTE2Miw3ICsxNjIs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgICAg
ICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKIAotICAgICAgICBEZXF1ZUl0ZXJhdG9yKERlcXVlPFQsIGlubGluZUNhcGFjaXR5Piog
ZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CisgICAgICAgIERl
cXVlSXRlcmF0b3IoRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwg
aW5kZXgpIHsgfQogCiAgICAgICAgIERlcXVlSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVy
KSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAgICBEZXF1ZUl0ZXJhdG9yJiBvcGVyYXRvcj0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSB7IEJhc2U6OmFzc2lnbihvdGhlcik7IHJldHVybiAqdGhpczsg
fQpAQCAtMTc5LDEyICsxNzksMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIHBvc3Rm
aXggLS0gaW50ZW50aW9uYWxseSBvbWl0dGVkCiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+Ci0gICAgY2xhc3MgRGVxdWVDb25zdEl0
ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3IgOiBw
dWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVk
ZWYgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7Ci0gICAgICAgIHR5
cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvcjsKLSAg
ICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBOb25Db25zdEl0
ZXJhdG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7CisgICAg
ICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIERlcXVlSXRlcmF0b3I8VD4gTm9uQ29uc3RJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAg
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwpAQCAtMTkzLDcgKzE5Myw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIGNvbnN0IFQmIHJlZmVyZW5jZTsK
ICAgICAgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5OwogCi0gICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgp
IHsgfQorICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBz
aXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQogCiAgICAgICAgIERlcXVlQ29u
c3RJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShvdGhlcikgeyB9CiAgICAg
ICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBOb25Db25zdEl0ZXJhdG9yJiBvdGhlcikgOiBC
YXNlKG90aGVyKSB7IH0KQEAgLTIxMywxMiArMjEzLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IH07CiAKICNpZmRlZiBOREVCVUcKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tW
YWxpZGl0eSgpIGNvbnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja0lu
ZGV4VmFsaWRpdHkoc2l6ZV90KSBjb25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShz
aXplX3QpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERl
cXVlPFQ+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZWxzZQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICB2b2lkIERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YXRpb24gYSBjYXBhY2l0eSBvZiAxIHdvdWxkIGNvbmZ1
c2UgYXBwZW5kKCkgYW5kCiAgICAgICAgIC8vIG90aGVyIHBsYWNlcyB0aGF0IGFzc3VtZSB0aGUg
aW5kZXggYWZ0ZXIgY2FwYWNpdHkgLSAxIGlzIDAuCkBAIC0yMzMsOCArMjMzLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46
OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIERlcXVlPFQ+OjpjaGVja0luZGV4VmFsaWRpdHkoc2l6ZV90IGlu
ZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChpbmRleCwgaW5kZXggPD0g
bV9idWZmZXIuY2FwYWNpdHkoKSk7CiAgICAgICAgIGlmIChtX3N0YXJ0IDw9IG1fZW5kKSB7CkBA
IC0yNDUsOCArMjQ1LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgdm9pZCBE
ZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygp
CiAgICAgewogICAgICAgICBJdGVyYXRvckJhc2UqIG5leHQ7CiAgICAgICAgIGZvciAoSXRlcmF0
b3JCYXNlKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CkBAIC0yNTksOCArMjU5LDgg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5lIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6RGVxdWUoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIERl
cXVlPFQ+OjpEZXF1ZSgpCiAgICAgICAgIDogbV9zdGFydCgwKQogICAgICAgICAsIG1fZW5kKDAp
CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjcwLDggKzI3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OkRlcXVlKGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgRGVxdWU8VD46OkRlcXVlKGNvbnN0IERlcXVl
PFQ+JiBvdGhlcikKICAgICAgICAgOiBtX3N0YXJ0KG90aGVyLm1fc3RhcnQpCiAgICAgICAgICwg
bV9lbmQob3RoZXIubV9lbmQpCiAgICAgICAgICwgbV9idWZmZXIob3RoZXIubV9idWZmZXIuY2Fw
YWNpdHkoKSkKQEAgLTI4OCw4ICsyODgsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
LSAgICBpbmxpbmUgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIERlcXVlPFQ+JiBEZXF1ZTxUPjo6
b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQ+JiBvdGhlcikKICAgICB7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGluZWZmaWNpZW50IGlmIHdlJ3JlIHVzaW5nIGFuIGlubGluZSBidWZmZXIgYW5k
IFQgaXMKICAgICAgICAgLy8gZXhwZW5zaXZlIHRvIGNvcHkgc2luY2UgaXQgd2lsbCBjb3B5IHRo
ZSBidWZmZXIgdHdpY2UgaW5zdGVhZCBvZiBvbmNlLgpAQCAtMjk4LDggKzI5OCw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGlubGluZSB2b2lkIERlcXVl
PFQsIGlubGluZUNhcGFjaXR5Pjo6ZGVzdHJveUFsbCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZGVzdHJveUFsbCgpCiAgICAgewogICAgICAg
ICBpZiAobV9zdGFydCA8PSBtX2VuZCkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0
cnVjdChtX2J1ZmZlci5idWZmZXIoKSArIG1fc3RhcnQsIG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9l
bmQpOwpAQCAtMzA5LDI5ICszMDksMjkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0g
ICAgaW5saW5lIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6fkRlcXVlKCkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBEZXF1ZTxUPjo6fkRlcXVlKCkKICAgICB7CiAgICAg
ICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwogICAg
ICAgICBkZXN0cm95QWxsKCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6c3dhcChEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnN3YXAoRGVxdWU8VD4mIG90
aGVyKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBvdGhlci5jaGVj
a1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKICAgICAgICAgc3Rk
Ojpzd2FwKG1fc3RhcnQsIG90aGVyLm1fc3RhcnQpOwogICAgICAgICBzdGQ6OnN3YXAobV9lbmQs
IG90aGVyLm1fZW5kKTsKLSAgICAgICAgbV9idWZmZXIuc3dhcChvdGhlci5tX2J1ZmZlcik7Cisg
ICAgICAgIG1fYnVmZmVyLnN3YXAob3RoZXIubV9idWZmZXIsIDAsIDApOwogICAgICAgICBjaGVj
a1ZhbGlkaXR5KCk7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5l
IHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjbGVhcigpCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6Y2xlYXIoKQogICAgIHsKICAgICAg
ICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0z
NDIsOSArMzQyLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNh
dGU+Ci0gICAgaW5saW5lIGF1dG8gRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaW5kSWYoUHJl
ZGljYXRlJiYgcHJlZGljYXRlKSAtPiBpdGVyYXRvcgorICAgIGlubGluZSBhdXRvIERlcXVlPFQ+
OjpmaW5kSWYoUHJlZGljYXRlJiYgcHJlZGljYXRlKSAtPiBpdGVyYXRvcgogICAgIHsKICAgICAg
ICAgaXRlcmF0b3IgZW5kX2l0ZXJhdG9yID0gZW5kKCk7CiAgICAgICAgIGZvciAoaXRlcmF0b3Ig
aXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXRlcmF0b3I7ICsraXQpIHsKQEAgLTM1NCw4ICszNTQs
OCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgcmV0dXJuIGVuZF9pdGVyYXRvcjsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAg
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eUlmTmVl
ZGVkKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSB2b2lkIERlcXVlPFQ+
OjpleHBhbmRDYXBhY2l0eUlmTmVlZGVkKCkKICAgICB7CiAgICAgICAgIGlmIChtX3N0YXJ0KSB7
CiAgICAgICAgICAgICBpZiAobV9lbmQgKyAxICE9IG1fc3RhcnQpCkBAIC0zNjksOCArMzY5LDgg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eSgpCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIERlcXVlPFQ+OjpleHBhbmRDYXBhY2l0eSgpCiAgICAgewog
ICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IG1f
YnVmZmVyLmNhcGFjaXR5KCk7CkBAIC0zODgsMjQgKzM4OCwyNCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBpbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VGaXJzdCgpIC0+IFQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGlubGluZSBhdXRvIERlcXVlPFQ+Ojp0YWtlRmlyc3QoKSAtPiBUCiAgICAgewogICAgICAg
ICBUIG9sZEZpcnN0ID0gc3RkOjptb3ZlKGZpcnN0KCkpOwogICAgICAgICByZW1vdmVGaXJzdCgp
OwogICAgICAgICByZXR1cm4gb2xkRmlyc3Q7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGlubGluZSBhdXRvIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6dGFrZUxhc3QoKSAtPiBUCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBpbmxpbmUgYXV0byBEZXF1ZTxUPjo6dGFrZUxhc3QoKSAtPiBUCiAgICAgewogICAgICAg
ICBUIG9sZExhc3QgPSBzdGQ6Om1vdmUobGFzdCgpKTsKICAgICAgICAgcmVtb3ZlTGFzdCgpOwog
ICAgICAgICByZXR1cm4gb2xkTGFzdDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgaW5saW5l
IHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoVSYmIHZhbHVlKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQg
RGVxdWU8VD46OmFwcGVuZChVJiYgdmFsdWUpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5
KCk7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKTsKQEAgLTQxNyw4ICs0MTcsOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnByZXBl
bmQoVSYmIHZhbHVlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnByZXBlbmQoVSYmIHZhbHVlKQogICAgIHsK
ICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBleHBhbmRDYXBhY2l0eUlmTmVlZGVk
KCk7CkBAIC00MzAsOCArNDMwLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFs
aWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1v
dmVGaXJzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9pZCBEZXF1
ZTxUPjo6cmVtb3ZlRmlyc3QoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC00NDQsOCArNDQ0LDggQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVMYXN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpyZW1vdmVMYXN0KCkKICAgICB7CiAgICAgICAg
IGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtNDU4
LDIyICs0NTgsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoaXRlcmF0
b3ImIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8
VD46OnJlbW92ZShpdGVyYXRvciYgaXQpCiAgICAgewogICAgICAgICBpdC5jaGVja1ZhbGlkaXR5
KCk7CiAgICAgICAgIHJlbW92ZShpdC5tX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZShjb25zdF9p
dGVyYXRvciYgaXQpCiAgICAgewogICAgICAgICBpdC5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAg
IHJlbW92ZShpdC5tX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZShzaXplX3QgcG9zaXRpb24pCiAgICAg
ewogICAgICAgICBpZiAocG9zaXRpb24gPT0gbV9lbmQpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC00OTYsMjggKzQ5NiwyOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICNpZmRlZiBOREVC
VUcKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGlu
ZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0
eSgpIGNvbnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojpj
aGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYp
IGNvbnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZGRU
b0l0ZXJhdG9yc0xpc3QoKSB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFj
aXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNv
bnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQ+JikgY29u
c3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRv
ckJhc2U8VD46OmFkZFRvSXRlcmF0b3JzTGlzdCgpIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpyZW1vdmVGcm9tSXRlcmF0b3Jz
TGlzdCgpIHsgfQogI2Vsc2UKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmNoZWNrVmFsaWRpdHkoKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV9kZXF1ZSk7CiAgICAgICAgIG1fZGVxdWUtPmNoZWNrSW5kZXhWYWxpZGl0
eShtX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0
eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHko
KTsKICAgICAgICAgQVNTRVJUKG1fZGVxdWUgPT0gb3RoZXIubV9kZXF1ZSk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHZvaWQg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZGRUb0l0ZXJhdG9yc0xpc3Qo
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxU
Pjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkKICAgICB7CiAgICAgICAgIGlmICghbV9kZXF1ZSkKICAg
ICAgICAgICAgIG1fbmV4dCA9IDA7CkBAIC01MzAsOCArNTMwLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIG1fcHJldmlvdXMgPSAwOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6cmVtb3ZlRnJvbUl0
ZXJhdG9yc0xpc3QoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2RlcXVlKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIW1fbmV4dCk7CkBAIC01NTUsMjMgKzU1NSwyMyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB9CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpEZXF1ZUl0ZXJhdG9yQmFzZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxp
bmUgRGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKCkKICAgICAgICAgOiBt
X2RlcXVlKDApCiAgICAgewogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCi0gICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERl
cXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRlcXVlKSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVxdWVJdGVyYXRvckJhc2UoY29u
c3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCisgICAgICAgIDogbV9kZXF1ZShjb25z
dF9jYXN0PERlcXVlPFQ+Kj4oZGVxdWUpKQogICAgICAgICAsIG1faW5kZXgoaW5kZXgpCiAgICAg
ewogICAgICAgICBhZGRUb0l0ZXJhdG9yc0xpc3QoKTsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1
ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRl
cmF0b3JCYXNlKGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikKICAgICAgICAgOiBtX2Rl
cXVlKG90aGVyLm1fZGVxdWUpCiAgICAgICAgICwgbV9pbmRleChvdGhlci5tX2luZGV4KQogICAg
IHsKQEAgLTU3OSw4ICs1NzksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxp
ZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
JiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBE
ZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBp
bmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD4mIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpvcGVyYXRv
cj0oY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQogICAgIHsKICAgICAgICAgb3RoZXIu
Y2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmVGcm9tSXRlcmF0b3JzTGlzdCgpOwpAQCAt
NTkyLDggKzU5Miw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
ICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46On5EZXF1ZUl0
ZXJhdG9yQmFzZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgRGVxdWVJ
dGVyYXRvckJhc2U8VD46On5EZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgewogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgcmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKTsKQEAgLTYwMSwxNSArNjAxLDE1
IEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlmCiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGlubGluZSBib29sIERlcXVlSXRlcmF0
b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6aXNFcXVhbChjb25zdCBEZXF1ZUl0ZXJhdG9yQmFz
ZSYgb3RoZXIpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9v
bCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aXNFcXVhbChjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYg
b3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KG90aGVyKTsKICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgaW5saW5lIHZvaWQgRGVx
dWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjppbmNyZW1lbnQoKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46Omlu
Y3JlbWVudCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VS
VChtX2luZGV4ICE9IG1fZGVxdWUtPm1fZW5kKTsKQEAgLTYyMSw4ICs2MjEsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBpbmxpbmUgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlY3JlbWVudCgpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6ZGVj
cmVtZW50KCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNTRVJU
KG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFydCk7CkBAIC02MzQsMTYgKzYzNCwxNiBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBpbmxpbmUgVCogRGVx
dWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZnRlcigpIGNvbnN0CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VD46OmFm
dGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNT
RVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9lbmQpOwogICAgICAgICByZXR1cm4gJm1fZGVxdWUt
Pm1fYnVmZmVyLmJ1ZmZlcigpW21faW5kZXhdOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpiZWZvcmUoKSBjb25zdAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpiZWZvcmUoKSBj
b25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9p
bmRleCAhPSBtX2RlcXVlLT5tX3N0YXJ0KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAxNjQxNzgp
CisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDcgKzM3
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXIoKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXI8VCwgMD4mIG90aGVyKQorICAgIHZv
aWQgc3dhcChWZWN0b3JCdWZmZXI8VCwgMD4mIG90aGVyLCBzaXplX3QsIHNpemVfdCkKICAgICB7
CiAgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlciwgb3RoZXIubV9idWZmZXIpOwogICAgICAgICBz
dGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CkBAIC00NjQsMjAgKzQ2NCwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkp
OwogICAgIH0KIAotICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXImIG90aGVyKQorICAgIHZvaWQg
c3dhcChWZWN0b3JCdWZmZXImIG90aGVyLCBzaXplX3QgbXlTaXplLCBzaXplX3Qgb3RoZXJTaXpl
KQogICAgIHsKICAgICAgICAgaWYgKGJ1ZmZlcigpID09IGlubGluZUJ1ZmZlcigpICYmIG90aGVy
LmJ1ZmZlcigpID09IG90aGVyLmlubGluZUJ1ZmZlcigpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVyKTsKKyAgICAgICAgICAgIHN3
YXBJbmxpbmVCdWZmZXIob3RoZXIsIG15U2l6ZSwgb3RoZXJTaXplKTsKICAgICAgICAgICAgIHN0
ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5KTsKICAgICAgICAgfSBlbHNlIGlm
IChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIoKSkgewogICAgICAgICAgICAgbV9idWZmZXIgPSBv
dGhlci5tX2J1ZmZlcjsKICAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gb3RoZXIuaW5saW5l
QnVmZmVyKCk7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1f
aW5saW5lQnVmZmVyKTsKKyAgICAgICAgICAgIHN3YXBJbmxpbmVCdWZmZXIob3RoZXIsIG15U2l6
ZSwgMCk7CiAgICAgICAgICAgICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0
eSk7CiAgICAgICAgIH0gZWxzZSBpZiAob3RoZXIuYnVmZmVyKCkgPT0gb3RoZXIuaW5saW5lQnVm
ZmVyKCkpIHsKICAgICAgICAgICAgIG90aGVyLm1fYnVmZmVyID0gbV9idWZmZXI7CiAgICAgICAg
ICAgICBtX2J1ZmZlciA9IGlubGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1f
aW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICBzd2FwSW5s
aW5lQnVmZmVyKG90aGVyLCAwLCBvdGhlclNpemUpOwogICAgICAgICAgICAgc3RkOjpzd2FwKG1f
Y2FwYWNpdHksIG90aGVyLm1fY2FwYWNpdHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgc3RkOjpzd2FwKG1fYnVmZmVyLCBvdGhlci5tX2J1ZmZlcik7CkBAIC01MTAsNiArNTEwLDMy
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdXNpbmcgQmFzZTo6bV9idWZmZXI7CiAgICAg
dXNpbmcgQmFzZTo6bV9jYXBhY2l0eTsKKyAgICAKKyAgICB2b2lkIHN3YXBJbmxpbmVCdWZmZXIo
VmVjdG9yQnVmZmVyJiBvdGhlciwgc2l6ZV90IG15U2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHN3YXAgcGFydCBvZiBWZWN0b3JU
eXBlT3BlcmF0aW9ucworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI4ODYzCisgICAgICAgIAorICAgICAgICBpZiAoc3RkOjppc19wb2Q8VD46OnZh
bHVlKQorICAgICAgICAgICAgc3RkOjpzd2FwKG1faW5saW5lQnVmZmVyLCBvdGhlci5tX2lubGlu
ZUJ1ZmZlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3YXBJbmxpbmVCdWZmZXJzKGlu
bGluZUJ1ZmZlcigpLCBvdGhlci5pbmxpbmVCdWZmZXIoKSwgbXlTaXplLCBvdGhlclNpemUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBzd2FwSW5saW5lQnVmZmVycyhUKiBsZWZ0LCBU
KiByaWdodCwgc2l6ZV90IGxlZnRTaXplLCBzaXplX3QgcmlnaHRTaXplKQorICAgIHsKKyAgICAg
ICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQobGVmdFNpemUgPD0gaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBBU1NFUlQo
cmlnaHRTaXplIDw9IGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBz
d2FwQm91bmQgPSBzdGQ6Om1pbihsZWZ0U2l6ZSwgcmlnaHRTaXplKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN3YXBCb3VuZDsgKytpKQorICAgICAgICAgICAgc3RkOjpzd2Fw
KGxlZnRbaV0sIHJpZ2h0W2ldKTsKKyAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46Om1v
dmUobGVmdCArIHN3YXBCb3VuZCwgbGVmdCArIGxlZnRTaXplLCByaWdodCArIHN3YXBCb3VuZCk7
CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojptb3ZlKHJpZ2h0ICsgc3dhcEJvdW5k
LCByaWdodCArIHJpZ2h0U2l6ZSwgbGVmdCArIHN3YXBCb3VuZCk7CisgICAgfQogCiAgICAgVCog
aW5saW5lQnVmZmVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VCo+KG1faW5saW5l
QnVmZmVyKTsgfQogICAgIGNvbnN0IFQqIGlubGluZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFQqPihtX2lubGluZUJ1ZmZlcik7IH0KQEAgLTY4Niw4
ICs3MTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBvdGhlcikKICAgICB7CisgICAgICAgIEJhc2U6OnN3YXAo
b3RoZXIsIG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKICAgICAgICAgc3RkOjpzd2FwKG1fc2l6ZSwg
b3RoZXIubV9zaXplKTsKLSAgICAgICAgQmFzZTo6c3dhcChvdGhlcik7CiAgICAgfQogCiAgICAg
dm9pZCByZXZlcnNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQxODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
NC0wMi0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFZlY3Rv
ciB3aXRoIGlubGluZSBjYXBhY2l0eSBzaG91bGQgd29yayB3aXRoIG5vbi1QT0RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg4NjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVj
YXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwYWdlL1doZWVsRXZlbnRE
ZWx0YVRyYWNrZXIuaDoKKwogMjAxNC0wMi0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBBbGwgV2ViS2l0IGNsaWVudHMgc2hvdWxkIGVuY3J5
cHQgV2ViQ3J5cHRvIGtleXMgYXV0b21hdGljYWxseQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9XaGVlbEV2ZW50RGVsdGFUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9XaGVlbEV2ZW50RGVsdGFUcmFja2VyLmgJKHJldmlzaW9uIDE2NDE3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudERlbHRhVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBEb21pbmFudFNjcm9sbEdlc3R1cmVEaXJlY3Rp
b24gZG9taW5hbnRTY3JvbGxHZXN0dXJlRGlyZWN0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgRGVxdWU8RmxvYXRTaXplLCByZWNlbnRFdmVudENvdW50PiBtX3JlY2VudFdoZWVsRXZlbnRE
ZWx0YXM7CisgICAgRGVxdWU8RmxvYXRTaXplPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YXM7CiAg
ICAgYm9vbCBtX2lzVHJhY2tpbmdEZWx0YXM7CiAKIH07CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQxODEpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMi0xNSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFZlY3RvciB3aXRoIGlu
bGluZSBjYXBhY2l0eSBzaG91bGQgd29yayB3aXRoIG5vbi1QT0RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg4NjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdGVzdCBleHBlcmll
bmNlcyByZWFsbHkgYml6YXJyZSBiZWhhdmlvciBvbiB0cnVuayB3aXRob3V0IHRoZSByZXN0IG9m
CisgICAgICAgIHRoaXMgZml4LiBPbiBteSBtYWNoaW5lLCBpdCB1c3VhbGx5IHRpbWVzIG91dCBi
ZWNhdXNlIGl0IGdldHMgaXRzZWxmIGludG8gYW4KKyAgICAgICAgaW5maW5pdGUgbG9vcCBvZiBz
b21lIGtpbmQuIFdpdGggdGhlIGZpeCwgaXQgcGFzc2VzLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorCiAyMDE0LTAyLTE1ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXVtXSzFdIERvIG5vdCBpbmNsdWRlIGNhaXJvIGhlYWRlciBpbiB0aGUgcHVi
bGljIGhlYWRlcnMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNw
cAkocmV2aXNpb24gMTY0MTc4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDQgKzIxNiw5NCBAQCBURVNUKFdURl9WZWN0
b3IsIE1vdmVPbmx5X0luc2VydCkKICAgICB9CiB9CiAKK1RFU1QoV1RGX1ZlY3RvciwgVmVjdG9y
T2ZWZWN0b3JzT2ZWZWN0b3JzSW5saW5lQ2FwYWNpdHlTd2FwKQoreworICAgIFZlY3RvcjxWZWN0
b3I8VmVjdG9yPGludCwgMT4sIDE+LCAxPiBhOworICAgIFZlY3RvcjxWZWN0b3I8VmVjdG9yPGlu
dCwgMT4sIDE+LCAxPiBiOworICAgIFZlY3RvcjxWZWN0b3I8VmVjdG9yPGludCwgMT4sIDE+LCAx
PiBjOworICAgIAorICAgIEVYUEVDVF9FUShhLnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUShi
LnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUShjLnNpemUoKSwgMFUpOworICAgIAorICAgIFZl
Y3RvcjxpbnQsIDE+IHg7CisgICAgeC5hcHBlbmQoNDIpOworICAgIAorICAgIEVYUEVDVF9FUSh4
LnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgCisgICAgVmVjdG9y
PFZlY3RvcjxpbnQsIDE+LCAxPiB5OworICAgIHkuYXBwZW5kKHgpOworICAgIAorICAgIEVYUEVD
VF9FUSh4LnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgRVhQRUNU
X0VRKHkuc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF0uc2l6ZSgpLCAxVSk7CisgICAg
RVhQRUNUX0VRKHlbMF1bMF0sIDQyKTsKKyAgICAKKyAgICBhLmFwcGVuZCh5KTsKKworICAgIEVY
UEVDVF9FUSh4LnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgRVhQ
RUNUX0VRKHkuc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF0uc2l6ZSgpLCAxVSk7Cisg
ICAgRVhQRUNUX0VRKHlbMF1bMF0sIDQyKTsKKyAgICBFWFBFQ1RfRVEoYS5zaXplKCksIDFVKTsK
KyAgICBFWFBFQ1RfRVEoYVswXS5zaXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoYVswXVswXS5z
aXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoYVswXVswXVswXSwgNDIpOworICAgIAorICAgIGEu
c3dhcChiKTsKKworICAgIEVYUEVDVF9FUShhLnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUSh4
LnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgRVhQRUNUX0VRKHku
c2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF0uc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNU
X0VRKHlbMF1bMF0sIDQyKTsKKyAgICBFWFBFQ1RfRVEoYi5zaXplKCksIDFVKTsKKyAgICBFWFBF
Q1RfRVEoYlswXS5zaXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoYlswXVswXS5zaXplKCksIDFV
KTsKKyAgICBFWFBFQ1RfRVEoYlswXVswXVswXSwgNDIpOworICAgIAorICAgIGIuc3dhcChjKTsK
KworICAgIEVYUEVDVF9FUShhLnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUShiLnNpemUoKSwg
MFUpOworICAgIEVYUEVDVF9FUSh4LnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUSh4WzBdLCA0
Mik7CisgICAgRVhQRUNUX0VRKHkuc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF0uc2l6
ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF1bMF0sIDQyKTsKKyAgICBFWFBFQ1RfRVEoYy5z
aXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoY1swXS5zaXplKCksIDFVKTsKKyAgICBFWFBFQ1Rf
RVEoY1swXVswXS5zaXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoY1swXVswXVswXSwgNDIpOwor
ICAgIAorICAgIHlbMF1bMF0gPSAyNDsKKworICAgIEVYUEVDVF9FUSh4LnNpemUoKSwgMVUpOwor
ICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgRVhQRUNUX0VRKHkuc2l6ZSgpLCAxVSk7Cisg
ICAgRVhQRUNUX0VRKHlbMF0uc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF1bMF0sIDI0
KTsKKyAgICAKKyAgICBhLmFwcGVuZCh5KTsKKworICAgIEVYUEVDVF9FUSh4LnNpemUoKSwgMVUp
OworICAgIEVYUEVDVF9FUSh4WzBdLCA0Mik7CisgICAgRVhQRUNUX0VRKHkuc2l6ZSgpLCAxVSk7
CisgICAgRVhQRUNUX0VRKHlbMF0uc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VRKHlbMF1bMF0s
IDI0KTsKKyAgICBFWFBFQ1RfRVEoYS5zaXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoYVswXS5z
aXplKCksIDFVKTsKKyAgICBFWFBFQ1RfRVEoYVswXVswXS5zaXplKCksIDFVKTsKKyAgICBFWFBF
Q1RfRVEoYVswXVswXVswXSwgMjQpOworICAgIEVYUEVDVF9FUShjLnNpemUoKSwgMVUpOworICAg
IEVYUEVDVF9FUShjWzBdLnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9FUShjWzBdWzBdLnNpemUo
KSwgMVUpOworICAgIEVYUEVDVF9FUShjWzBdWzBdWzBdLCA0Mik7CisgICAgRVhQRUNUX0VRKGIu
c2l6ZSgpLCAwVSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="248390"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>