<?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>40089</bug_id>
          
          <creation_ts>2010-06-02 16:56:20 -0700</creation_ts>
          <short_desc>Add a takeFirst() method to Deque and use it where appropriate</short_desc>
          <delta_ts>2010-06-04 09:44:34 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Tony Gentilcore">tonyg</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233503</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-02 16:56:20 -0700</bug_when>
    <thetext>Add a takeFirst() method to Deque and use it where appropriate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233506</commentid>
    <comment_count>1</comment_count>
      <attachid>57716</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-02 17:01:24 -0700</bug_when>
    <thetext>Created attachment 57716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233508</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-02 17:03:00 -0700</bug_when>
    <thetext>abarth, you suggested adding a takeFirst() method in https://bugs.webkit.org/show_bug.cgi?id=20710.

Is this what you had in mind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233531</commentid>
    <comment_count>3</comment_count>
      <attachid>57716</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-02 17:46:10 -0700</bug_when>
    <thetext>Comment on attachment 57716
Patch

&gt; +    template&lt;typename T&gt;
&gt; +    inline T&amp; Deque&lt;T&gt;::takeFirst()
&gt; +    {
&gt; +        T&amp; temp = first();
&gt; +        removeFirst();
&gt; +        return temp;
&gt; +    }

This won&apos;t work. This returns a reference to the place in memory where the first item was stored, but once removeFirst is called that location in memory no longer contains an object. The return type of takeFirst needs to be T, not T&amp;, and the local variable, which should not be named &quot;temp&quot; since we don&apos;t use abbreviations like that in WebKit, should also be of type T. I would write it like this:

    template&lt;typename T&gt;
    inline T Deque&lt;T&gt;::takeFirst()
    {
        T oldFirst = first();
        removeFirst();
        return oldFirst;
    }

The only reason this seemed to be working is that we got lucky. The storage the object had been in was hanging around just long enough to not immediately crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233556</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-02 18:52:54 -0700</bug_when>
    <thetext>You can also use an out-param (WebKit style would be by reference) if you want to avoid doing two copies.  It might be worth looking at the ASM that gets generated to see if it&apos;s a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233832</commentid>
    <comment_count>5</comment_count>
      <attachid>57789</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-03 11:02:30 -0700</bug_when>
    <thetext>Created attachment 57789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233833</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-03 11:03:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 57716 [details])
&gt; &gt; +    template&lt;typename T&gt;
&gt; &gt; +    inline T&amp; Deque&lt;T&gt;::takeFirst()
&gt; &gt; +    {
&gt; &gt; +        T&amp; temp = first();
&gt; &gt; +        removeFirst();
&gt; &gt; +        return temp;
&gt; &gt; +    }
&gt; 
&gt; This won&apos;t work.

Completely brain-dead mistake. I apologize it got uploaded. Fixed.

&gt; This returns a reference to the place in memory where the first item was stored, but once removeFirst is called that location in memory no longer contains an object. The return type of takeFirst needs to be T, not T&amp;, and the local variable, which should not be named &quot;temp&quot;

Point about &quot;temp&quot; fixed and noted for future reference. Thank you.

&gt; since we don&apos;t use abbreviations like that in WebKit, should also be of type T. I would write it like this:
&gt; 
&gt;     template&lt;typename T&gt;
&gt;     inline T Deque&lt;T&gt;::takeFirst()
&gt;     {
&gt;         T oldFirst = first();
&gt;         removeFirst();
&gt;         return oldFirst;
&gt;     }
&gt; 
&gt; The only reason this seemed to be working is that we got lucky. The storage the object had been in was hanging around just long enough to not immediately crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233835</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-03 11:09:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; You can also use an out-param (WebKit style would be by reference) if you want to avoid doing two copies.  It might be worth looking at the ASM that gets generated to see if it&apos;s a win.

Since this is an inline template method the ASM varies by call point. However, I went through a couple of them and it looks like the compiler is able to be smart about avoiding copies. For instance, in the case of the call in SegmentedString::advanceSubstring(), the extra copies are avoided (just the single copy at the call site remains). Listing below. Also most of the users are storing things that are cheap to copy in the Deque anyway.

If you like, I could modify this to use an out-param instead, but it might largely defeat the point as some of the call sites become considerably uglier. Please let me know what you think.

--- d:\chromiumgit\src\third_party\webkit\javascriptcore\wtf\deque.h -----------

    template&lt;typename T&gt;
    inline T Deque&lt;T&gt;::takeFirst()
    {
601162F0  push        esi  
601162F1  mov         esi,ecx 
        T oldFirst = first();
601162F3  mov         eax,dword ptr [esi] 
601162F5  mov         ecx,dword ptr [esi+8] 
601162F8  shl         eax,4 
601162FB  add         eax,ecx 
601162FD  mov         ecx,dword ptr [eax] 
601162FF  push        edi  
60116300  mov         edi,dword ptr [esp+0Ch] 
60116304  mov         dword ptr [edi],ecx 
60116306  mov         edx,dword ptr [eax+4] 
60116309  mov         dword ptr [edi+4],edx 
6011630C  mov         ecx,dword ptr [eax+8] 
6011630F  mov         dword ptr [edi+8],ecx 
60116312  test        ecx,ecx 
60116314  je          WTF::Deque&lt;WebCore::SegmentedSubstring&gt;::takeFirst+29h (60116319h) 
60116316  sub         dword ptr [ecx],0FFFFFF80h 
60116319  mov         al,byte ptr [eax+0Ch] 
6011631C  mov         byte ptr [edi+0Ch],al 
        removeFirst();
6011631F  mov         eax,dword ptr [esi] 
60116321  mov         ecx,dword ptr [esi+8] 
60116324  shl         eax,4 
60116327  lea         edx,[eax+ecx+10h] 
6011632B  add         eax,ecx 
6011632D  push        edx  
6011632E  push        eax  
6011632F  call        WTF::VectorDestructor&lt;1,WebCore::SegmentedSubstring&gt;::destruct (5FEB3610h) 
60116334  mov         ecx,dword ptr [esi+0Ch] 
60116337  mov         eax,dword ptr [esi] 
60116339  dec         ecx  
6011633A  add         esp,8 
6011633D  cmp         eax,ecx 
6011633F  jne         WTF::Deque&lt;WebCore::SegmentedSubstring&gt;::takeFirst+5Eh (6011634Eh) 
            TypeOperations::move(oldBuffer + m_start, oldBuffer + m_end, m_buffer.buffer() + m_start);
        else {
            TypeOperations::move(oldBuffer, oldBuffer + m_end, m_buffer.buffer());
            size_t newStart = newCapacity - (oldCapacity - m_start);
            TypeOperations::move(oldBuffer + m_start, oldBuffer + oldCapacity, m_buffer.buffer() + newStart);
            m_start = newStart;
        }
        m_buffer.deallocateBuffer(oldBuffer);
        checkValidity();
    }

    template&lt;typename T&gt;
    inline T Deque&lt;T&gt;::takeFirst()
    {
        T oldFirst = first();
        removeFirst();
        return oldFirst;
60116341  mov         eax,edi 
60116343  pop         edi  
60116344  mov         dword ptr [esi],0 
6011634A  pop         esi  
        else {
            TypeOperations::move(oldBuffer, oldBuffer + m_end, m_buffer.buffer());
            size_t newStart = newCapacity - (oldCapacity - m_start);
            TypeOperations::move(oldBuffer + m_start, oldBuffer + oldCapacity, m_buffer.buffer() + newStart);
            m_start = newStart;
        }
        m_buffer.deallocateBuffer(oldBuffer);
        checkValidity();
    }

    template&lt;typename T&gt;
    inline T Deque&lt;T&gt;::takeFirst()
    {
        T oldFirst = first();
        removeFirst();
        return oldFirst;
    }
6011634B  ret         4    
        removeFirst();
6011634E  inc         eax  
6011634F  mov         dword ptr [esi],eax 
        return oldFirst;
60116351  mov         eax,edi 
60116353  pop         edi  
60116354  pop         esi  
    }
60116355  ret         4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233908</commentid>
    <comment_count>8</comment_count>
      <attachid>57789</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-03 13:49:27 -0700</bug_when>
    <thetext>Comment on attachment 57789
Patch

LGTM.  Thanks for looking into the details.

WebCore/html/HTMLTokenizer.cpp:217
 +          CachedScript* cs = m_pendingScripts.takeFirst().get();
I know this does the same thing as before, but it looks sketch.  Who else is hold a reference to this object for us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233944</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-06-03 15:12:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 57789 [details])
&gt; LGTM.  Thanks for looking into the details.
&gt; 
&gt; WebCore/html/HTMLTokenizer.cpp:217
&gt;  +          CachedScript* cs = m_pendingScripts.takeFirst().get();
&gt; I know this does the same thing as before, but it looks sketch.  Who else is hold a reference to this object for us?

m_pendingScripts is a Deque&lt;CachedResourceHandle&gt; and CachedResourceHandle acts as a refcounting smart pointer for CachedResources. So, as written, if the CachedResource didn&apos;t have any other CachedResourceHandles at the same time, then that could cause the CachedResource to be freed. It has always been this way since CachedResourceHandle was introduced in r36109. This has probably never turned up because something else is holding another CachedResourceHandle. However, it is obviously a bad idea to rely on that fact. Thus, I believe the right fix is:
CachedResourceHandle&lt;CachedScript&gt; cs = m_pendingScripts.takeFirst();

Would you like me to make that change in this patch or would it be better in a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234018</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-03 18:13:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Would you like me to make that change in this patch or would it be better in a separate patch?

Separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234252</commentid>
    <comment_count>11</comment_count>
      <attachid>57789</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-04 09:44:26 -0700</bug_when>
    <thetext>Comment on attachment 57789
Patch

Clearing flags on attachment: 57789

Committed r60683: &lt;http://trac.webkit.org/changeset/60683&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234253</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-04 09:44:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57716</attachid>
            <date>2010-06-02 17:01:24 -0700</date>
            <delta_ts>2010-06-03 11:02:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40089-20100602170123.patch</filename>
            <type>text/plain</type>
            <size>13025</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA1MjM4MWJlYzcwZmE1N2IzMTBjN2FiNDU3YWRiMmQwODg0MWZkYjczLi44
NGMyYmQ1MzkzMzA1MDFhOTgyNWM2NmY2YjBkMGZiNzBkMzVmMWFjIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTAtMDYtMDIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYSB0YWtlRmlyc3QoKSBtZXRob2QgdG8gRGVxdWUgYW5kIHVzZSBpdCB3aGVyZSBhcHByb3By
aWF0ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQw
MDg5CisKKyAgICAgICAgKiB3dGYvRGVxdWUuaDoKKyAgICAgICAgKFdURjo6Ojp0YWtlRmlyc3Qp
OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hG
dW5jdGlvbnNGcm9tTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOgor
ICAgICAgICAoV1RGOjo6OnRyeUdldE1lc3NhZ2UpOgorCiAyMDEwLTA2LTAyICBHYWJvciBMb2tp
ICA8bG9raUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xv
dWdoLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0RlcXVlLmggYi9KYXZhU2NyaXB0
Q29yZS93dGYvRGVxdWUuaAppbmRleCAzYzNkMzc4ZmM1ODk2ZmVkZjI4ZDFjZjRiMmJkNjQzYTIz
OGNkMThmLi5kZmU4OTQwZjEyZGI5MTNmZDMxZWI5YjA1YjZlY2Q2MDAwODVjNmUyIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYv
RGVxdWUuaApAQCAtNzIsNiArNzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBUJiBm
aXJzdCgpIHsgQVNTRVJUKG1fc3RhcnQgIT0gbV9lbmQpOyByZXR1cm4gbV9idWZmZXIuYnVmZmVy
KClbbV9zdGFydF07IH0KICAgICAgICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdCB7IEFTU0VSVCht
X3N0YXJ0ICE9IG1fZW5kKTsgcmV0dXJuIG1fYnVmZmVyLmJ1ZmZlcigpW21fc3RhcnRdOyB9Cisg
ICAgICAgIFQmIHRha2VGaXJzdCgpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZv
aWQgYXBwZW5kKGNvbnN0IFUmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBw
cmVwZW5kKGNvbnN0IFUmKTsKQEAgLTQyNyw2ICs0MjgsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGlubGluZSBUJiBEZXF1ZTxUPjo6dGFrZUZpcnN0KCkKKyAgICB7CisgICAgICAgIFQm
IHRlbXAgPSBmaXJzdCgpOworICAgICAgICByZW1vdmVGaXJzdCgpOworICAgICAgICByZXR1cm4g
dGVtcDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgogICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjphcHBlbmQoY29uc3QgVSYgdmFsdWUpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwIGIvSmF2
YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwCmluZGV4IDYxNzg0MjBjM2FjOGE4ZTZmZThh
ZWUwMTM4MTZmNzJiNTA0YmM5Y2EuLmE1ZjIzNDZiYThlNWZiODRjMmQyOWU1MjAyNDgyNzU0OWRj
NmFhZTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAKQEAgLTE0OSw4ICsxNDksNyBAQCB2
b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKQogICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgoKSk7CiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0aW9uUXVldWUoKS5zaXplKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpbnZvY2F0aW9uID0gZnVuY3Rpb25RdWV1ZSgpLmZpcnN0KCk7Ci0gICAgICAg
ICAgICBmdW5jdGlvblF1ZXVlKCkucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgIGludm9jYXRp
b24gPSBmdW5jdGlvblF1ZXVlKCkudGFrZUZpcnN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
bnZvY2F0aW9uLmZ1bmN0aW9uKGludm9jYXRpb24uY29udGV4dCk7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2Fn
ZVF1ZXVlLmgKaW5kZXggNDhiZDEwYWQwZGNhOWIxOGQ4MTkzMDcwMjc5MjNjZTA2ZGY2ODgwZi4u
MTNjZTFlOGIxN2M5ZTc4M2RmMThiMDQ2N2VmNDYwYjI0ZDI5N2E5OCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXNzYWdlUXVldWUuaApAQCAtMTYzLDkgKzE2Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpZiAobV9xdWV1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICBEYXRhVHlwZSogbWVzc2FnZSA9IG1fcXVldWUuZmlyc3QoKTsKLSAgICAgICAgbV9xdWV1ZS5y
ZW1vdmVGaXJzdCgpOwotICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAgcmV0dXJuIG1f
cXVldWUudGFrZUZpcnN0KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5
cGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDMxNTFjNWMyODJlM2I0MGNlMjI0NGViZjRmZjU0MWJmMzM4ZGEzNjguLmE3OGFkMjhmYjg5
MTUwNmJlN2U0MzMwNzZmYjEyMzFjYTkzNmZhZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMDIg
IFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVdGlsaXplIG5ldyB0YWtlRmlyc3QoKSBt
ZXRob2Qgd2hlcmUgYXBwcm9wcmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDA4OQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5v
IG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMp
OgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdDYWxsYmFja3M6OmNhbGxBbmRSZW1vdmVGaXJzdENhbGxiYWNrKToKKyAgICAg
ICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2Vu
aXplcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZXhlY3V0ZUV4
dGVybmFsU2NyaXB0c0lmUmVhZHkpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVudGVk
U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVN1
YnN0cmluZyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Z2V0
TmV4dFN0YXRlbWVudCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnBy
b2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKToKKwogMjAxMC0wNi0wMiAgRXJpayBBcnZpZHNzb24g
IDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IG9qYW5AY2hyb21pdW0u
b3JnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCBmYjI1Mzc0N2E2YWZhMTQ0YjY2NmEzNTExMTM4
MTZiYTIzNDlmMDdlLi4xOTJjNDNmNGU1YjAyMTViYTNkZGYzYTYwMzFhMjRiMjI3ZDg0MDNjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjQ1LDggKzI0NSw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVl
dDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCiAgICAg
c3R5bGVTaGVldFF1ZXVlLmFwcGVuZCh0aGlzKTsKIAogICAgIHdoaWxlICghc3R5bGVTaGVldFF1
ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5
bGVTaGVldFF1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIHN0eWxlU2hlZXRRdWV1ZS5yZW1vdmVGaXJz
dCgpOworICAgICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVl
LnRha2VGaXJzdCgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNo
ZWV0LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHlsZUJhc2UqIHN0eWxlQmFzZSA9
IHN0eWxlU2hlZXQtPml0ZW0oaSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6
ZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCmluZGV4
IDA2Y2Y0YTU1N2QyNTAwYzRkYzRjMDE5ZTc4Yjc3ODg5OWJhMWQwYzMuLjY5MzY5MGY5YTIyNjhm
YTczYTFjZWZiYjBmZjU4NTNmNWVkYmQ2NzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTFRv
a2VuaXplckxpYnhtbDIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIu
Y3BwCkBAIC0xODIsOCArMTgyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjYWxsQW5kUmVtb3Zl
Rmlyc3RDYWxsYmFjayhYTUxUb2tlbml6ZXIqIHRva2VuaXplcikKICAgICB7Ci0gICAgICAgIE93
blB0cjxQZW5kaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKG1fY2FsbGJhY2tzLmZpcnN0KCkpOwotICAg
ICAgICBtX2NhbGxiYWNrcy5yZW1vdmVGaXJzdCgpOworICAgICAgICBPd25QdHI8UGVuZGluZ0Nh
bGxiYWNrPiBjYWxsYmFjayhtX2NhbGxiYWNrcy50YWtlRmlyc3QoKSk7CiAgICAgICAgIGNhbGxi
YWNrLT5jYWxsKHRva2VuaXplcik7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCmlu
ZGV4IGQ0ZjFkNWNiMDkxNWJlOTE4YzlkOWVmM2Y5YWI2NDY2NWExOTc3ZjkuLjYyOWU3ZjQxODc0
NDhkYjdmMDUxNmFkZDI2Mzk5NWRjNWU5ZTI2MzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MVG9rZW5pemVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAKQEAg
LTIxNCw4ICsyMTQsNyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnJlc2V0KCkKICAgICBBU1NFUlQo
bV9leGVjdXRpbmdTY3JpcHQgPT0gMCk7CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ1NjcmlwdHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIENhY2hlZFNjcmlwdCogY3MgPSBtX3BlbmRpbmdTY3JpcHRz
LmZpcnN0KCkuZ2V0KCk7Ci0gICAgICAgIG1fcGVuZGluZ1NjcmlwdHMucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgQ2FjaGVkU2NyaXB0KiBjcyA9IG1fcGVuZGluZ1NjcmlwdHMudGFrZUZpcnN0KCku
Z2V0KCk7CiAgICAgICAgIEFTU0VSVChjYWNoZSgpLT5kaXNhYmxlZCgpIHx8IGNzLT5hY2Nlc3ND
b3VudCgpID4gMCk7CiAgICAgICAgIGNzLT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgfQpAQCAt
MjAxMSw4ICsyMDEwLDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpleGVjdXRlRXh0ZXJuYWxTY3Jp
cHRzSWZSZWFkeSgpCiAgICAgICAgIGlmICghY29udGludWVFeGVjdXRpbmdFeHRlcm5hbFNjcmlw
dHMoc3RhcnRUaW1lKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIENhY2hlZFNjcmlw
dCogY3MgPSBtX3BlbmRpbmdTY3JpcHRzLmZpcnN0KCkuZ2V0KCk7Ci0gICAgICAgIG1fcGVuZGlu
Z1NjcmlwdHMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgQ2FjaGVkU2NyaXB0KiBjcyA9IG1fcGVu
ZGluZ1NjcmlwdHMudGFrZUZpcnN0KCkuZ2V0KCk7CiAgICAgICAgIEFTU0VSVChjYWNoZSgpLT5k
aXNhYmxlZCgpIHx8IGNzLT5hY2Nlc3NDb3VudCgpID4gMCk7CiAKICAgICAgICAgc2V0U3JjKFNl
Z21lbnRlZFN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdt
ZW50ZWRTdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5j
cHAKaW5kZXggZDc1MDMyZjhiYTFlNDQ0NDg3ODY1MDg4NmU2OGY5MTc3NThiZWZmMS4uMmNmOWEw
MTYxZTk0MzZlMTRiYmVhYzE2MDAwMDk3ZmI5NDMyODkwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAgLTE1Miw4ICsxNTIsNyBAQCB2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6cHJlcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnMpCiB2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6YWR2YW5jZVN1YnN0cmluZygpCiB7CiAgICAgaWYgKG1fY29tcG9zaXRlKSB7Ci0g
ICAgICAgIG1fY3VycmVudFN0cmluZyA9IG1fc3Vic3RyaW5ncy5maXJzdCgpOwotICAgICAgICBt
X3N1YnN0cmluZ3MucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgbV9jdXJyZW50U3RyaW5nID0gbV9z
dWJzdHJpbmdzLnRha2VGaXJzdCgpOwogICAgICAgICBpZiAobV9zdWJzdHJpbmdzLmlzRW1wdHko
KSkKICAgICAgICAgICAgIG1fY29tcG9zaXRlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2UuY3BwCmluZGV4IGQ2Yzk1Yjc5NGZjNDY4OTgwMTg2YThhZjU4N2I0MmEzOGFlOTE0Yzku
LmM5NmRmYmEzZDc4NWE0ZDdiMmZjMWE3ZmJjYTMyM2I3OTM3NWZjZjYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmNwcApAQCAtNjgwLDggKzY4MCw3IEBAIHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rp
b24oKQogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb247CiAKICAgICBpZiAo
bV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkICYmICFtX3RyYW5zYWN0aW9uUXVldWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvblF1ZXVlLmZpcnN0KCk7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsKICAgICB9CiAKICAgICBp
ZiAodHJhbnNhY3Rpb24gJiYgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAppbmRleCBkYzRkMjcyYTM5MjE5MmRl
OTU4MmJkMjRkMjBkN2NkYzRhNjZhZjgzLi5iMDZkODY1NTEzZTI1NzdiOGVmOTZhODcxYzM0Yjc4
YjUxMDhmYjc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKQEAgLTM1NCw4ICszNTQs
NyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpnZXROZXh0U3RhdGVtZW50KCkKIAogICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKICAgICBpZiAoIW1fc3RhdGVtZW50UXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50
UXVldWUuZmlyc3QoKTsKLSAgICAgICAgbV9zdGF0ZW1lbnRRdWV1ZS5yZW1vdmVGaXJzdCgpOwor
ICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQgPSBtX3N0YXRlbWVudFF1ZXVlLnRha2VGaXJzdCgp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCmluZGV4IGRiZDI3MzljNzc5N2NkYzAzNzAyODE3ZjY5ODkzNTJlNDE5MGEzOTguLjEw
NGVhMTA0NmM4NGNlMzg0ZGQ5MmI4YjQzZDhmZjUxYmVkNGZkZmMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTU3LDggKzU3LDcgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhD
b29yZGluYXRpb25JbmZvJiBpbmYKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGZpcnN0UGVu
ZGluZ1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7CiAgICAg
aWYgKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZG8g
ewotICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFu
c2FjdGlvbnMuZmlyc3QoKTsKLSAgICAgICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5y
ZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24gPSBpbmZv
LnBlbmRpbmdUcmFuc2FjdGlvbnMudGFrZUZpcnN0KCk7CiAgICAgICAgICAgICBpbmZvLmFjdGl2
ZVJlYWRUcmFuc2FjdGlvbnMuYWRkKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKTsKICAgICAgICAg
ICAgIGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKICAgICAgICAgfSB3
aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkgJiYgaW5mby5wZW5kaW5n
VHJhbnNhY3Rpb25zLmZpcnN0KCktPmlzUmVhZE9ubHkoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEwNTk5ODhjY2M1MDhhM2YwZTZh
MzkyNGI5NDRkNzEzN2FmYTA5YjguLjc4Y2Q0YTc1ZTBhYWFkNWY5NjQzYjVkNDVlZWFiNmFiZGEx
NzFjMDAgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMDIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnln
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVdGlsaXplIG5ldyB0YWtlRmlyc3QoKSBtZXRob2Qgd2hlcmUgYXBwcm9wcmlhdGUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA4OQor
CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwOgorICAgICAg
ICAoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KToKKwogMjAxMC0w
Ni0wMSAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBm
aXguIE5vdCByZXZpZXdlZApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RGVjb2Rlci5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNv
ZGVyLmNwcAppbmRleCBmMTk5Njc0ZTBmNjgyOTNlN2JhMjk1Y2M4MzRhZWFhNWVjMWM4NDY4Li41
NmQ2ZWU5MjRiNzFiNzNmYjQzMTYwOGM1ZmMxMDEyMWIyMzEzNjI5IDEwMDY0NAotLS0gYS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAorKysgYi9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApAQCAtMTg1LDggKzE4NSw3IEBAIGJv
b2wgQXJndW1lbnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KEF0dGFjaG1lbnQmIGF0dGFjaG1l
bnQpCiAgICAgaWYgKG1fYXR0YWNobWVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdHRhY2htZW50ID0gbV9hdHRhY2htZW50cy5maXJzdCgpOwotICAgIG1fYXR0
YWNobWVudHMucmVtb3ZlRmlyc3QoKTsKKyAgICBhdHRhY2htZW50ID0gbV9hdHRhY2htZW50cy50
YWtlRmlyc3QoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDYyYzM5ZGM2ZjRhNjk1
MzI0ZDgxMmE1NzY0N2YzMTVkZjA5MzZhYzQuLjAwM2RkN2MzYTQwMTJlMTA3ZTgyMTM0NzY1ZTY0
NTc3Y2YwZjA0ZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJL
aXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNi0wMiAgVG9ueSBHZW50
aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFV0aWxpemUgbmV3IHRha2VGaXJzdCgpIG1ldGhvZCB3aGVy
ZSBhcHByb3ByaWF0ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQwMDg5CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNl
bmRlci5jcHA6CisgICAgICAgIChFdmVudFNlbmRlcjo6cmVwbGF5U2F2ZWRFdmVudHMpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3JrKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OnJlc2V0KToKKwogMjAx
MC0wNi0wMiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCmluZGV4IDM4MTExMmViYTljNTM2YzNlOWFk
MjA2MjIxMTIwNTBiMTQ3YmRhNjIuLjc2OTUwOTVkMDdiNDgwZjU4YTFjOWZhNjcwMTQxOTkyYjBi
NjAzZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2
ZW50U2VuZGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9F
dmVudFNlbmRlci5jcHAKQEAgLTcxNiw4ICs3MTYsNyBAQCB2b2lkIEV2ZW50U2VuZGVyOjpyZXBs
YXlTYXZlZEV2ZW50cygpCiB7CiAgICAgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSB0cnVlOwogICAg
IHdoaWxlICghbW91c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBTYXZlZEV2ZW50
IGUgPSBtb3VzZUV2ZW50UXVldWUuZmlyc3QoKTsKLSAgICAgICAgbW91c2VFdmVudFF1ZXVlLnJl
bW92ZUZpcnN0KCk7CisgICAgICAgIFNhdmVkRXZlbnQgZSA9IG1vdXNlRXZlbnRRdWV1ZS50YWtl
Rmlyc3QoKTsKIAogICAgICAgICBzd2l0Y2ggKGUudHlwZSkgewogICAgICAgICBjYXNlIFNhdmVk
RXZlbnQ6Ok1vdXNlTW92ZTogewpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGI0ZTM3NjQ1
NWMxNTEyNmEyNTYwYWJjOGExOTdjN2U2OGZkZjRlMjYuLjg5ZTE2ZTBiN2I0ZmQ5MzgzYTMxMjAx
ZWU3YzQxZjI0OGM1ZDA1ZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTIwMSw4ICsy
MDEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3Jr
KCkKICAgICAvLyBRdWl0IGRvaW5nIHdvcmsgb25jZSBhIGxvYWQgaXMgaW4gcHJvZ3Jlc3MuCiAg
ICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBib29sIHN0YXJ0ZWRMb2Fk
ID0gbV9xdWV1ZS5maXJzdCgpLT5ydW4oc2hlbGwpOwotICAgICAgICBkZWxldGUgbV9xdWV1ZS5m
aXJzdCgpOwotICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZSBt
X3F1ZXVlLnRha2VGaXJzdCgpOwogICAgICAgICBpZiAoc3RhcnRlZExvYWQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjE1LDggKzIxNCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQogewogICAgIG1fZnJvemVuID0gZmFsc2U7CiAgICAg
d2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBkZWxldGUgbV9xdWV1ZS5maXJz
dCgpOwotICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZSBtX3F1
ZXVlLnRha2VGaXJzdCgpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57789</attachid>
            <date>2010-06-03 11:02:30 -0700</date>
            <delta_ts>2010-06-04 09:44:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40089-20100603110228.patch</filename>
            <type>text/plain</type>
            <size>13019</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwOGQ1NTM1ZmVhYmFkODA3OGY0NzcyZTEyOTBkODgyMDQ3YWZkMjUzLi43
ZjIzNmNiNjdhMzIyMDFmNjI1MjU2YzVkZTFhN2U4MTIzMjZmNmNmIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTAtMDYtMDIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYSB0YWtlRmlyc3QoKSBtZXRob2QgdG8gRGVxdWUgYW5kIHVzZSBpdCB3aGVyZSBhcHByb3By
aWF0ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQw
MDg5CisKKyAgICAgICAgKiB3dGYvRGVxdWUuaDoKKyAgICAgICAgKFdURjo6Ojp0YWtlRmlyc3Qp
OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hG
dW5jdGlvbnNGcm9tTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOgor
ICAgICAgICAoV1RGOjo6OnRyeUdldE1lc3NhZ2UpOgorCiAyMDEwLTA2LTAyICBNYXJrIFJvd2Ug
IDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91
Z2guCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaCBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZXF1ZS5oCmluZGV4IDNjM2QzNzhmYzU4OTZmZWRmMjhkMWNmNGIyYmQ2NDNhMjM4
Y2QxOGYuLjc0NWUwYjZiN2ZjYjJmMGVjNzBlMjgxMTYzYzQ3NWU1NWQwZThhY2IgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9E
ZXF1ZS5oCkBAIC03Miw2ICs3Miw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIFQmIGZp
cnN0KCkgeyBBU1NFUlQobV9zdGFydCAhPSBtX2VuZCk7IHJldHVybiBtX2J1ZmZlci5idWZmZXIo
KVttX3N0YXJ0XTsgfQogICAgICAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgQVNTRVJUKG1f
c3RhcnQgIT0gbV9lbmQpOyByZXR1cm4gbV9idWZmZXIuYnVmZmVyKClbbV9zdGFydF07IH0KKyAg
ICAgICAgVCB0YWtlRmlyc3QoKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lk
IGFwcGVuZChjb25zdCBVJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgcHJl
cGVuZChjb25zdCBVJik7CkBAIC00MjcsNiArNDI4LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBpbmxpbmUgVCBEZXF1ZTxUPjo6dGFrZUZpcnN0KCkKKyAgICB7CisgICAgICAgIFQgb2xk
Rmlyc3QgPSBmaXJzdCgpOworICAgICAgICByZW1vdmVGaXJzdCgpOworICAgICAgICByZXR1cm4g
b2xkRmlyc3Q7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KICAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6YXBwZW5kKGNvbnN0IFUmIHZhbHVl
KQogICAgIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCA2MTc4NDIwYzNhYzhhOGU2
ZmU4YWVlMDEzODE2ZjcyYjUwNGJjOWNhLi5hNWYyMzQ2YmE4ZTVmYjg0YzJkMjllNTIwMjQ4Mjc1
NDlkYzZhYWU0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwCkBAIC0xNDksOCArMTQ5LDcg
QEAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCkKICAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOwogICAgICAg
ICAgICAgaWYgKCFmdW5jdGlvblF1ZXVlKCkuc2l6ZSgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaW52b2NhdGlvbiA9IGZ1bmN0aW9uUXVldWUoKS5maXJzdCgpOwotICAg
ICAgICAgICAgZnVuY3Rpb25RdWV1ZSgpLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBpbnZv
Y2F0aW9uID0gZnVuY3Rpb25RdWV1ZSgpLnRha2VGaXJzdCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgaW52b2NhdGlvbi5mdW5jdGlvbihpbnZvY2F0aW9uLmNvbnRleHQpOwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL01l
c3NhZ2VRdWV1ZS5oCmluZGV4IDQ4YmQxMGFkMGRjYTliMThkODE5MzA3MDI3OTIzY2UwNmRmNjg4
MGYuLjEzY2UxZThiMTdjOWU3ODNkZjE4YjA0NjdlZjQ2MGIyNGQyOTdhOTggMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93
dGYvTWVzc2FnZVF1ZXVlLmgKQEAgLTE2Myw5ICsxNjMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICAgICAgRGF0YVR5cGUqIG1lc3NhZ2UgPSBtX3F1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIG1fcXVl
dWUucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgICAgIHJldHVy
biBtX3F1ZXVlLnRha2VGaXJzdCgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERh
dGFUeXBlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBmZjZkYzE2OGRlOTE0ZmNjNGJhOTdiMmRjZWE0YjMyOGYxODhhMjgzLi4zZjAxN2U0
ZDkyNDY4MDUzNTg2OTVlNDFmZjMzODQ5ZWQ5YTAwM2ZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA2
LTAyICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXRpbGl6ZSBuZXcgdGFrZUZpcnN0
KCkgbWV0aG9kIHdoZXJlIGFwcHJvcHJpYXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwODkKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVz
ZSBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjpjYWxsQW5kUmVtb3ZlRmlyc3RDYWxsYmFjayk6Cisg
ICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
b2tlbml6ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmV4ZWN1
dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21l
bnRlZFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VTdWJzdHJpbmcpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24pOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmdldE5leHRTdGF0ZW1lbnQpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
Ojpwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyk6CisKIDIwMTAtMDYtMDMgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI2MDYxNC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXggZmIyNTM3NDdhNmFmYTE0
NGI2NjZhMzUxMTEzODE2YmEyMzQ5ZjA3ZS4uMTkyYzQzZjRlNWIwMjE1YmEzZGRmM2E2MDMxYTI0
YjIyN2Q4NDAzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysr
IGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKQEAgLTI0NSw4ICsyNDUsNyBAQCB2b2lk
IENTU1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JiB1cmxzKQogICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQodGhpcyk7CiAKICAgICB3aGlsZSAo
IXN0eWxlU2hlZXRRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IHN0eWxlU2hlZXRRdWV1ZS5maXJzdCgpOwotICAgICAgICBzdHlsZVNoZWV0UXVl
dWUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0
eWxlU2hlZXRRdWV1ZS50YWtlRmlyc3QoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgU3R5bGVCYXNl
KiBzdHlsZUJhc2UgPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4
bWwyLmNwcAppbmRleCAwNmNmNGE1NTdkMjUwMGM0ZGM0YzAxOWU3OGI3Nzg4OTliYTFkMGMzLi42
OTM2OTBmOWEyMjY4ZmE3M2ExY2VmYmIwZmY1ODUzZjVlZGJkNjc4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxUb2tl
bml6ZXJMaWJ4bWwyLmNwcApAQCAtMTgyLDggKzE4Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y2FsbEFuZFJlbW92ZUZpcnN0Q2FsbGJhY2soWE1MVG9rZW5pemVyKiB0b2tlbml6ZXIpCiAgICAg
ewotICAgICAgICBPd25QdHI8UGVuZGluZ0NhbGxiYWNrPiBjYWxsYmFjayhtX2NhbGxiYWNrcy5m
aXJzdCgpKTsKLSAgICAgICAgbV9jYWxsYmFja3MucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgT3du
UHRyPFBlbmRpbmdDYWxsYmFjaz4gY2FsbGJhY2sobV9jYWxsYmFja3MudGFrZUZpcnN0KCkpOwog
ICAgICAgICBjYWxsYmFjay0+Y2FsbCh0b2tlbml6ZXIpOwogICAgIH0KICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAppbmRleCBkNGYxZDVjYjA5MTViZTkxOGM5ZDllZjNmOWFiNjQ2NjVhMTk3N2Y5
Li42MjllN2Y0MTg3NDQ4ZGI3ZjA1MTZhZGQyNjM5OTVkYzVlOWUyNjM2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUb2tl
bml6ZXIuY3BwCkBAIC0yMTQsOCArMjE0LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpyZXNldCgp
CiAgICAgQVNTRVJUKG1fZXhlY3V0aW5nU2NyaXB0ID09IDApOwogCiAgICAgd2hpbGUgKCFtX3Bl
bmRpbmdTY3JpcHRzLmlzRW1wdHkoKSkgewotICAgICAgICBDYWNoZWRTY3JpcHQqIGNzID0gbV9w
ZW5kaW5nU2NyaXB0cy5maXJzdCgpLmdldCgpOwotICAgICAgICBtX3BlbmRpbmdTY3JpcHRzLnJl
bW92ZUZpcnN0KCk7CisgICAgICAgIENhY2hlZFNjcmlwdCogY3MgPSBtX3BlbmRpbmdTY3JpcHRz
LnRha2VGaXJzdCgpLmdldCgpOwogICAgICAgICBBU1NFUlQoY2FjaGUoKS0+ZGlzYWJsZWQoKSB8
fCBjcy0+YWNjZXNzQ291bnQoKSA+IDApOwogICAgICAgICBjcy0+cmVtb3ZlQ2xpZW50KHRoaXMp
OwogICAgIH0KQEAgLTIwMTEsOCArMjAxMCw3IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6ZXhlY3V0
ZUV4dGVybmFsU2NyaXB0c0lmUmVhZHkoKQogICAgICAgICBpZiAoIWNvbnRpbnVlRXhlY3V0aW5n
RXh0ZXJuYWxTY3JpcHRzKHN0YXJ0VGltZSkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBDYWNoZWRTY3JpcHQqIGNzID0gbV9wZW5kaW5nU2NyaXB0cy5maXJzdCgpLmdldCgpOwotICAg
ICAgICBtX3BlbmRpbmdTY3JpcHRzLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIENhY2hlZFNjcmlw
dCogY3MgPSBtX3BlbmRpbmdTY3JpcHRzLnRha2VGaXJzdCgpLmdldCgpOwogICAgICAgICBBU1NF
UlQoY2FjaGUoKS0+ZGlzYWJsZWQoKSB8fCBjcy0+YWNjZXNzQ291bnQoKSA+IDApOwogCiAgICAg
ICAgIHNldFNyYyhTZWdtZW50ZWRTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdt
ZW50ZWRTdHJpbmcuY3BwCmluZGV4IGQ3NTAzMmY4YmExZTQ0NDQ4Nzg2NTA4ODZlNjhmOTE3NzU4
YmVmZjEuLjJjZjlhMDE2MWU5NDM2ZTE0YmJlYWMxNjAwMDA5N2ZiOTQzMjg5MDggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCkBAIC0xNTIsOCArMTUyLDcgQEAg
dm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByZXBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nICZzKQog
dm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VTdWJzdHJpbmcoKQogewogICAgIGlmIChtX2Nv
bXBvc2l0ZSkgewotICAgICAgICBtX2N1cnJlbnRTdHJpbmcgPSBtX3N1YnN0cmluZ3MuZmlyc3Qo
KTsKLSAgICAgICAgbV9zdWJzdHJpbmdzLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIG1fY3VycmVu
dFN0cmluZyA9IG1fc3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKICAgICAgICAgaWYgKG1fc3Vic3Ry
aW5ncy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NvbXBvc2l0ZSA9IGZhbHNlOwogICAgIH0g
ZWxzZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwIGIvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAppbmRleCBkNmM5NWI3OTRmYzQ2ODk4MDE4NmE4YWY1ODdi
NDJhMzhhZTkxNGM5Li5jOTZkZmJhM2Q3ODVhNGQ3YjJmYzFhN2ZiY2EzMjNiNzkzNzVmY2Y2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5jcHAKQEAgLTY4MCw4ICs2ODAsNyBAQCB2b2lkIERhdGFiYXNlOjpzY2hl
ZHVsZVRyYW5zYWN0aW9uKCkKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
OwogCiAgICAgaWYgKG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCAmJiAhbV90cmFuc2FjdGlv
blF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25R
dWV1ZS5maXJzdCgpOwotICAgICAgICBtX3RyYW5zYWN0aW9uUXVldWUucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uUXVldWUudGFrZUZpcnN0KCk7CiAg
ICAgfQogCiAgICAgaWYgKHRyYW5zYWN0aW9uICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKaW5kZXggZGM0
ZDI3MmEzOTIxOTJkZTk1ODJiZDI0ZDIwZDdjZGM0YTY2YWY4My4uYjA2ZDg2NTUxM2UyNTc3Yjhl
Zjk2YTg3MWMzNGI3OGI1MTA4ZmI3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCkBA
IC0zNTQsOCArMzU0LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Z2V0TmV4dFN0YXRlbWVudCgp
CiAKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7CiAgICAgaWYgKCFt
X3N0YXRlbWVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQg
PSBtX3N0YXRlbWVudFF1ZXVlLmZpcnN0KCk7Ci0gICAgICAgIG1fc3RhdGVtZW50UXVldWUucmVt
b3ZlRmlyc3QoKTsKKyAgICAgICAgbV9jdXJyZW50U3RhdGVtZW50ID0gbV9zdGF0ZW1lbnRRdWV1
ZS50YWtlRmlyc3QoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCBkYmQyNzM5Yzc3OTdjZGMwMzcwMjgxN2Y2OTg5MzUy
ZTQxOTBhMzk4Li4xMDRlYTEwNDZjODRjZTM4NGRkOTJiOGI0M2Q4ZmY1MWJlZDRmZGZjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC01Nyw4
ICs1Nyw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1BlbmRpbmdU
cmFuc2FjdGlvbnMoQ29vcmRpbmF0aW9uSW5mbyYgaW5mCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5m
aXJzdCgpOwogICAgIGlmIChmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7
CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5m
by5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgICAgICBpbmZvLnBlbmRpbmdU
cmFuc2FjdGlvbnMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgIGZpcnN0UGVuZGluZ1RyYW5z
YWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLnRha2VGaXJzdCgpOwogICAgICAgICAg
ICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmFkZChmaXJzdFBlbmRpbmdUcmFuc2FjdGlv
bik7CiAgICAgICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7
CiAgICAgICAgIH0gd2hpbGUgKCFpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpICYm
IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5pc1JlYWRPbmx5KCkpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDU5OTg4
Y2NjNTA4YTNmMGU2YTM5MjRiOTQ0ZDcxMzdhZmEwOWI4Li43OGNkNGE3NWUwYWFhZDVmOTY0M2I1
ZDQ1ZWVhYjZhYmRhMTcxYzAwIDEwMDY0NAotLS0gYS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTAyICBUb255IEdlbnRp
bGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXRpbGl6ZSBuZXcgdGFrZUZpcnN0KCkgbWV0aG9kIHdoZXJl
IGFwcHJvcHJpYXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDAwODkKKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVy
LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6cmVtb3ZlQXR0YWNobWVu
dCk6CisKIDIwMTAtMDYtMDEgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4LiBOb3QgcmV2aWV3ZWQKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggZjE5OTY3NGUwZjY4MjkzZTdiYTI5NWNjODM0YWVh
YTVlYzFjODQ2OC4uNTZkNmVlOTI0YjcxYjczZmI0MzE2MDhjNWZjMTAxMjFiMjMxMzYyOSAxMDA2
NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKKysr
IGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKQEAgLTE4NSw4
ICsxODUsNyBAQCBib29sIEFyZ3VtZW50RGVjb2Rlcjo6cmVtb3ZlQXR0YWNobWVudChBdHRhY2ht
ZW50JiBhdHRhY2htZW50KQogICAgIGlmIChtX2F0dGFjaG1lbnRzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXR0YWNobWVudCA9IG1fYXR0YWNobWVudHMuZmlyc3Qo
KTsKLSAgICBtX2F0dGFjaG1lbnRzLnJlbW92ZUZpcnN0KCk7CisgICAgYXR0YWNobWVudCA9IG1f
YXR0YWNobWVudHMudGFrZUZpcnN0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCBk
MjJiYzg5ZTQxOTcyMGRjMWM4ZGZlMmY3MmM5ZTA1NDZkZDU1M2I1Li40ODVjZjRjMGM2MDVlN2Nh
ZGFlMDI4NmJiMTg0YTE2YjU4Y2MwMDJlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDYt
MDIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVdGlsaXplIG5ldyB0YWtlRmlyc3Qo
KSBtZXRob2Qgd2hlcmUgYXBwcm9wcmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDA4OQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRXZlbnRTZW5kZXIuY3BwOgorICAgICAgICAoRXZlbnRTZW5kZXI6OnJlcGxheVNhdmVk
RXZlbnRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpw
cm9jZXNzV29yayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6V29ya1F1ZXVlOjpy
ZXNldCk6CisKIDIwMTAtMDYtMDMgIE1pa2UgRmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCmluZGV4IDM4MTExMmViYTljNTM2YzNlOWFkMjA2MjIx
MTIwNTBiMTQ3YmRhNjIuLjc2OTUwOTVkMDdiNDgwZjU4YTFjOWZhNjcwMTQxOTkyYjBiNjAzZjAg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2Vu
ZGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNl
bmRlci5jcHAKQEAgLTcxNiw4ICs3MTYsNyBAQCB2b2lkIEV2ZW50U2VuZGVyOjpyZXBsYXlTYXZl
ZEV2ZW50cygpCiB7CiAgICAgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSB0cnVlOwogICAgIHdoaWxl
ICghbW91c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBTYXZlZEV2ZW50IGUgPSBt
b3VzZUV2ZW50UXVldWUuZmlyc3QoKTsKLSAgICAgICAgbW91c2VFdmVudFF1ZXVlLnJlbW92ZUZp
cnN0KCk7CisgICAgICAgIFNhdmVkRXZlbnQgZSA9IG1vdXNlRXZlbnRRdWV1ZS50YWtlRmlyc3Qo
KTsKIAogICAgICAgICBzd2l0Y2ggKGUudHlwZSkgewogICAgICAgICBjYXNlIFNhdmVkRXZlbnQ6
Ok1vdXNlTW92ZTogewpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGI0ZTM3NjQ1NWMxNTEy
NmEyNTYwYWJjOGExOTdjN2U2OGZkZjRlMjYuLjg5ZTE2ZTBiN2I0ZmQ5MzgzYTMxMjAxZWU3YzQx
ZjI0OGM1ZDA1ZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTIwMSw4ICsyMDEsNyBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpXb3JrUXVldWU6OnByb2Nlc3NXb3JrKCkKICAg
ICAvLyBRdWl0IGRvaW5nIHdvcmsgb25jZSBhIGxvYWQgaXMgaW4gcHJvZ3Jlc3MuCiAgICAgd2hp
bGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBib29sIHN0YXJ0ZWRMb2FkID0gbV9x
dWV1ZS5maXJzdCgpLT5ydW4oc2hlbGwpOwotICAgICAgICBkZWxldGUgbV9xdWV1ZS5maXJzdCgp
OwotICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZSBtX3F1ZXVl
LnRha2VGaXJzdCgpOwogICAgICAgICBpZiAoc3RhcnRlZExvYWQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMjE1LDggKzIxNCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OldvcmtRdWV1ZTo6cmVzZXQoKQogewogICAgIG1fZnJvemVuID0gZmFsc2U7CiAgICAgd2hpbGUg
KCFtX3F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBkZWxldGUgbV9xdWV1ZS5maXJzdCgpOwot
ICAgICAgICBtX3F1ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZSBtX3F1ZXVlLnRh
a2VGaXJzdCgpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>