<?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>138601</bug_id>
          
          <creation_ts>2014-11-10 22:38:03 -0800</creation_ts>
          <short_desc>Minor improvements to RenderListItem</short_desc>
          <delta_ts>2014-11-13 09:44:27 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1047766</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-10 22:38:03 -0800</bug_when>
    <thetext>Minor improvements to RenderListItem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047767</commentid>
    <comment_count>1</comment_count>
      <attachid>241335</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-10 22:38:39 -0800</bug_when>
    <thetext>Created attachment 241335
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047769</commentid>
    <comment_count>2</comment_count>
      <attachid>241336</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-10 22:48:31 -0800</bug_when>
    <thetext>Created attachment 241336
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048018</commentid>
    <comment_count>3</comment_count>
      <attachid>241389</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 16:12:50 -0800</bug_when>
    <thetext>Created attachment 241389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048086</commentid>
    <comment_count>4</comment_count>
      <attachid>241389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-11 20:16:37 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt; Source/WebCore/rendering/RenderListItem.cpp:103
&gt; -static bool isList(const Element* element)
&gt; +static inline bool isHTMLListElement(const Node&amp; node)

Too bad that we are changing this to take a Node rather than an Element. For a while we were trying to write as much code as possible to work on elements only to prepare for a world where we didn’t necessarily allocate all the text nodes.

&gt; Source/WebCore/rendering/RenderListItem.cpp:189
&gt;      unsigned itemCount = 0;
&gt; -    for (RenderListItem* listItem = nextListItem(listNode); listItem; listItem = nextListItem(listNode, listItem))
&gt; -        itemCount++;
&gt; +    for (RenderListItem* listItem = nextListItem(listNode); listItem; listItem = nextListItem(listNode, *listItem))
&gt; +        ++itemCount;
&gt;  
&gt;      return itemCount;

Should remove the blank line here for a clearer &quot;code paragraph&quot;.

&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt;      const String&amp; markerText = m_marker-&gt;text();
&gt;      const String markerSuffix = m_marker-&gt;suffix();

Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.

&gt; Source/WebCore/rendering/RenderListItem.cpp:520
&gt; +template &lt;RenderListItem::ListIsReversedOrNot isListReversed&gt;
&gt; +inline void RenderListItem::updateListMarkerNumbersInternal(Element&amp; listNode, RenderListItem&amp; firstItem)

Is this function really code that is so hot that we need to use a template argument rather than a runtime argument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048097</commentid>
    <comment_count>5</comment_count>
      <attachid>241389</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 21:09:52 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:103
&gt;&gt; +static inline bool isHTMLListElement(const Node&amp; node)
&gt; 
&gt; Too bad that we are changing this to take a Node rather than an Element. For a while we were trying to write as much code as possible to work on elements only to prepare for a world where we didn’t necessarily allocate all the text nodes.

So would you like me to keep it as an Element? It is more reusable if it takes a Node argument here (I used it in one more place below).

&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt; 
&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.

RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048160</commentid>
    <comment_count>6</comment_count>
      <attachid>241389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:03:05 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:103
&gt;&gt;&gt; +static inline bool isHTMLListElement(const Node&amp; node)
&gt;&gt; 
&gt;&gt; Too bad that we are changing this to take a Node rather than an Element. For a while we were trying to write as much code as possible to work on elements only to prepare for a world where we didn’t necessarily allocate all the text nodes.
&gt; 
&gt; So would you like me to keep it as an Element? It is more reusable if it takes a Node argument here (I used it in one more place below).

Not sure. A while back I was doing everything possible to code in terms of elements and not nodes, but your argument for the way you are writing the code is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048161</commentid>
    <comment_count>7</comment_count>
      <attachid>241389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:04:09 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt;&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt;&gt; 
&gt;&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.
&gt; 
&gt; RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.

My preference would be to not put either of these into a local variable at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048168</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 09:22:59 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 241389 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241389&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt; &gt;&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt; &gt;&gt; 
&gt; &gt;&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.
&gt; &gt; 
&gt; &gt; RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.
&gt; 
&gt; My preference would be to not put either of these into a local variable at
&gt; all.

Calling RenderListMarker::suffix() is expensive as it constructs a String and we need it at least twice so I think we should keep caching its result. However, there is no reason to cache the result of RenderListMarker::text() as it is a trivial and inline getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048169</commentid>
    <comment_count>9</comment_count>
      <attachid>241389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:25:13 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt;&gt;&gt;&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.
&gt;&gt;&gt; 
&gt;&gt;&gt; RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.
&gt;&gt; 
&gt;&gt; My preference would be to not put either of these into a local variable at all.
&gt; 
&gt; Calling RenderListMarker::suffix() is expensive as it constructs a String and we need it at least twice so I think we should keep caching its result. However, there is no reason to cache the result of RenderListMarker::text() as it is a trivial and inline getter.

We didn’t need it twice before, but I see now that you are using it for reserveCapacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048173</commentid>
    <comment_count>10</comment_count>
      <attachid>241389</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:27:08 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt;&gt;&gt;&gt;&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.
&gt;&gt;&gt; 
&gt;&gt;&gt; My preference would be to not put either of these into a local variable at all.
&gt;&gt; 
&gt;&gt; Calling RenderListMarker::suffix() is expensive as it constructs a String and we need it at least twice so I think we should keep caching its result. However, there is no reason to cache the result of RenderListMarker::text() as it is a trivial and inline getter.
&gt; 
&gt; We didn’t need it twice before, but I see now that you are using it for reserveCapacity.

This code should use string appending, not StringBuilder. Replace the 14 lines with these 3 lines:

    if (m_marker-&gt;style().isLeftToRightDirection())
        return m_marker-&gt;text() + m_marker-&gt;suffix();
    return m_marker-&gt;suffix() + m_marker-&gt;text();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048178</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 09:38:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 241389 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241389&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:449
&gt; &gt;&gt;&gt;&gt;&gt;&gt;      const String markerSuffix = m_marker-&gt;suffix();
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Strange that one line uses const String&amp; and the next uses const String. I see no reason for the difference.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; RenderListMarker::text() returns a &quot;const String&amp;&quot;, while RenderListMarker::suffix() returns a String. What is your preference here? Given the different return types, I thought these difference variable types were OK.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; My preference would be to not put either of these into a local variable at all.
&gt; &gt;&gt; 
&gt; &gt;&gt; Calling RenderListMarker::suffix() is expensive as it constructs a String and we need it at least twice so I think we should keep caching its result. However, there is no reason to cache the result of RenderListMarker::text() as it is a trivial and inline getter.
&gt; &gt; 
&gt; &gt; We didn’t need it twice before, but I see now that you are using it for reserveCapacity.
&gt; 
&gt; This code should use string appending, not StringBuilder. Replace the 14
&gt; lines with these 3 lines:
&gt; 
&gt;     if (m_marker-&gt;style().isLeftToRightDirection())
&gt;         return m_marker-&gt;text() + m_marker-&gt;suffix();
&gt;     return m_marker-&gt;suffix() + m_marker-&gt;text();

ah, sure :) why make things simple when it can be complicated.

I will make the updates and double-check the impact of the templated function on Speedometer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048187</commentid>
    <comment_count>12</comment_count>
      <attachid>241433</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 10:20:22 -0800</bug_when>
    <thetext>Created attachment 241433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048201</commentid>
    <comment_count>13</comment_count>
      <attachid>241389</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 11:35:30 -0800</bug_when>
    <thetext>Comment on attachment 241389
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderListItem.cpp:520
&gt;&gt; +inline void RenderListItem::updateListMarkerNumbersInternal(Element&amp; listNode, RenderListItem&amp; firstItem)
&gt; 
&gt; Is this function really code that is so hot that we need to use a template argument rather than a runtime argument?

I measured again and the impact on Speedometer is within noise (despite the function being called frequently). I kept this change out of the last patch iteration as it doesn&apos;t seem worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048223</commentid>
    <comment_count>14</comment_count>
      <attachid>241433</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-12 12:16:47 -0800</bug_when>
    <thetext>Comment on attachment 241433
Patch

Clearing flags on attachment: 241433

Committed r176032: &lt;http://trac.webkit.org/changeset/176032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048224</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-12 12:16:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048423</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-13 09:44:27 -0800</bug_when>
    <thetext>Seems like the bot is reporting a 2.42% improvement on Speedometer:
https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22DoYouEvenBench%2FFull%3ATime%3ATotal%22%5D%5D</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241335</attachid>
            <date>2014-11-10 22:38:39 -0800</date>
            <delta_ts>2014-11-10 22:48:31 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>RenderListItem_wip.patch</filename>
            <type>text/plain</type>
            <size>15642</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCmluZGV4IDliNmE1MDguLjZm
MGNlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcApAQCAtMTA2
LDEyICsxMDYsMTIgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydChpbnQgc3RhcnQp
CiAKIHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6dXBkYXRlSXRlbVZhbHVlcygpCiB7Ci0gICAgUmVu
ZGVyTGlzdEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdCh0aGlzKTsKKyAgICBS
ZW5kZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KCp0aGlzKTsKIH0K
IAogdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpyZWNhbGN1bGF0ZUl0ZW1Db3VudCgpCiB7Ci0gICAg
bV9pdGVtQ291bnQgPSBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJlZExpc3QodGhp
cyk7CisgICAgbV9pdGVtQ291bnQgPSBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJl
ZExpc3QoKnRoaXMpOwogICAgIG1fc2hvdWxkUmVjYWxjdWxhdGVJdGVtQ291bnQgPSBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXgg
YzAzMjUwYy4uNjM4MmQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9T
dGFja1N0YXRzLmg+CkBAIC05OSwyMyArMTAwLDIxIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Ondp
bGxCZVJlbW92ZWRGcm9tVHJlZSgpCiAgICAgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIH0K
IAotc3RhdGljIGJvb2wgaXNMaXN0KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNIVE1MTGlzdEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1
cm4gZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvbFRh
Zyk7CisgICAgcmV0dXJuIGlzPEhUTUxVTGlzdEVsZW1lbnQ+KG5vZGUpIHx8IGlzPEhUTUxPTGlz
dEVsZW1lbnQ+KG5vZGUpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBlbmNsb3NpbmcgbGlzdCB3aXRo
IHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KLXN0YXRpYyBFbGVtZW50KiBlbmNsb3NpbmdMaXN0
KGNvbnN0IFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSkKK3N0YXRpYyBFbGVtZW50KiBlbmNsb3Np
bmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtJiBsaXN0SXRlbSkKIHsKLSAgICBFbGVtZW50JiBs
aXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbS0+ZWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGZpcnN0
Tm9kZSA9IG51bGxwdHI7CisgICAgRWxlbWVudCYgbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW0u
ZWxlbWVudCgpOwogICAgIEVsZW1lbnQqIHBhcmVudCA9IGlzPFBzZXVkb0VsZW1lbnQ+KGxpc3RJ
dGVtRWxlbWVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihsaXN0SXRlbUVsZW1lbnQpLmhv
c3RFbGVtZW50KCkgOiBsaXN0SXRlbUVsZW1lbnQucGFyZW50RWxlbWVudCgpOworICAgIEVsZW1l
bnQqIGZpcnN0Tm9kZSA9IHBhcmVudDsKICAgICAvLyBXZSB1c2UgcGFyZW50Tm9kZSBiZWNhdXNl
IHRoZSBlbmNsb3NpbmcgbGlzdCBjb3VsZCBiZSBhIFNoYWRvd1Jvb3QgdGhhdCdzIG5vdCBFbGVt
ZW50LgogICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChpc0xpc3QocGFyZW50KSkKKyAgICAgICAgaWYgKGlzSFRNTExpc3RF
bGVtZW50KCpwYXJlbnQpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKLSAgICAgICAgaWYg
KCFmaXJzdE5vZGUpCi0gICAgICAgICAgICBmaXJzdE5vZGUgPSBwYXJlbnQ7CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlcmUncyBubyBhY3R1YWwgPHVsPiBvciA8b2w+IGxpc3QgZWxlbWVudCwgdGhl
biB0aGUgZmlyc3QgZm91bmQKQEAgLTEyNSw0MSArMTI0LDQzIEBAIHN0YXRpYyBFbGVtZW50KiBl
bmNsb3NpbmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSkKIH0KIAogLy8gUmV0
dXJucyB0aGUgbmV4dCBsaXN0IGl0ZW0gd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCi1z
dGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50KiBsaXN0Tm9k
ZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBudWxscHRyKQorc3RhdGljIFJlbmRlckxp
c3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUsIGNvbnN0IEVsZW1l
bnQmIGN1cnJlbnQpCiB7Ci0gICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50ID0gaXRlbSA/ICZpdGVtLT5lbGVtZW50
KCkgOiBsaXN0Tm9kZTsKLSAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1
ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkgewot
ICAgICAgICBpZiAoaXNMaXN0KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBmb3Vu
ZCBhIG5lc3RlZCwgaW5kZXBlbmRlbnQgbGlzdDogbm90aGluZyB0byBkbyBoZXJlLgotICAgICAg
ICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKGN1cnJlbnQsIGxpc3ROb2RlKTsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQq
IG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKCZjdXJyZW50LCAm
bGlzdE5vZGUpOyBuZXh0OyApIHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBuZXh0LT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IGlzSFRNTExpc3RFbGVtZW50KCpuZXh0
KSkgeworICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50IGxp
c3Qgb3IgYW4gdW5yZW5kZXJlZCBFbGVtZW50IDogbm90aGluZyB0byBkbyBoZXJlLgorICAgICAg
ICAgICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGlu
Z0NoaWxkcmVuKG5leHQsICZsaXN0Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpCisgICAgICAg
IGlmIChpczxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpOwogCi0gICAgICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyBiZSBvcHRpbWl6ZWQgdG8gc2tpcCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnRz
IHdpdGhvdXQgYSByZW5kZXJlcj8KLSAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOworICAgICAgICBuZXh0ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhuZXh0LCAmbGlzdE5vZGUpOwog
ICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwogfQogCitzdGF0aWMgUmVuZGVyTGlzdEl0ZW0q
IG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50JiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0
ZW0mIGl0ZW0pCit7CisgICAgcmV0dXJuIG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgaXRlbS5lbGVt
ZW50KCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0o
Y29uc3QgRWxlbWVudCYgbGlzdE5vZGUpCit7CisgICAgcmV0dXJuIG5leHRMaXN0SXRlbShsaXN0
Tm9kZSwgbGlzdE5vZGUpOworfQorCiAvLyBSZXR1cm5zIHRoZSBwcmV2aW91cyBsaXN0IGl0ZW0g
d2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCi1zdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHBy
ZXZpb3VzTGlzdEl0ZW0oY29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpc3RJ
dGVtKiBpdGVtKQorc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0xpc3RJdGVtKGNvbnN0
IEVsZW1lbnQqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBF
bGVtZW50KiBjdXJyZW50ID0gJml0ZW0tPmVsZW1lbnQoKTsKLSAgICBmb3IgKGN1cnJlbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9k
ZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGlu
Z1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSkpIHsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIGN1
cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbygmaXRlbS5l
bGVtZW50KCksIGxpc3ROb2RlKTsgY3VycmVudDsgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKSkgewogICAgICAgICBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGN1cnJlbnQtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlm
ICghaXM8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBFbGVtZW50KiBvdGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0KGRvd25jYXN0PFJlbmRl
ckxpc3RJdGVtPihyZW5kZXJlcikpOworICAgICAgICBFbGVtZW50KiBvdGhlckxpc3QgPSBlbmNs
b3NpbmdMaXN0KGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKTsKICAgICAgICAg
Ly8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3VyIGN1cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdl
J3JlIGxvb2tpbmcgZm9yLgogICAgICAgICBpZiAobGlzdE5vZGUgPT0gb3RoZXJMaXN0KQogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcik7CkBAIC0x
NzMsMjEgKzE3NCwxNyBAQCBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0o
Y29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpcwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi12b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJl
ZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCogbGlzdE5vZGUpCit2b2lkIFJlbmRlckxpc3RJ
dGVtOjp1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVu
dCYgbGlzdE5vZGUpCiB7Ci0gICAgQVNTRVJUKGxpc3ROb2RlKTsKLQotICAgIGZvciAoUmVuZGVy
TGlzdEl0ZW0qIGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlKTsgbGlzdEl0ZW07IGxp
c3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCBsaXN0SXRlbSkpCisgICAgZm9yIChSZW5k
ZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUpOyBsaXN0SXRlbTsg
bGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsICpsaXN0SXRlbSkpCiAgICAgICAgIGxp
c3RJdGVtLT51cGRhdGVWYWx1ZSgpOwogfQogCi11bnNpZ25lZCBSZW5kZXJMaXN0SXRlbTo6aXRl
bUNvdW50Rm9yT3JkZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCogbGlzdE5vZGUpCit1
bnNpZ25lZCBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJlZExpc3QoY29uc3QgSFRN
TE9MaXN0RWxlbWVudCYgbGlzdE5vZGUpCiB7Ci0gICAgQVNTRVJUKGxpc3ROb2RlKTsKLQogICAg
IHVuc2lnbmVkIGl0ZW1Db3VudCA9IDA7Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0
ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBuZXh0TGlz
dEl0ZW0obGlzdE5vZGUsIGxpc3RJdGVtKSkKLSAgICAgICAgaXRlbUNvdW50Kys7CisgICAgZm9y
IChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUpOyBsaXN0
SXRlbTsgbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsICpsaXN0SXRlbSkpCisgICAg
ICAgICsraXRlbUNvdW50OwogCiAgICAgcmV0dXJuIGl0ZW1Db3VudDsKIH0KQEAgLTE5NywxNSAr
MTk0LDE1IEBAIGlubGluZSBpbnQgUmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSgpIGNvbnN0CiAg
ICAgaWYgKG1faGFzRXhwbGljaXRWYWx1ZSkKICAgICAgICAgcmV0dXJuIG1fZXhwbGljaXRWYWx1
ZTsKIAotICAgIEVsZW1lbnQqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KHRoaXMpOwotICAgIEhUTUxP
TGlzdEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IChsaXN0ICYmIGxpc3QtPmhhc1RhZ05hbWUob2xU
YWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpIDogbnVsbHB0cjsKKyAgICBF
bGVtZW50KiBsaXN0ID0gZW5jbG9zaW5nTGlzdCgqdGhpcyk7CisgICAgSFRNTE9MaXN0RWxlbWVu
dCogb0xpc3RFbGVtZW50ID0gaXM8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgPyBkb3duY2FzdDxI
VE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxwdHI7CiAgICAgaW50IHZhbHVlU3RlcCA9IDE7
CiAgICAgaWYgKG9MaXN0RWxlbWVudCAmJiBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJzZWQoKSkKICAg
ICAgICAgdmFsdWVTdGVwID0gLTE7CiAKICAgICAvLyBGSVhNRTogVGhpcyByZWN1cnNlcyB0byBh
IHBvc3NpYmxlIGRlcHRoIG9mIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuCiAgICAgLy8gVGhhdCdz
IG5vdCBnb29kIC0tIHdlIG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gYW4gaXRlcmF0aXZlIGFsZ29y
aXRobS4KLSAgICBpZiAoUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzSXRlbSA9IHByZXZpb3VzTGlz
dEl0ZW0obGlzdCwgdGhpcykpCisgICAgaWYgKFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0l0ZW0g
PSBwcmV2aW91c0xpc3RJdGVtKGxpc3QsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIHByZXZpb3Vz
SXRlbS0+dmFsdWUoKSArIHZhbHVlU3RlcDsKIAogICAgIGlmIChvTGlzdEVsZW1lbnQpCkBAIC0y
MjUsMzEgKzIyMiwyNiBAQCBib29sIFJlbmRlckxpc3RJdGVtOjppc0VtcHR5KCkgY29uc3QKICAg
ICByZXR1cm4gbGFzdENoaWxkKCkgPT0gbV9tYXJrZXI7CiB9CiAKLXN0YXRpYyBSZW5kZXJCbG9j
ayogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVuZGVyQmxvY2sqIGN1cnIsIFJlbmRlck9iamVj
dCogbWFya2VyKQorc3RhdGljIFJlbmRlckJsb2NrKiBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChS
ZW5kZXJCbG9jayYgY3VycmVudCwgUmVuZGVyT2JqZWN0JiBtYXJrZXIpCiB7Ci0gICAgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkID0gY3Vyci0+Zmlyc3RDaGlsZCgpOwotICAgIGlmICghZmlyc3RD
aGlsZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIGluUXVpcmtzTW9kZSA9IGN1cnIt
PmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJD
aGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQorICAgIGJvb2wg
aW5RdWlya3NNb2RlID0gY3VycmVudC5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpOworICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQgPT0gJm1hcmtl
cikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzSW5s
aW5lKCkgJiYgKCFpczxSZW5kZXJJbmxpbmU+KCpjdXJyQ2hpbGQpIHx8IGN1cnItPmdlbmVyYXRl
c0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKGN1cnJDaGlsZCkpKQotICAgICAgICAgICAgcmV0dXJu
IGN1cnI7CisgICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGlu
ZT4oKmNoaWxkKSB8fCBjdXJyZW50LmdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxkKGNo
aWxkKSkpCisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CiAKLSAgICAgICAgaWYgKGN1cnJD
aGlsZC0+aXNGbG9hdGluZygpIHx8IGN1cnJDaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
CisgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpIHx8IGNoaWxkLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjdXJyQ2hp
bGQtPmlzVGFibGUoKSB8fCAhaXM8UmVuZGVyQmxvY2s+KCpjdXJyQ2hpbGQpIHx8IChpczxSZW5k
ZXJCb3g+KCpjdXJyQ2hpbGQpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKmN1cnJDaGlsZCkuaXNX
cml0aW5nTW9kZVJvb3QoKSkpCisgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZT4oKmNoaWxkKSB8
fCAhaXM8UmVuZGVyQmxvY2s+KCpjaGlsZCkgfHwgKGlzPFJlbmRlckJveD4oKmNoaWxkKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuaXNXcml0aW5nTW9kZVJvb3QoKSkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBpZiAoY3Vyci0+aXNMaXN0SXRlbSgpICYmIGluUXVpcmtz
TW9kZSAmJiBjdXJyQ2hpbGQtPm5vZGUoKSAmJgotICAgICAgICAgICAgKGlzPEhUTUxVTGlzdEVs
ZW1lbnQ+KCpjdXJyQ2hpbGQtPm5vZGUoKSkgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oKmN1cnJD
aGlsZC0+bm9kZSgpKSkpCisgICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4oY3VycmVudCkg
JiYgaW5RdWlya3NNb2RlICYmIGNoaWxkLT5ub2RlKCkgJiYgaXNIVE1MTGlzdEVsZW1lbnQoKmNo
aWxkLT5ub2RlKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKFJlbmRlckJs
b2NrKiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KGN1cnJDaGlsZCksIG1hcmtlcikpCisgICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJv
eCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2hpbGQp
LCBtYXJrZXIpKQogICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7CiAgICAgfQogCkBAIC0yNjUs
MTIgKzI1NywxMiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgfQog
fQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlckJsb2Nr
KiBwYXJlbnQpCitzdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRl
ckJsb2NrJiBwYXJlbnQpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZXN1bHQgPSBwYXJlbnQtPmZp
cnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAocmVzdWx0ICYmIHJlc3VsdC0+aXNMaXN0TWFya2VyKCkp
Ci0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+bmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOworICAg
IHdoaWxlIChpczxSZW5kZXJMaXN0TWFya2VyPihjaGlsZCkpCisgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIGNoaWxkOwogfQogCiB2b2lkIFJlbmRlckxp
c3RJdGVtOjppbnNlcnRPck1vdmVNYXJrZXJSZW5kZXJlcklmTmVlZGVkKCkKQEAgLTI4MCw3ICsy
NzIsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjppbnNlcnRPck1vdmVNYXJrZXJSZW5kZXJlcklm
TmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyRWxlbWVudCogY3VycmVudFBh
cmVudCA9IG1fbWFya2VyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJCbG9jayogbmV3UGFyZW50ID0g
Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3godGhpcywgbV9tYXJrZXIpOworICAgIFJlbmRlckJsb2Nr
KiBuZXdQYXJlbnQgPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCgqdGhpcywgKm1fbWFya2VyKTsK
ICAgICBpZiAoIW5ld1BhcmVudCkgewogICAgICAgICAvLyBJZiB0aGUgbWFya2VyIGlzIGN1cnJl
bnRseSBjb250YWluZWQgaW5zaWRlIGFuIGFub255bW91cyBib3gsCiAgICAgICAgIC8vIHRoZW4g
d2UgYXJlIHRoZSBvbmx5IGl0ZW0gaW4gdGhhdCBhbm9ueW1vdXMgYm94IChzaW5jZSBubyBsaW5l
IGJveApAQCAtMjk5LDcgKzI5MSw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Omluc2VydE9yTW92
ZU1hcmtlclJlbmRlcmVySWZOZWVkZWQoKQogICAgICAgICAvLyBjb250YWluZXJzIG90aGVyIHRo
YW4gb3Vyc2VsdmVzLCBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgTGF5b3V0U3RhdGUuCiAgICAgICAg
IExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcigmdmlldygpKTsKICAgICAg
ICAgbV9tYXJrZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgbmV3UGFyZW50LT5hZGRD
aGlsZChtX21hcmtlciwgZmlyc3ROb25NYXJrZXJDaGlsZChuZXdQYXJlbnQpKTsKKyAgICAgICAg
bmV3UGFyZW50LT5hZGRDaGlsZChtX21hcmtlciwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFy
ZW50KSk7CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVNYXJnaW5zQW5kQ29udGVudCgpOwogICAg
ICAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBoYXMg
bG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgogICAgICAgICBpZiAoY3VycmVudFBh
cmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJlbnRQYXJl
bnQtPmZpcnN0Q2hpbGQoKSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50UGFyZW50
KS5jb250aW51YXRpb24oKSkKQEAgLTQ1Niw2ICs0NDgsNyBAQCBTdHJpbmcgUmVuZGVyTGlzdEl0
ZW06Om1hcmtlclRleHRXaXRoU3VmZml4KCkgY29uc3QKICAgICBjb25zdCBTdHJpbmcmIG1hcmtl
clRleHQgPSBtX21hcmtlci0+dGV4dCgpOwogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXgg
PSBtX21hcmtlci0+c3VmZml4KCk7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eShtYXJrZXJUZXh0Lmxlbmd0aCgpICsgbWFya2VyU3VmZml4Lmxl
bmd0aCgpKTsKIAogICAgIGlmICghbV9tYXJrZXItPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQogICAgICAgICByZXN1bHQuYXBwZW5kKG1hcmtlclN1ZmZpeCk7CkBAIC00NzIsOCAr
NDY1LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKCkKIHsK
ICAgICBpZiAobV9tYXJrZXIpCiAgICAgICAgIG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qo
dGhpcyk7Ci0gICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRoaXM7IGl0ZW07IGl0ZW0g
PSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsIGl0ZW0pKQorCisgICAgdXBkYXRlVmFsdWUoKTsKKyAg
ICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOworICAgIGlmICghbGlz
dE5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0g
bmV4dExpc3RJdGVtKCpsaXN0Tm9kZSwgKnRoaXMpOyBpdGVtOyBpdGVtID0gbmV4dExpc3RJdGVt
KCpsaXN0Tm9kZSwgKml0ZW0pKQogICAgICAgICBpdGVtLT51cGRhdGVWYWx1ZSgpOwogfQogCkBA
IC00OTYsMjUgKzQ5MywxNSBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpjbGVhckV4cGxpY2l0VmFs
dWUoKQogICAgIGV4cGxpY2l0VmFsdWVDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBSZW5kZXJMaXN0
SXRlbSogcHJldmlvdXNPck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2ZXJzZWQsIEVsZW1lbnQqIGxp
c3QsIFJlbmRlckxpc3RJdGVtKiBpdGVtKQorc3RhdGljIEFMV0FZU19JTkxJTkUgUmVuZGVyTGlz
dEl0ZW0qIHByZXZpb3VzT3JOZXh0SXRlbShib29sIGlzTGlzdFJldmVyc2VkLCBFbGVtZW50JiBs
aXN0LCBSZW5kZXJMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICByZXR1cm4gaXNMaXN0UmV2ZXJzZWQg
PyBwcmV2aW91c0xpc3RJdGVtKGxpc3QsIGl0ZW0pIDogbmV4dExpc3RJdGVtKGxpc3QsIGl0ZW0p
OworICAgIHJldHVybiBpc0xpc3RSZXZlcnNlZCA/IHByZXZpb3VzTGlzdEl0ZW0oJmxpc3QsIGl0
ZW0pIDogbmV4dExpc3RJdGVtKGxpc3QsIGl0ZW0pOwogfQogCi12b2lkIFJlbmRlckxpc3RJdGVt
Ojp1cGRhdGVMaXN0TWFya2VyTnVtYmVycygpCit0ZW1wbGF0ZSA8UmVuZGVyTGlzdEl0ZW06Okxp
c3RJc1JldmVyc2VkT3JOb3QgaXNMaXN0UmV2ZXJzZWQ+CitpbmxpbmUgdm9pZCBSZW5kZXJMaXN0
SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnNJbnRlcm5hbChFbGVtZW50JiBsaXN0Tm9kZSwg
UmVuZGVyTGlzdEl0ZW0mIGZpcnN0SXRlbSkKIHsKLSAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVu
Y2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgLy8gVGhlIGxpc3Qgbm9kZSBjYW4gYmUgdGhlIHNoYWRv
dyByb290IHdoaWNoIGhhcyBubyByZW5kZXJlci4KLSAgICBpZiAoIWxpc3ROb2RlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIGlzTGlzdFJldmVyc2VkID0gZmFsc2U7Ci0gICAgSFRNTE9M
aXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5oYXNUYWdO
YW1lKG9sVGFnKSkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0Tm9kZSkgOiBudWxs
cHRyOwotICAgIGlmIChvTGlzdEVsZW1lbnQpIHsKLSAgICAgICAgb0xpc3RFbGVtZW50LT5pdGVt
Q291bnRDaGFuZ2VkKCk7Ci0gICAgICAgIGlzTGlzdFJldmVyc2VkID0gb0xpc3RFbGVtZW50LT5p
c1JldmVyc2VkKCk7Ci0gICAgfQotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBwcmV2
aW91c09yTmV4dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3ROb2RlLCB0aGlzKTsgaXRlbTsgaXRl
bSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgbGlzdE5vZGUsIGl0ZW0pKSB7
CisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xp
c3RSZXZlcnNlZCwgbGlzdE5vZGUsIGZpcnN0SXRlbSk7IGl0ZW07IGl0ZW0gPSBwcmV2aW91c09y
TmV4dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3ROb2RlLCAqaXRlbSkpIHsKICAgICAgICAgaWYg
KCFpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSkgewogICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBo
YXMgYmVlbiBtYXJrZWQgZm9yIHVwZGF0ZSBiZWZvcmUsIHdlIGNhbiBzYWZlbHkKICAgICAgICAg
ICAgIC8vIGFzc3VtZSB0aGF0IGFsbCB0aGUgZm9sbG93aW5nIG9uZXMgaGF2ZSB0b28uCkBAIC01
MjYsNCArNTEzLDIyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1i
ZXJzKCkKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJO
dW1iZXJzKCkKK3sKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QoKnRoaXMp
OworICAgIC8vIFRoZSBsaXN0IG5vZGUgY2FuIGJlIHRoZSBzaGFkb3cgcm9vdCB3aGljaCBoYXMg
bm8gcmVuZGVyZXIuCisgICAgaWYgKCFsaXN0Tm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpsaXN0Tm9kZSkpIHsKKyAgICAgICAgSFRNTE9MaXN0
RWxlbWVudCYgb0xpc3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4oKmxpc3RO
b2RlKTsKKyAgICAgICAgb0xpc3RFbGVtZW50Lml0ZW1Db3VudENoYW5nZWQoKTsKKyAgICAgICAg
aWYgKG9MaXN0RWxlbWVudC5pc1JldmVyc2VkKCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUxpc3RN
YXJrZXJOdW1iZXJzSW50ZXJuYWw8TGlzdElzUmV2ZXJzZWQ+KCpsaXN0Tm9kZSwgKnRoaXMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHVwZGF0ZUxpc3RNYXJr
ZXJOdW1iZXJzSW50ZXJuYWw8TGlzdElzTm90UmV2ZXJzZWQ+KCpsaXN0Tm9kZSwgKnRoaXMpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5oCmluZGV4IDI1NmQ2MjkuLjNkYjYxYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50Kik7Ci0gICAg
c3RhdGljIHVuc2lnbmVkIGl0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVs
ZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3Qo
Y29uc3QgSFRNTE9MaXN0RWxlbWVudCYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBpdGVtQ291bnRG
b3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50Jik7CiAKICAgICB2b2lkIGRpZERl
c3Ryb3lMaXN0TWFya2VyKCkgeyBtX21hcmtlciA9IG51bGxwdHI7IH0KIApAQCAtODUsNiArODUs
MTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVZhbHVlTm93KCkgY29uc3Q7CiAgICAgdm9p
ZCBleHBsaWNpdFZhbHVlQ2hhbmdlZCgpOwogCisgICAgZW51bSBMaXN0SXNSZXZlcnNlZE9yTm90
IHsgTGlzdElzTm90UmV2ZXJzZWQsIExpc3RJc1JldmVyc2VkIH07CisgICAgdGVtcGxhdGUgPExp
c3RJc1JldmVyc2VkT3JOb3Q+CisgICAgdm9pZCB1cGRhdGVMaXN0TWFya2VyTnVtYmVyc0ludGVy
bmFsKEVsZW1lbnQmIGxpc3ROb2RlLCBSZW5kZXJMaXN0SXRlbSYgZmlyc3RJdGVtKTsKKwogICAg
IGludCBtX2V4cGxpY2l0VmFsdWU7CiAgICAgUmVuZGVyTGlzdE1hcmtlciogbV9tYXJrZXI7CiAg
ICAgbXV0YWJsZSBpbnQgbV92YWx1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241336</attachid>
            <date>2014-11-10 22:48:31 -0800</date>
            <delta_ts>2014-11-11 16:12:47 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>RenderListItem_wip.patch</filename>
            <type>text/plain</type>
            <size>15377</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCmluZGV4IDliNmE1MDguLjZm
MGNlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcApAQCAtMTA2
LDEyICsxMDYsMTIgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydChpbnQgc3RhcnQp
CiAKIHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6dXBkYXRlSXRlbVZhbHVlcygpCiB7Ci0gICAgUmVu
ZGVyTGlzdEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdCh0aGlzKTsKKyAgICBS
ZW5kZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KCp0aGlzKTsKIH0K
IAogdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpyZWNhbGN1bGF0ZUl0ZW1Db3VudCgpCiB7Ci0gICAg
bV9pdGVtQ291bnQgPSBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJlZExpc3QodGhp
cyk7CisgICAgbV9pdGVtQ291bnQgPSBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJl
ZExpc3QoKnRoaXMpOwogICAgIG1fc2hvdWxkUmVjYWxjdWxhdGVJdGVtQ291bnQgPSBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXgg
YzAzMjUwYy4uZGY2MWIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9T
dGFja1N0YXRzLmg+CkBAIC05OSwyMyArMTAwLDIxIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Ondp
bGxCZVJlbW92ZWRGcm9tVHJlZSgpCiAgICAgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIH0K
IAotc3RhdGljIGJvb2wgaXNMaXN0KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNIVE1MTGlzdEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1
cm4gZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvbFRh
Zyk7CisgICAgcmV0dXJuIGlzPEhUTUxVTGlzdEVsZW1lbnQ+KG5vZGUpIHx8IGlzPEhUTUxPTGlz
dEVsZW1lbnQ+KG5vZGUpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBlbmNsb3NpbmcgbGlzdCB3aXRo
IHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KLXN0YXRpYyBFbGVtZW50KiBlbmNsb3NpbmdMaXN0
KGNvbnN0IFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSkKK3N0YXRpYyBFbGVtZW50KiBlbmNsb3Np
bmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtJiBsaXN0SXRlbSkKIHsKLSAgICBFbGVtZW50JiBs
aXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbS0+ZWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGZpcnN0
Tm9kZSA9IG51bGxwdHI7CisgICAgRWxlbWVudCYgbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW0u
ZWxlbWVudCgpOwogICAgIEVsZW1lbnQqIHBhcmVudCA9IGlzPFBzZXVkb0VsZW1lbnQ+KGxpc3RJ
dGVtRWxlbWVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihsaXN0SXRlbUVsZW1lbnQpLmhv
c3RFbGVtZW50KCkgOiBsaXN0SXRlbUVsZW1lbnQucGFyZW50RWxlbWVudCgpOworICAgIEVsZW1l
bnQqIGZpcnN0Tm9kZSA9IHBhcmVudDsKICAgICAvLyBXZSB1c2UgcGFyZW50Tm9kZSBiZWNhdXNl
IHRoZSBlbmNsb3NpbmcgbGlzdCBjb3VsZCBiZSBhIFNoYWRvd1Jvb3QgdGhhdCdzIG5vdCBFbGVt
ZW50LgogICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChpc0xpc3QocGFyZW50KSkKKyAgICAgICAgaWYgKGlzSFRNTExpc3RF
bGVtZW50KCpwYXJlbnQpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKLSAgICAgICAgaWYg
KCFmaXJzdE5vZGUpCi0gICAgICAgICAgICBmaXJzdE5vZGUgPSBwYXJlbnQ7CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlcmUncyBubyBhY3R1YWwgPHVsPiBvciA8b2w+IGxpc3QgZWxlbWVudCwgdGhl
biB0aGUgZmlyc3QgZm91bmQKQEAgLTEyNSw0MSArMTI0LDQzIEBAIHN0YXRpYyBFbGVtZW50KiBl
bmNsb3NpbmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSkKIH0KIAogLy8gUmV0
dXJucyB0aGUgbmV4dCBsaXN0IGl0ZW0gd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCi1z
dGF0aWMgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50KiBsaXN0Tm9k
ZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBudWxscHRyKQorc3RhdGljIFJlbmRlckxp
c3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUsIGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50ID0gaXRlbSA/ICZpdGVtLT5lbGVtZW50
KCkgOiBsaXN0Tm9kZTsKLSAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1
ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkgewot
ICAgICAgICBpZiAoaXNMaXN0KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBmb3Vu
ZCBhIG5lc3RlZCwgaW5kZXBlbmRlbnQgbGlzdDogbm90aGluZyB0byBkbyBoZXJlLgotICAgICAg
ICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKGN1cnJlbnQsIGxpc3ROb2RlKTsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQq
IG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKCZlbGVtZW50LCAm
bGlzdE5vZGUpOyBuZXh0OyApIHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBuZXh0LT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IGlzSFRNTExpc3RFbGVtZW50KCpuZXh0
KSkgeworICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50IGxp
c3Qgb3IgYW4gdW5yZW5kZXJlZCBFbGVtZW50IDogbm90aGluZyB0byBkbyBoZXJlLgorICAgICAg
ICAgICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGlu
Z0NoaWxkcmVuKG5leHQsICZsaXN0Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpCisgICAgICAg
IGlmIChpczxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpOwogCi0gICAgICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyBiZSBvcHRpbWl6ZWQgdG8gc2tpcCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnRz
IHdpdGhvdXQgYSByZW5kZXJlcj8KLSAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOworICAgICAgICBuZXh0ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhuZXh0LCAmbGlzdE5vZGUpOwog
ICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwogfQogCitzdGF0aWMgaW5saW5lIFJlbmRlckxp
c3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUsIGNvbnN0IFJlbmRl
ckxpc3RJdGVtJiBpdGVtKQoreworICAgIHJldHVybiBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsIGl0
ZW0uZWxlbWVudCgpKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJMaXN0SXRlbSogbmV4dExp
c3RJdGVtKGNvbnN0IEVsZW1lbnQmIGxpc3ROb2RlKQoreworICAgIHJldHVybiBuZXh0TGlzdEl0
ZW0obGlzdE5vZGUsIGxpc3ROb2RlKTsKK30KKwogLy8gUmV0dXJucyB0aGUgcHJldmlvdXMgbGlz
dCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgotc3RhdGljIFJlbmRlckxpc3RJ
dGVtKiBwcmV2aW91c0xpc3RJdGVtKGNvbnN0IEVsZW1lbnQqIGxpc3ROb2RlLCBjb25zdCBSZW5k
ZXJMaXN0SXRlbSogaXRlbSkKK3N0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRl
bShjb25zdCBFbGVtZW50KiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0mIGl0ZW0pCiB7
Ci0gICAgRWxlbWVudCogY3VycmVudCA9ICZpdGVtLT5lbGVtZW50KCk7Ci0gICAgZm9yIChjdXJy
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwg
bGlzdE5vZGUpOyBjdXJyZW50OyBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJ
bmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpKSB7CisgICAgZm9yIChjb25zdCBFbGVt
ZW50KiBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8o
Jml0ZW0uZWxlbWVudCgpLCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSkpIHsKICAg
ICAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBjdXJyZW50LT5yZW5kZXJlcigpOwogICAg
ICAgICBpZiAoIWlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgRWxlbWVudCogb3RoZXJMaXN0ID0gZW5jbG9zaW5nTGlzdChkb3duY2Fz
dDxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpKTsKKyAgICAgICAgRWxlbWVudCogb3RoZXJMaXN0
ID0gZW5jbG9zaW5nTGlzdChkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKSk7CiAg
ICAgICAgIC8vIFRoaXMgaXRlbSBpcyBwYXJ0IG9mIG91ciBjdXJyZW50IGxpc3QsIHNvIGl0J3Mg
d2hhdCB3ZSdyZSBsb29raW5nIGZvci4KICAgICAgICAgaWYgKGxpc3ROb2RlID09IG90aGVyTGlz
dCkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIp
OwpAQCAtMTczLDIxICsxNzQsMTcgQEAgc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0xp
c3RJdGVtKGNvbnN0IEVsZW1lbnQqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXMKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zv
ck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQqIGxpc3ROb2RlKQordm9pZCBSZW5k
ZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlz
dEVsZW1lbnQmIGxpc3ROb2RlKQogewotICAgIEFTU0VSVChsaXN0Tm9kZSk7Ci0KLSAgICBmb3Ig
KFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSk7IGxpc3RJ
dGVtOyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgbGlzdEl0ZW0pKQorICAgIGZv
ciAoUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlKTsgbGlz
dEl0ZW07IGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCAqbGlzdEl0ZW0pKQogICAg
ICAgICBsaXN0SXRlbS0+dXBkYXRlVmFsdWUoKTsKIH0KIAotdW5zaWduZWQgUmVuZGVyTGlzdEl0
ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQqIGxpc3RO
b2RlKQordW5zaWduZWQgUmVuZGVyTGlzdEl0ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNv
bnN0IEhUTUxPTGlzdEVsZW1lbnQmIGxpc3ROb2RlKQogewotICAgIEFTU0VSVChsaXN0Tm9kZSk7
Ci0KICAgICB1bnNpZ25lZCBpdGVtQ291bnQgPSAwOwotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0q
IGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlKTsgbGlzdEl0ZW07IGxpc3RJdGVtID0g
bmV4dExpc3RJdGVtKGxpc3ROb2RlLCBsaXN0SXRlbSkpCi0gICAgICAgIGl0ZW1Db3VudCsrOwor
ICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2Rl
KTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCAqbGlzdEl0ZW0p
KQorICAgICAgICArK2l0ZW1Db3VudDsKIAogICAgIHJldHVybiBpdGVtQ291bnQ7CiB9CkBAIC0x
OTcsMTUgKzE5NCwxNSBAQCBpbmxpbmUgaW50IFJlbmRlckxpc3RJdGVtOjpjYWxjVmFsdWUoKSBj
b25zdAogICAgIGlmIChtX2hhc0V4cGxpY2l0VmFsdWUpCiAgICAgICAgIHJldHVybiBtX2V4cGxp
Y2l0VmFsdWU7CiAKLSAgICBFbGVtZW50KiBsaXN0ID0gZW5jbG9zaW5nTGlzdCh0aGlzKTsKLSAg
ICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdCAmJiBsaXN0LT5oYXNUYWdO
YW1lKG9sVGFnKSkgPyBkb3duY2FzdDxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA6IG51bGxwdHI7
CisgICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QoKnRoaXMpOworICAgIEhUTUxPTGlz
dEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpID8gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOwogICAgIGludCB2YWx1ZVN0
ZXAgPSAxOwogICAgIGlmIChvTGlzdEVsZW1lbnQgJiYgb0xpc3RFbGVtZW50LT5pc1JldmVyc2Vk
KCkpCiAgICAgICAgIHZhbHVlU3RlcCA9IC0xOwogCiAgICAgLy8gRklYTUU6IFRoaXMgcmVjdXJz
ZXMgdG8gYSBwb3NzaWJsZSBkZXB0aCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LgogICAgIC8v
IFRoYXQncyBub3QgZ29vZCAtLSB3ZSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGFuIGl0ZXJhdGl2
ZSBhbGdvcml0aG0uCi0gICAgaWYgKFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0l0ZW0gPSBwcmV2
aW91c0xpc3RJdGVtKGxpc3QsIHRoaXMpKQorICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlv
dXNJdGVtID0gcHJldmlvdXNMaXN0SXRlbShsaXN0LCAqdGhpcykpCiAgICAgICAgIHJldHVybiBw
cmV2aW91c0l0ZW0tPnZhbHVlKCkgKyB2YWx1ZVN0ZXA7CiAKICAgICBpZiAob0xpc3RFbGVtZW50
KQpAQCAtMjI1LDMxICsyMjIsMjYgQEAgYm9vbCBSZW5kZXJMaXN0SXRlbTo6aXNFbXB0eSgpIGNv
bnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpID09IG1fbWFya2VyOwogfQogCi1zdGF0aWMgUmVu
ZGVyQmxvY2sqIGdldFBhcmVudE9mRmlyc3RMaW5lQm94KFJlbmRlckJsb2NrKiBjdXJyLCBSZW5k
ZXJPYmplY3QqIG1hcmtlcikKK3N0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJzdExp
bmVCb3goUmVuZGVyQmxvY2smIGN1cnJlbnQsIFJlbmRlck9iamVjdCYgbWFya2VyKQogewotICAg
IFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IGN1cnItPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAo
IWZpcnN0Q2hpbGQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCBpblF1aXJrc01vZGUg
PSBjdXJyLT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyQ2hpbGQgPSBmaXJzdENoaWxkOyBjdXJyQ2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VyckNoaWxkID09IG1hcmtlcikKKyAg
ICBib29sIGluUXVpcmtzTW9kZSA9IGN1cnJlbnQuZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKTsK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkID09
ICZtYXJrZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY3VyckNoaWxk
LT5pc0lubGluZSgpICYmICghaXM8UmVuZGVySW5saW5lPigqY3VyckNoaWxkKSB8fCBjdXJyLT5n
ZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChjdXJyQ2hpbGQpKSkKLSAgICAgICAgICAg
IHJldHVybiBjdXJyOworICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkgJiYgKCFpczxSZW5k
ZXJJbmxpbmU+KCpjaGlsZCkgfHwgY3VycmVudC5nZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVD
aGlsZChjaGlsZCkpKQorICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OwogCi0gICAgICAgIGlm
IChjdXJyQ2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjdXJyQ2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQorICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjaGlsZC0+aXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
Y3VyckNoaWxkLT5pc1RhYmxlKCkgfHwgIWlzPFJlbmRlckJsb2NrPigqY3VyckNoaWxkKSB8fCAo
aXM8UmVuZGVyQm94PigqY3VyckNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyQ2hp
bGQpLmlzV3JpdGluZ01vZGVSb290KCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGU+KCpj
aGlsZCkgfHwgIWlzPFJlbmRlckJsb2NrPigqY2hpbGQpIHx8IChpczxSZW5kZXJCb3g+KCpjaGls
ZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmlzV3JpdGluZ01vZGVSb290KCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKGN1cnItPmlzTGlzdEl0ZW0oKSAmJiBp
blF1aXJrc01vZGUgJiYgY3VyckNoaWxkLT5ub2RlKCkgJiYKLSAgICAgICAgICAgIChpczxIVE1M
VUxpc3RFbGVtZW50PigqY3VyckNoaWxkLT5ub2RlKCkpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+
KCpjdXJyQ2hpbGQtPm5vZGUoKSkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KGN1
cnJlbnQpICYmIGluUXVpcmtzTW9kZSAmJiBjaGlsZC0+bm9kZSgpICYmIGlzSFRNTExpc3RFbGVt
ZW50KCpjaGlsZC0+bm9kZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChS
ZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJl
bmRlckJsb2NrPihjdXJyQ2hpbGQpLCBtYXJrZXIpKQorICAgICAgICBpZiAoUmVuZGVyQmxvY2sq
IGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmNoaWxkKSwgbWFya2VyKSkKICAgICAgICAgICAgIHJldHVybiBsaW5lQm94OwogICAgIH0KIApA
QCAtMjY1LDEyICsyNTcsMTIgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlVmFsdWUoKQog
ICAgIH0KIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5k
ZXJCbG9jayogcGFyZW50KQorc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGls
ZChSZW5kZXJCbG9jayYgcGFyZW50KQogewotICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gcGFy
ZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKHJlc3VsdCAmJiByZXN1bHQtPmlzTGlzdE1h
cmtlcigpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5leHRTaWJsaW5nKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcGFyZW50LmZpcnN0Q2hpbGQo
KTsKKyAgICB3aGlsZSAoaXM8UmVuZGVyTGlzdE1hcmtlcj4oY2hpbGQpKQorICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgIHJldHVybiBjaGlsZDsKIH0KIAogdm9pZCBS
ZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCkBAIC0y
ODAsNyArMjcyLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVu
ZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckVsZW1lbnQqIGN1
cnJlbnRQYXJlbnQgPSBtX21hcmtlci0+cGFyZW50KCk7Ci0gICAgUmVuZGVyQmxvY2sqIG5ld1Bh
cmVudCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KHRoaXMsIG1fbWFya2VyKTsKKyAgICBSZW5k
ZXJCbG9jayogbmV3UGFyZW50ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goKnRoaXMsICptX21h
cmtlcik7CiAgICAgaWYgKCFuZXdQYXJlbnQpIHsKICAgICAgICAgLy8gSWYgdGhlIG1hcmtlciBp
cyBjdXJyZW50bHkgY29udGFpbmVkIGluc2lkZSBhbiBhbm9ueW1vdXMgYm94LAogICAgICAgICAv
LyB0aGVuIHdlIGFyZSB0aGUgb25seSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ug
bm8gbGluZSBib3gKQEAgLTI5OSw3ICsyOTEsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjppbnNl
cnRPck1vdmVNYXJrZXJSZW5kZXJlcklmTmVlZGVkKCkKICAgICAgICAgLy8gY29udGFpbmVycyBv
dGhlciB0aGFuIG91cnNlbHZlcywgc28gd2UgbmVlZCB0byBkaXNhYmxlIExheW91dFN0YXRlLgog
ICAgICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIoJnZpZXcoKSk7
CiAgICAgICAgIG1fbWFya2VyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgICAgIG5ld1BhcmVu
dC0+YWRkQ2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9uTWFya2VyQ2hpbGQobmV3UGFyZW50KSk7Cisg
ICAgICAgIG5ld1BhcmVudC0+YWRkQ2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9uTWFya2VyQ2hpbGQo
Km5ld1BhcmVudCkpOwogICAgICAgICBtX21hcmtlci0+dXBkYXRlTWFyZ2luc0FuZENvbnRlbnQo
KTsKICAgICAgICAgLy8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRo
YXQgaGFzIGxvc3QgYWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1
cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJy
ZW50UGFyZW50LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVu
dFBhcmVudCkuY29udGludWF0aW9uKCkpCkBAIC00NTYsNiArNDQ4LDcgQEAgU3RyaW5nIFJlbmRl
ckxpc3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1ZmZpeCgpIGNvbnN0CiAgICAgY29uc3QgU3RyaW5n
JiBtYXJrZXJUZXh0ID0gbV9tYXJrZXItPnRleHQoKTsKICAgICBjb25zdCBTdHJpbmcgbWFya2Vy
U3VmZml4ID0gbV9tYXJrZXItPnN1ZmZpeCgpOwogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owor
ICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobWFya2VyVGV4dC5sZW5ndGgoKSArIG1hcmtlclN1
ZmZpeC5sZW5ndGgoKSk7CiAKICAgICBpZiAoIW1fbWFya2VyLT5zdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwpAQCAt
NDcyLDggKzQ2NSwxMiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdl
ZCgpCiB7CiAgICAgaWYgKG1fbWFya2VyKQogICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3Np
bmdMaXN0KHRoaXMpOwotICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSB0aGlzOyBpdGVt
OyBpdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCBpdGVtKSkKKworICAgIHVwZGF0ZVZhbHVl
KCk7CisgICAgRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsKKyAgICBp
ZiAoIWxpc3ROb2RlKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSog
aXRlbSA9IG5leHRMaXN0SXRlbSgqbGlzdE5vZGUsICp0aGlzKTsgaXRlbTsgaXRlbSA9IG5leHRM
aXN0SXRlbSgqbGlzdE5vZGUsICppdGVtKSkKICAgICAgICAgaXRlbS0+dXBkYXRlVmFsdWUoKTsK
IH0KIApAQCAtNDk2LDI1ICs0OTMsMzMgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2xlYXJFeHBs
aWNpdFZhbHVlKCkKICAgICBleHBsaWNpdFZhbHVlQ2hhbmdlZCgpOwogfQogCi1zdGF0aWMgUmVu
ZGVyTGlzdEl0ZW0qIHByZXZpb3VzT3JOZXh0SXRlbShib29sIGlzTGlzdFJldmVyc2VkLCBFbGVt
ZW50KiBsaXN0LCBSZW5kZXJMaXN0SXRlbSogaXRlbSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIFJl
bmRlckxpc3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgRWxl
bWVudCYgbGlzdCwgUmVuZGVyTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAgcmV0dXJuIGlzTGlzdFJl
dmVyc2VkID8gcHJldmlvdXNMaXN0SXRlbShsaXN0LCBpdGVtKSA6IG5leHRMaXN0SXRlbShsaXN0
LCBpdGVtKTsKKyAgICByZXR1cm4gaXNMaXN0UmV2ZXJzZWQgPyBwcmV2aW91c0xpc3RJdGVtKCZs
aXN0LCBpdGVtKSA6IG5leHRMaXN0SXRlbShsaXN0LCBpdGVtKTsKIH0KIAogdm9pZCBSZW5kZXJM
aXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKQogewotICAgIEVsZW1lbnQqIGxpc3RO
b2RlID0gZW5jbG9zaW5nTGlzdCh0aGlzKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xv
c2luZ0xpc3QoKnRoaXMpOwogICAgIC8vIFRoZSBsaXN0IG5vZGUgY2FuIGJlIHRoZSBzaGFkb3cg
cm9vdCB3aGljaCBoYXMgbm8gcmVuZGVyZXIuCiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYm9vbCBpc0xpc3RSZXZlcnNlZCA9IGZhbHNlOwotICAgIEhUTUxPTGlz
dEVsZW1lbnQqIG9MaXN0RWxlbWVudCA9IChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFt
ZShvbFRhZykpID8gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdE5vZGUpIDogbnVsbHB0
cjsKLSAgICBpZiAob0xpc3RFbGVtZW50KSB7Ci0gICAgICAgIG9MaXN0RWxlbWVudC0+aXRlbUNv
dW50Q2hhbmdlZCgpOwotICAgICAgICBpc0xpc3RSZXZlcnNlZCA9IG9MaXN0RWxlbWVudC0+aXNS
ZXZlcnNlZCgpOworICAgIGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqbGlzdE5vZGUpKSB7Cisg
ICAgICAgIEhUTUxPTGlzdEVsZW1lbnQmIG9MaXN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxPTGlz
dEVsZW1lbnQ+KCpsaXN0Tm9kZSk7CisgICAgICAgIG9MaXN0RWxlbWVudC5pdGVtQ291bnRDaGFu
Z2VkKCk7CisgICAgICAgIGlmIChvTGlzdEVsZW1lbnQuaXNSZXZlcnNlZCgpKSB7CisgICAgICAg
ICAgICB1cGRhdGVMaXN0TWFya2VyTnVtYmVyc0ludGVybmFsPExpc3RJc1JldmVyc2VkPigqbGlz
dE5vZGUsICp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlzdFJl
dmVyc2VkLCBsaXN0Tm9kZSwgdGhpcyk7IGl0ZW07IGl0ZW0gPSBwcmV2aW91c09yTmV4dEl0ZW0o
aXNMaXN0UmV2ZXJzZWQsIGxpc3ROb2RlLCBpdGVtKSkgeworICAgIHVwZGF0ZUxpc3RNYXJrZXJO
dW1iZXJzSW50ZXJuYWw8TGlzdElzTm90UmV2ZXJzZWQ+KCpsaXN0Tm9kZSwgKnRoaXMpOworfQor
Cit0ZW1wbGF0ZSA8UmVuZGVyTGlzdEl0ZW06Okxpc3RJc1JldmVyc2VkT3JOb3QgaXNMaXN0UmV2
ZXJzZWQ+CitpbmxpbmUgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJl
cnNJbnRlcm5hbChFbGVtZW50JiBsaXN0Tm9kZSwgUmVuZGVyTGlzdEl0ZW0mIGZpcnN0SXRlbSkK
K3sKKyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlz
TGlzdFJldmVyc2VkLCBsaXN0Tm9kZSwgZmlyc3RJdGVtKTsgaXRlbTsgaXRlbSA9IHByZXZpb3Vz
T3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgbGlzdE5vZGUsICppdGVtKSkgewogICAgICAgICBp
ZiAoIWl0ZW0tPm1faXNWYWx1ZVVwVG9EYXRlKSB7CiAgICAgICAgICAgICAvLyBJZiBhbiBpdGVt
IGhhcyBiZWVuIG1hcmtlZCBmb3IgdXBkYXRlIGJlZm9yZSwgd2UgY2FuIHNhZmVseQogICAgICAg
ICAgICAgLy8gYXNzdW1lIHRoYXQgYWxsIHRoZSBmb2xsb3dpbmcgb25lcyBoYXZlIHRvby4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKaW5kZXggMjU2ZDYyOS4uNzZl
YzFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKQEAgLTUz
LDggKzUzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVMaXN0TWFya2VyTnVtYmVycygp
OwogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KGNvbnN0
IEhUTUxPTGlzdEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaXRlbUNvdW50Rm9yT3Jk
ZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50Jik7CisgICAg
c3RhdGljIHVuc2lnbmVkIGl0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVs
ZW1lbnQmKTsKIAogICAgIHZvaWQgZGlkRGVzdHJveUxpc3RNYXJrZXIoKSB7IG1fbWFya2VyID0g
bnVsbHB0cjsgfQogCkBAIC04NSw2ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVW
YWx1ZU5vdygpIGNvbnN0OwogICAgIHZvaWQgZXhwbGljaXRWYWx1ZUNoYW5nZWQoKTsKIAorICAg
IGVudW0gTGlzdElzUmV2ZXJzZWRPck5vdCB7IExpc3RJc05vdFJldmVyc2VkLCBMaXN0SXNSZXZl
cnNlZCB9OworICAgIHRlbXBsYXRlIDxMaXN0SXNSZXZlcnNlZE9yTm90PiB2b2lkIHVwZGF0ZUxp
c3RNYXJrZXJOdW1iZXJzSW50ZXJuYWwoRWxlbWVudCYgbGlzdE5vZGUsIFJlbmRlckxpc3RJdGVt
JiBmaXJzdEl0ZW0pOworCiAgICAgaW50IG1fZXhwbGljaXRWYWx1ZTsKICAgICBSZW5kZXJMaXN0
TWFya2VyKiBtX21hcmtlcjsKICAgICBtdXRhYmxlIGludCBtX3ZhbHVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241389</attachid>
            <date>2014-11-11 16:12:50 -0800</date>
            <delta_ts>2014-11-12 10:20:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138601-20141111161254.patch</filename>
            <type>text/plain</type>
            <size>20682</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1OTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmMwNTA3ZmY1ZTg2ZWU4
OGViMDM4M2Q2ZjZjNWQ4NDI0OTFhZjk0NC4uMGNkNWRlODVlNmY0NWFjNzIzZDZjOThlMTMzZTAz
OTVlMDAyMjJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0xMS0xMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1pbm9yIGltcHJvdmVtZW50
cyB0byBSZW5kZXJMaXN0SXRlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM4NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBzZXZlcmFsIG1pbm9yIGltcHJvdmVtZW50cyB0byBSZW5kZXJMaXN0
SXRlbSBhbmQgY2xlYW4gdXAgdGhlCisgICAgICAgIGNvZGUgYSBiaXQuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1MTGlzdEVsZW1lbnQpOgor
ICAgICAgICAtIFJlbmFtZSBpc0xpc3QgdG8gaXNIVE1MTGlzdEVsZW1lbnQoKSBmb3IgY2xhcml0
eSBhcyBpdCBjaGVja3MKKyAgICAgICAgICBmb3IgSFRNTE9MaXN0RWxlbWVudCBhbmQgSFRNTFVM
aXN0RWxlbWVudCB0eXBlcworICAgICAgICAtIElubGluZSB0aGUgZnVuY3Rpb24gYXMgaXQgaXMg
c2hvcnQuCisgICAgICAgIC0gVXNlIGlzPEhUTUwqRWxlbWVudD4oKSBmb3IgdHlwZSBjaGVja2lu
ZworICAgICAgICAtIFVwZGF0ZSB0aGUgYXJndW1lbnQgdG8gdGFrZSBhIE5vZGUmIGluc3RlYWQg
b2YgYW4gRWxlbWVudCouIFRoaXMKKyAgICAgICAgICBpcyBiZWNhdXNlIHRoZSBhcmd1bWVudCBp
cyBleHBlY3RlZCB0byB0aGUgbm9uLW51bGwuIEFsc28gdXNpbmcKKyAgICAgICAgICBsb29zZXIg
dHlwaW5nIGhlcmUgYWxsb3dzIHVzIHRvIHVzZSB0aGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgb25l
CisgICAgICAgICAgbW9yZSBwbGFjZSwgd2l0aG91dCBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYXMK
KyAgICAgICAgICBoYXNUYWdOYW1lKEhUTUxRdWFsaWZpZWROYW1lKSBpcyBkZWZpbmVkIG9uIE5v
ZGUuCisKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3QpOgorICAgICAgICAtIFBhc3Mg
dGhlIGFyZ3VtZW50IGFzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIGFzIGl0IGlz
CisgICAgICAgICAgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisgICAgICAgIC0gSW5pdGlhbGl6
ZSBmaXJzdE5vZGUgYmVmb3JlIHRoZSBsb29wIHRvIGF2b2lkIHRoZSBpZiAoIWZpcnN0Tm9kZSkK
KyAgICAgICAgICBjaGVjayBmb3IgZXZlcnkgaXRlcmF0aW9uLgorCisgICAgICAgIChXZWJDb3Jl
OjpuZXh0TGlzdEl0ZW0pOgorICAgICAgICAtIFRha2UgYW4gRWxlbWVudCBhcyBzZWNvbmQgYXJn
dW1lbnQgaW5zdGVhZCBvZiBhIFJlbmRlckxpc3RJdGVtKgorICAgICAgICAgIGFuZCBwcm92aWRl
IGNvbnZlbmllbmNlIG92ZXJsb2FkcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8KKyAgICAg
ICAgICBudWxsIGNoZWNrcyBqdXN0IGJlY2F1c2Ugc29tZSBjYWxscyBzaXRlcyBjYWxsIHRoaXMg
ZnVuY3Rpb24KKyAgICAgICAgICB3aXRoIDIgYXJndW1lbnRzIGFuZCBvdGhlcnMgd2l0aCAxIGFy
Z3VtZW50LiBUaGlzIHdheSwgd2UgYXZvaWQKKyAgICAgICAgICB1bm5lY2Vzc2FyeSBudWxsIGNo
ZWNrcyBhcyBtb3N0IGNhbGwgc2l0ZXMgYWxyZWFkeSBkbyBzdWNoCisgICAgICAgICAgY2hlY2tz
IChvciBoYXZlIHJlZmVyZW5jZXMpLgorICAgICAgICAtIFRyYW5zZm9ybSB0aGUgd2hpbGUgbG9v
cCBpbnRvIGEgZm9yIGxvb3AgZm9yIGNsYXJpdHkuCisgICAgICAgIC0gRG9uJ3QgdHJhdmVyc2Ug
YW4gRWxlbWVudCdzIHN1YnRyZWUgaWYgdGhlIEVsZW1lbnQgZG9lcyBub3QgaGF2ZQorICAgICAg
ICAgIGEgcmVuZGVyZXIgYXMgaXQgaXMgaW1wb3NzaWJsZSBvZiBhbnkgb2YgaXRzIGRlc2NlbmRh
bnQgdG8gaGF2ZQorICAgICAgICAgIGEgcmVuZGVyZXIgKGFuZCB3ZSBhcmUgbG9va2luZyBmb3Ig
YSBzcGVjaWZpYyB0eXBlIG9mIHJlbmRlcmVyKS4KKworICAgICAgICAoV2ViQ29yZTo6cHJldmlv
dXNMaXN0SXRlbSk6CisgICAgICAgIC0gUGFzcyB0aGUgaXRlbSBhcmd1bWVudCBhcyBhIHJlZmVy
ZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciBhcyBpdAorICAgICAgICAgIGlzIGV4cGVjdGVkIHRv
IGJlIG5vbi1udWxsLgorICAgICAgICAtIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIHxjdXJyZW50
fCBzbyB0aGF0IGl0IGlzIG5vdyBkZWNsYXJlZAorICAgICAgICAgIGluc2lkZSB0aGUgbG9vcC4K
KworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JP
cmRlcmVkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50
Rm9yT3JkZXJlZExpc3QpOgorICAgICAgICAtIFBhc3MgYXJndW1lbnQgYXMgYSByZWZlcmVuY2Ug
aW5zdGVhZCBvZiBhIHBvaW50ZXIgYXMgaXQgd2FzIGV4cGVjdGVkCisgICAgICAgICAgdG8gYmUg
bm9uLW51bGwgKFRoZXJlIHdhcyBhbiBhc3NlcnRpb24gaW4gcGxhY2UgdG8gbWFrZSBzdXJlIG9m
IGl0KS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmNhbGNWYWx1ZSk6Cisg
ICAgICAgIC0gVXNlIGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCkgaW5zdGVhZCBvZiBoYXNUYWdOYW1l
KCkuCisKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhcmVudE9mRmlyc3RMaW5lQm94KToKKyAgICAg
ICAgLSBSZW5hbWUgdmFyaWFibGVzIHRvIHN0b3AgdXNpbmcgYWJicmV2aWF0aW9ucy4KKyAgICAg
ICAgLSBQYXNzIGFyZ3VtZW50cyBhcyByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgYXMg
dGhleSBhcmUgZXhwZWN0ZWQKKyAgICAgICAgICB0byBiZSBub24tbnVsbC4KKyAgICAgICAgLSBS
ZW1vdmUgdGhlIGZpcnN0Q2hpbGQgbnVsbCBjaGVjayBiZWZvcmUgdGhlIGxvb3AgYXMgaXQgZG9l
cyBub3QKKyAgICAgICAgICBjaGFuZ2UgYmVoYXZpb3IuIFRoZSBsb29wIHdpbGwgYWJvcnQgZWFy
bHkgaWYgZmlyc3RDaGlsZCBpcyBudWxsCisgICAgICAgICAgYW5kIHdlIHdpbGwgZW5kIHVwIHJl
dHVybmluZyBudWxscHRyIGFzIHdlbGwuCisgICAgICAgIC0gVXNlIGlzPD4oKSBtb3JlIGZvciB0
eXBlIGNoZWNraW5nLgorICAgICAgICAtIFJldXNlIHRoZSBpc0hUTUxMaXN0RWxlbWVudCgpIHV0
aWxpdHkgZnVuY3Rpb24gaW5zdGVhZCBvZiBkdXBsaWNhdGluZworICAgICAgICAgIGl0cyBjb2Rl
IGluc2lkZSB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpmaXJzdE5vbk1hcmtl
ckNoaWxkKToKKyAgICAgICAgLSBQYXNzIGFyZ3VtZW50IGFzIGEgcmVmZXJlbmNlIGFzIGl0IGlz
IGV4cGVjdGVkIHRvIGJlIG5vbi1udWxsLgorICAgICAgICAtIFJlbmFtZSB2YXJpYWJsZSBmcm9t
IHJlc3VsdCB0byBjaGlsZCBmb3IgY2xhcml0eSwgYXMgd2UgYXJlIHRyYXZlcnNpbmcKKyAgICAg
ICAgICB0aGUgY2hpbGRyZW4uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpt
YXJrZXJUZXh0V2l0aFN1ZmZpeCk6CisgICAgICAgIC0gQ2FsbCBTdHJpbmdCdWlsZGVyOjpyZXN1
bHQucmVzZXJ2ZUNhcGFjaXR5KCkgZm9yIHBlcmZvcm1hbmNlIGFzIHdlCisgICAgICAgICAga25v
dyBmcm9tIHRoZSBzdGFydCBob3cgbWFueSBjaGFyYWN0ZXJzIHdlIGFyZSBnb2luZyB0byBhcHBl
bmQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hh
bmdlZCk6CisgICAgICAgIC0gUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQgdG8gZG8gdGhlIHxs
aXN0Tm9kZXwgbnVsbCBjaGVjayBiZWZvcmUgdGhlCisgICAgICAgICAgbG9vcCwgbm93IHRoYXQg
bmV4dExpc3RJdGVtKCkgdGFrZXMgYSByZWZlcmVuY2UgaW4gYXJndW1lbnQuIFRoaXMgaXMKKyAg
ICAgICAgICB0aGUgb25seSBjYWxsIHNpdGUgd2hlcmUgd2UgZGlkbid0IGFscmVhZHkga25vdyB0
aGF0IGxpc3ROb2RlIGlzCisgICAgICAgICAgbm9uLW51bGwuCisKKyAgICAgICAgKFdlYkNvcmU6
OnByZXZpb3VzT3JOZXh0SXRlbSk6CisgICAgICAgIC0gTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24g
aXMgaW5saW5lZCBhcyBpdCBpcyBzaG9ydCwgdXNlZCBvbmx5IGluIG9uZQorICAgICAgICAgIHBs
YWNlIHRoYXQgaXMgYSB0ZW1wbGF0ZWQgZnVuY3Rpb24uIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRo
ZQorICAgICAgICAgIGlzTGlzdFJldmVyc2VkIGNoZWNrIGlzIHJlc29sdmVkIGF0IGNvbXBpbGUt
dGltZSB3aGVuIGluc3RhbnRpYXRpbmcKKyAgICAgICAgICB0aGUgZnVuY3Rpb24gdGVtcGxhdGUg
c28gdGhhdCB3ZSBubyBsb25nZXIgZG8gdGhpcyBjaGVjayBmb3IgZXZlcnkKKyAgICAgICAgICBs
b29wIGl0ZXJhdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0
ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgLSBNb3ZlIHRoZSBsb29wIHRvIGEgbmV3IHVw
ZGF0ZUxpc3RNYXJrZXJOdW1iZXJzSW50ZXJuYWw8aXNSZXZlcnNlZD4oKQorICAgICAgICAgIHRl
bXBsYXRlZCBmdW5jdGlvbiBzbyB0aGF0IHdlIGRvIHRoZSBpc0xpc3RSZXZlcnNlZCBjaGVjayBv
bmNlCisgICAgICAgICAgaW5zdGVhZCBvZiBvbmNlIHBlciBsb29wIGl0ZXJhdGlvbi4KKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzSW50
ZXJuYWwpOgorICAgICAgICAtIE1vdmVkIGZyb20gdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKS4K
KwogMjAxNC0xMS0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZCBpT1MgYnVpbGQgZml4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T0xpc3RFbGVtZW50LmNwcAppbmRleCA5YjZhNTA4NGI1NWE4NDRjMTk1NDhhMWI3Y2UxYWMwYTVj
MTUzM2U4Li42ZjBjZTk4YTgzMjFkZmExMDYzZjY4OTVkOGVmMzMzNTM3YjNiNzY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKQEAgLTEwNiwxMiArMTA2LDEyIEBA
IHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXJ0KQogCiB2b2lkIEhUTUxP
TGlzdEVsZW1lbnQ6OnVwZGF0ZUl0ZW1WYWx1ZXMoKQogewotICAgIFJlbmRlckxpc3RJdGVtOjp1
cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3QodGhpcyk7CisgICAgUmVuZGVyTGlzdEl0ZW06
OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdCgqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTE9M
aXN0RWxlbWVudDo6cmVjYWxjdWxhdGVJdGVtQ291bnQoKQogewotICAgIG1faXRlbUNvdW50ID0g
UmVuZGVyTGlzdEl0ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KHRoaXMpOworICAgIG1faXRl
bUNvdW50ID0gUmVuZGVyTGlzdEl0ZW06Oml0ZW1Db3VudEZvck9yZGVyZWRMaXN0KCp0aGlzKTsK
ICAgICBtX3Nob3VsZFJlY2FsY3VsYXRlSXRlbUNvdW50ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCmluZGV4IGMwMzI1MGM0N2IxNjg5
NDdmNmU0MjkyZGEzYTkzMWE2ZmQ0YTg1N2UuLmRmNjFiMTNkYzlmNGRlZWM1YzcxYWZlNmJiNTJk
Mjc4ZTg4N2Q4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tT
dGF0cy5oPgpAQCAtOTksMjMgKzEwMCwyMSBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKQogICAgIHVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKCk7CiB9CiAKLXN0
YXRpYyBib29sIGlzTGlzdChjb25zdCBFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBi
b29sIGlzSFRNTExpc3RFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQtPmhhc1RhZ05hbWUodWxUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2xUYWcpOwor
ICAgIHJldHVybiBpczxIVE1MVUxpc3RFbGVtZW50Pihub2RlKSB8fCBpczxIVE1MT0xpc3RFbGVt
ZW50Pihub2RlKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGxpc3Qgd2l0aCByZXNw
ZWN0IHRvIHRoZSBET00gb3JkZXIuCi1zdGF0aWMgRWxlbWVudCogZW5jbG9zaW5nTGlzdChjb25z
dCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pCitzdGF0aWMgRWxlbWVudCogZW5jbG9zaW5nTGlz
dChjb25zdCBSZW5kZXJMaXN0SXRlbSYgbGlzdEl0ZW0pCiB7Ci0gICAgRWxlbWVudCYgbGlzdEl0
ZW1FbGVtZW50ID0gbGlzdEl0ZW0tPmVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBmaXJzdE5vZGUg
PSBudWxscHRyOworICAgIEVsZW1lbnQmIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtLmVsZW1l
bnQoKTsKICAgICBFbGVtZW50KiBwYXJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PihsaXN0SXRlbUVs
ZW1lbnQpID8gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4obGlzdEl0ZW1FbGVtZW50KS5ob3N0RWxl
bWVudCgpIDogbGlzdEl0ZW1FbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBm
aXJzdE5vZGUgPSBwYXJlbnQ7CiAgICAgLy8gV2UgdXNlIHBhcmVudE5vZGUgYmVjYXVzZSB0aGUg
ZW5jbG9zaW5nIGxpc3QgY291bGQgYmUgYSBTaGFkb3dSb290IHRoYXQncyBub3QgRWxlbWVudC4K
ICAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgewot
ICAgICAgICBpZiAoaXNMaXN0KHBhcmVudCkpCisgICAgICAgIGlmIChpc0hUTUxMaXN0RWxlbWVu
dCgqcGFyZW50KSkKICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgICAgIGlmICghZmly
c3ROb2RlKQotICAgICAgICAgICAgZmlyc3ROb2RlID0gcGFyZW50OwogICAgIH0KIAogICAgIC8v
IElmIHRoZXJlJ3Mgbm8gYWN0dWFsIDx1bD4gb3IgPG9sPiBsaXN0IGVsZW1lbnQsIHRoZW4gdGhl
IGZpcnN0IGZvdW5kCkBAIC0xMjUsNDEgKzEyNCw0MyBAQCBzdGF0aWMgRWxlbWVudCogZW5jbG9z
aW5nTGlzdChjb25zdCBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0pCiB9CiAKIC8vIFJldHVybnMg
dGhlIG5leHQgbGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgotc3RhdGlj
IFJlbmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNv
bnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtID0gbnVsbHB0cikKK3N0YXRpYyBSZW5kZXJMaXN0SXRl
bSogbmV4dExpc3RJdGVtKGNvbnN0IEVsZW1lbnQmIGxpc3ROb2RlLCBjb25zdCBFbGVtZW50JiBl
bGVtZW50KQogewotICAgIGlmICghbGlzdE5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgY29uc3QgRWxlbWVudCogY3VycmVudCA9IGl0ZW0gPyAmaXRlbS0+ZWxlbWVudCgpIDog
bGlzdE5vZGU7Ci0gICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQ
c2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpOwotCi0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAg
ICAgaWYgKGlzTGlzdChjdXJyZW50KSkgewotICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBu
ZXN0ZWQsIGluZGVwZW5kZW50IGxpc3Q6IG5vdGhpbmcgdG8gZG8gaGVyZS4KLSAgICAgICAgICAg
IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdD
aGlsZHJlbihjdXJyZW50LCBsaXN0Tm9kZSk7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBuZXh0
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbygmZWxlbWVudCwgJmxpc3RO
b2RlKTsgbmV4dDsgKSB7CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gbmV4dC0+cmVuZGVyZXIo
KTsKKyAgICAgICAgaWYgKCFyZW5kZXJlciB8fCBpc0hUTUxMaXN0RWxlbWVudCgqbmV4dCkpIHsK
KyAgICAgICAgICAgIC8vIFdlJ3ZlIGZvdW5kIGEgbmVzdGVkLCBpbmRlcGVuZGVudCBsaXN0IG9y
IGFuIHVucmVuZGVyZWQgRWxlbWVudCA6IG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAgICAgICAg
IG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGls
ZHJlbihuZXh0LCAmbGlzdE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IAotICAgICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGN1cnJlbnQtPnJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpKQorICAgICAgICBpZiAo
aXM8UmVuZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKTsKIAotICAgICAgICAvLyBGSVhNRTogQ2FuIHRo
aXMgYmUgb3B0aW1pemVkIHRvIHNraXAgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50cyB3aXRo
b3V0IGEgcmVuZGVyZXI/Ci0gICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
SW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKTsKKyAgICAgICAgbmV4dCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8obmV4dCwgJmxpc3ROb2RlKTsKICAgICB9
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3RhdGljIGlubGluZSBSZW5kZXJMaXN0SXRl
bSogbmV4dExpc3RJdGVtKGNvbnN0IEVsZW1lbnQmIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0
SXRlbSYgaXRlbSkKK3sKKyAgICByZXR1cm4gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCBpdGVtLmVs
ZW1lbnQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRl
bShjb25zdCBFbGVtZW50JiBsaXN0Tm9kZSkKK3sKKyAgICByZXR1cm4gbmV4dExpc3RJdGVtKGxp
c3ROb2RlLCBsaXN0Tm9kZSk7Cit9CisKIC8vIFJldHVybnMgdGhlIHByZXZpb3VzIGxpc3QgaXRl
bSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSog
cHJldmlvdXNMaXN0SXRlbShjb25zdCBFbGVtZW50KiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlz
dEl0ZW0qIGl0ZW0pCitzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0oY29u
c3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpc3RJdGVtJiBpdGVtKQogewotICAg
IEVsZW1lbnQqIGN1cnJlbnQgPSAmaXRlbS0+ZWxlbWVudCgpOwotICAgIGZvciAoY3VycmVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3RO
b2RlKTsgY3VycmVudDsgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVk
aW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKSkgeworICAgIGZvciAoY29uc3QgRWxlbWVudCog
Y3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKCZpdGVt
LmVsZW1lbnQoKSwgbGlzdE5vZGUpOyBjdXJyZW50OyBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgbGlzdE5vZGUpKSB7CiAgICAgICAg
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gY3VycmVudC0+cmVuZGVyZXIoKTsKICAgICAgICAg
aWYgKCFpczxSZW5kZXJMaXN0SXRlbT4ocmVuZGVyZXIpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIEVsZW1lbnQqIG90aGVyTGlzdCA9IGVuY2xvc2luZ0xpc3QoZG93bmNhc3Q8UmVu
ZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSk7CisgICAgICAgIEVsZW1lbnQqIG90aGVyTGlzdCA9IGVu
Y2xvc2luZ0xpc3QoZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcikpOwogICAgICAg
ICAvLyBUaGlzIGl0ZW0gaXMgcGFydCBvZiBvdXIgY3VycmVudCBsaXN0LCBzbyBpdCdzIHdoYXQg
d2UncmUgbG9va2luZyBmb3IuCiAgICAgICAgIGlmIChsaXN0Tm9kZSA9PSBvdGhlckxpc3QpCiAg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKTsKQEAg
LTE3MywyMSArMTc0LDE3IEBAIHN0YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRl
bShjb25zdCBFbGVtZW50KiBsaXN0Tm9kZSwgY29uc3QgUmVuZGVyTGlzCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRl
cmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50KiBsaXN0Tm9kZSkKK3ZvaWQgUmVuZGVyTGlz
dEl0ZW06OnVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVt
ZW50JiBsaXN0Tm9kZSkKIHsKLSAgICBBU1NFUlQobGlzdE5vZGUpOwotCi0gICAgZm9yIChSZW5k
ZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUpOyBsaXN0SXRlbTsg
bGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsIGxpc3RJdGVtKSkKKyAgICBmb3IgKFJl
bmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSk7IGxpc3RJdGVt
OyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgKmxpc3RJdGVtKSkKICAgICAgICAg
bGlzdEl0ZW0tPnVwZGF0ZVZhbHVlKCk7CiB9CiAKLXVuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjpp
dGVtQ291bnRGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50KiBsaXN0Tm9kZSkK
K3Vuc2lnbmVkIFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVkTGlzdChjb25zdCBI
VE1MT0xpc3RFbGVtZW50JiBsaXN0Tm9kZSkKIHsKLSAgICBBU1NFUlQobGlzdE5vZGUpOwotCiAg
ICAgdW5zaWduZWQgaXRlbUNvdW50ID0gMDsKLSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0
SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IG5leHRM
aXN0SXRlbShsaXN0Tm9kZSwgbGlzdEl0ZW0pKQotICAgICAgICBpdGVtQ291bnQrKzsKKyAgICBm
b3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSk7IGxp
c3RJdGVtOyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgKmxpc3RJdGVtKSkKKyAg
ICAgICAgKytpdGVtQ291bnQ7CiAKICAgICByZXR1cm4gaXRlbUNvdW50OwogfQpAQCAtMTk3LDE1
ICsxOTQsMTUgQEAgaW5saW5lIGludCBSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKCkgY29uc3QK
ICAgICBpZiAobV9oYXNFeHBsaWNpdFZhbHVlKQogICAgICAgICByZXR1cm4gbV9leHBsaWNpdFZh
bHVlOwogCi0gICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3QodGhpcyk7Ci0gICAgSFRN
TE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlzdC0+aGFzVGFnTmFtZShv
bFRhZykpID8gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkgOiBudWxscHRyOworICAg
IEVsZW1lbnQqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsKKyAgICBIVE1MT0xpc3RFbGVt
ZW50KiBvTGlzdEVsZW1lbnQgPSBpczxIVE1MT0xpc3RFbGVtZW50PihsaXN0KSA/IGRvd25jYXN0
PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpIDogbnVsbHB0cjsKICAgICBpbnQgdmFsdWVTdGVwID0g
MTsKICAgICBpZiAob0xpc3RFbGVtZW50ICYmIG9MaXN0RWxlbWVudC0+aXNSZXZlcnNlZCgpKQog
ICAgICAgICB2YWx1ZVN0ZXAgPSAtMTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHJlY3Vyc2VzIHRv
IGEgcG9zc2libGUgZGVwdGggb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC4KICAgICAvLyBUaGF0
J3Mgbm90IGdvb2QgLS0gd2UgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBhbiBpdGVyYXRpdmUgYWxn
b3JpdGhtLgotICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNJdGVtID0gcHJldmlvdXNM
aXN0SXRlbShsaXN0LCB0aGlzKSkKKyAgICBpZiAoUmVuZGVyTGlzdEl0ZW0qIHByZXZpb3VzSXRl
bSA9IHByZXZpb3VzTGlzdEl0ZW0obGlzdCwgKnRoaXMpKQogICAgICAgICByZXR1cm4gcHJldmlv
dXNJdGVtLT52YWx1ZSgpICsgdmFsdWVTdGVwOwogCiAgICAgaWYgKG9MaXN0RWxlbWVudCkKQEAg
LTIyNSwzMSArMjIyLDI2IEBAIGJvb2wgUmVuZGVyTGlzdEl0ZW06OmlzRW1wdHkoKSBjb25zdAog
ICAgIHJldHVybiBsYXN0Q2hpbGQoKSA9PSBtX21hcmtlcjsKIH0KIAotc3RhdGljIFJlbmRlckJs
b2NrKiBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChSZW5kZXJCbG9jayogY3VyciwgUmVuZGVyT2Jq
ZWN0KiBtYXJrZXIpCitzdGF0aWMgUmVuZGVyQmxvY2sqIGdldFBhcmVudE9mRmlyc3RMaW5lQm94
KFJlbmRlckJsb2NrJiBjdXJyZW50LCBSZW5kZXJPYmplY3QmIG1hcmtlcikKIHsKLSAgICBSZW5k
ZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFmaXJz
dENoaWxkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgaW5RdWlya3NNb2RlID0gY3Vy
ci0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
ckNoaWxkID0gZmlyc3RDaGlsZDsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGN1cnJDaGlsZCA9PSBtYXJrZXIpCisgICAgYm9v
bCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCk7CisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY3VycmVudC5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZCA9PSAmbWFy
a2VyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNJ
bmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oKmN1cnJDaGlsZCkgfHwgY3Vyci0+Z2VuZXJh
dGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoY3VyckNoaWxkKSkpCi0gICAgICAgICAgICByZXR1
cm4gY3VycjsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgpICYmICghaXM8UmVuZGVySW5s
aW5lPigqY2hpbGQpIHx8IGN1cnJlbnQuZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQo
Y2hpbGQpKSkKKyAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKIAotICAgICAgICBpZiAoY3Vy
ckNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY3VyckNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSkKKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQtPmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGN1cnJD
aGlsZC0+aXNUYWJsZSgpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJDaGlsZCkgfHwgKGlzPFJl
bmRlckJveD4oKmN1cnJDaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY3VyckNoaWxkKS5p
c1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlPigqY2hpbGQp
IHx8ICFpczxSZW5kZXJCbG9jaz4oKmNoaWxkKSB8fCAoaXM8UmVuZGVyQm94PigqY2hpbGQpICYm
IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChjdXJyLT5pc0xpc3RJdGVtKCkgJiYgaW5RdWly
a3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCi0gICAgICAgICAgICAoaXM8SFRNTFVMaXN0
RWxlbWVudD4oKmN1cnJDaGlsZC0+bm9kZSgpKSB8fCBpczxIVE1MT0xpc3RFbGVtZW50PigqY3Vy
ckNoaWxkLT5ub2RlKCkpKSkKKyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihjdXJyZW50
KSAmJiBpblF1aXJrc01vZGUgJiYgY2hpbGQtPm5vZGUoKSAmJiBpc0hUTUxMaXN0RWxlbWVudCgq
Y2hpbGQtPm5vZGUoKSkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBpZiAoUmVuZGVy
QmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJC
bG9jaz4oY3VyckNoaWxkKSwgbWFya2VyKSkKKyAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBsaW5l
Qm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGls
ZCksIG1hcmtlcikpCiAgICAgICAgICAgICByZXR1cm4gbGluZUJveDsKICAgICB9CiAKQEAgLTI2
NSwxMiArMjU3LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZVZhbHVlKCkKICAgICB9
CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFya2VyQ2hpbGQoUmVuZGVyQmxv
Y2sqIHBhcmVudCkKK3N0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFya2VyQ2hpbGQoUmVu
ZGVyQmxvY2smIHBhcmVudCkKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlc3VsdCA9IHBhcmVudC0+
Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChyZXN1bHQgJiYgcmVzdWx0LT5pc0xpc3RNYXJrZXIo
KSkKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0U2libGluZygpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC5maXJzdENoaWxkKCk7Cisg
ICAgd2hpbGUgKGlzPFJlbmRlckxpc3RNYXJrZXI+KGNoaWxkKSkKKyAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gY2hpbGQ7CiB9CiAKIHZvaWQgUmVuZGVy
TGlzdEl0ZW06Omluc2VydE9yTW92ZU1hcmtlclJlbmRlcmVySWZOZWVkZWQoKQpAQCAtMjgwLDcg
KzI3Miw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Omluc2VydE9yTW92ZU1hcmtlclJlbmRlcmVy
SWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJFbGVtZW50KiBjdXJyZW50
UGFyZW50ID0gbV9tYXJrZXItPnBhcmVudCgpOwotICAgIFJlbmRlckJsb2NrKiBuZXdQYXJlbnQg
PSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0aGlzLCBtX21hcmtlcik7CisgICAgUmVuZGVyQmxv
Y2sqIG5ld1BhcmVudCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KCp0aGlzLCAqbV9tYXJrZXIp
OwogICAgIGlmICghbmV3UGFyZW50KSB7CiAgICAgICAgIC8vIElmIHRoZSBtYXJrZXIgaXMgY3Vy
cmVudGx5IGNvbnRhaW5lZCBpbnNpZGUgYW4gYW5vbnltb3VzIGJveCwKICAgICAgICAgLy8gdGhl
biB3ZSBhcmUgdGhlIG9ubHkgaXRlbSBpbiB0aGF0IGFub255bW91cyBib3ggKHNpbmNlIG5vIGxp
bmUgYm94CkBAIC0yOTksNyArMjkxLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JN
b3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgIC8vIGNvbnRhaW5lcnMgb3RoZXIg
dGhhbiBvdXJzZWx2ZXMsIHNvIHdlIG5lZWQgdG8gZGlzYWJsZSBMYXlvdXRTdGF0ZS4KICAgICAg
ICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKCZ2aWV3KCkpOwogICAg
ICAgICBtX21hcmtlci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAgICBuZXdQYXJlbnQtPmFk
ZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1hcmtlckNoaWxkKG5ld1BhcmVudCkpOworICAgICAg
ICBuZXdQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQ
YXJlbnQpKTsKICAgICAgICAgbV9tYXJrZXItPnVwZGF0ZU1hcmdpbnNBbmRDb250ZW50KCk7CiAg
ICAgICAgIC8vIElmIGN1cnJlbnQgcGFyZW50IGlzIGFuIGFub255bW91cyBibG9jayB0aGF0IGhh
cyBsb3N0IGFsbCBpdHMgY2hpbGRyZW4sIGRlc3Ryb3kgaXQuCiAgICAgICAgIGlmIChjdXJyZW50
UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiAhY3VycmVudFBh
cmVudC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRQYXJl
bnQpLmNvbnRpbnVhdGlvbigpKQpAQCAtNDU2LDYgKzQ0OCw3IEBAIFN0cmluZyBSZW5kZXJMaXN0
SXRlbTo6bWFya2VyVGV4dFdpdGhTdWZmaXgoKSBjb25zdAogICAgIGNvbnN0IFN0cmluZyYgbWFy
a2VyVGV4dCA9IG1fbWFya2VyLT50ZXh0KCk7CiAgICAgY29uc3QgU3RyaW5nIG1hcmtlclN1ZmZp
eCA9IG1fbWFya2VyLT5zdWZmaXgoKTsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG1hcmtlclRleHQubGVuZ3RoKCkgKyBtYXJrZXJTdWZmaXgu
bGVuZ3RoKCkpOwogCiAgICAgaWYgKCFtX21hcmtlci0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyU3VmZml4KTsKQEAgLTQ3Miw4
ICs0NjUsMTIgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQog
ewogICAgIGlmIChtX21hcmtlcikKICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwotICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlz
dCh0aGlzKTsKLSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gdGhpczsgaXRlbTsgaXRl
bSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgaXRlbSkpCisKKyAgICB1cGRhdGVWYWx1ZSgpOwor
ICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdCgqdGhpcyk7CisgICAgaWYgKCFs
aXN0Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0g
PSBuZXh0TGlzdEl0ZW0oKmxpc3ROb2RlLCAqdGhpcyk7IGl0ZW07IGl0ZW0gPSBuZXh0TGlzdEl0
ZW0oKmxpc3ROb2RlLCAqaXRlbSkpCiAgICAgICAgIGl0ZW0tPnVwZGF0ZVZhbHVlKCk7CiB9CiAK
QEAgLTQ5NiwyNSArNDkzLDMzIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmNsZWFyRXhwbGljaXRW
YWx1ZSgpCiAgICAgZXhwbGljaXRWYWx1ZUNoYW5nZWQoKTsKIH0KIAotc3RhdGljIFJlbmRlckxp
c3RJdGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgRWxlbWVudCog
bGlzdCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCitzdGF0aWMgQUxXQVlTX0lOTElORSBSZW5kZXJM
aXN0SXRlbSogcHJldmlvdXNPck5leHRJdGVtKGJvb2wgaXNMaXN0UmV2ZXJzZWQsIEVsZW1lbnQm
IGxpc3QsIFJlbmRlckxpc3RJdGVtJiBpdGVtKQogewotICAgIHJldHVybiBpc0xpc3RSZXZlcnNl
ZCA/IHByZXZpb3VzTGlzdEl0ZW0obGlzdCwgaXRlbSkgOiBuZXh0TGlzdEl0ZW0obGlzdCwgaXRl
bSk7CisgICAgcmV0dXJuIGlzTGlzdFJldmVyc2VkID8gcHJldmlvdXNMaXN0SXRlbSgmbGlzdCwg
aXRlbSkgOiBuZXh0TGlzdEl0ZW0obGlzdCwgaXRlbSk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEl0
ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKCkKIHsKLSAgICBFbGVtZW50KiBsaXN0Tm9kZSA9
IGVuY2xvc2luZ0xpc3QodGhpcyk7CisgICAgRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdM
aXN0KCp0aGlzKTsKICAgICAvLyBUaGUgbGlzdCBub2RlIGNhbiBiZSB0aGUgc2hhZG93IHJvb3Qg
d2hpY2ggaGFzIG5vIHJlbmRlcmVyLgogICAgIGlmICghbGlzdE5vZGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgaXNMaXN0UmV2ZXJzZWQgPSBmYWxzZTsKLSAgICBIVE1MT0xpc3RFbGVt
ZW50KiBvTGlzdEVsZW1lbnQgPSAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUob2xU
YWcpKSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3ROb2RlKSA6IG51bGxwdHI7Ci0g
ICAgaWYgKG9MaXN0RWxlbWVudCkgewotICAgICAgICBvTGlzdEVsZW1lbnQtPml0ZW1Db3VudENo
YW5nZWQoKTsKLSAgICAgICAgaXNMaXN0UmV2ZXJzZWQgPSBvTGlzdEVsZW1lbnQtPmlzUmV2ZXJz
ZWQoKTsKKyAgICBpZiAoaXM8SFRNTE9MaXN0RWxlbWVudD4oKmxpc3ROb2RlKSkgeworICAgICAg
ICBIVE1MT0xpc3RFbGVtZW50JiBvTGlzdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT0xpc3RFbGVt
ZW50PigqbGlzdE5vZGUpOworICAgICAgICBvTGlzdEVsZW1lbnQuaXRlbUNvdW50Q2hhbmdlZCgp
OworICAgICAgICBpZiAob0xpc3RFbGVtZW50LmlzUmV2ZXJzZWQoKSkgeworICAgICAgICAgICAg
dXBkYXRlTGlzdE1hcmtlck51bWJlcnNJbnRlcm5hbDxMaXN0SXNSZXZlcnNlZD4oKmxpc3ROb2Rl
LCAqdGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gICAgZm9y
IChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNl
ZCwgbGlzdE5vZGUsIHRoaXMpOyBpdGVtOyBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlz
dFJldmVyc2VkLCBsaXN0Tm9kZSwgaXRlbSkpIHsKKyAgICB1cGRhdGVMaXN0TWFya2VyTnVtYmVy
c0ludGVybmFsPExpc3RJc05vdFJldmVyc2VkPigqbGlzdE5vZGUsICp0aGlzKTsKK30KKwordGVt
cGxhdGUgPFJlbmRlckxpc3RJdGVtOjpMaXN0SXNSZXZlcnNlZE9yTm90IGlzTGlzdFJldmVyc2Vk
PgoraW5saW5lIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzSW50
ZXJuYWwoRWxlbWVudCYgbGlzdE5vZGUsIFJlbmRlckxpc3RJdGVtJiBmaXJzdEl0ZW0pCit7Cisg
ICAgZm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RS
ZXZlcnNlZCwgbGlzdE5vZGUsIGZpcnN0SXRlbSk7IGl0ZW07IGl0ZW0gPSBwcmV2aW91c09yTmV4
dEl0ZW0oaXNMaXN0UmV2ZXJzZWQsIGxpc3ROb2RlLCAqaXRlbSkpIHsKICAgICAgICAgaWYgKCFp
dGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSkgewogICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBoYXMg
YmVlbiBtYXJrZWQgZm9yIHVwZGF0ZSBiZWZvcmUsIHdlIGNhbiBzYWZlbHkKICAgICAgICAgICAg
IC8vIGFzc3VtZSB0aGF0IGFsbCB0aGUgZm9sbG93aW5nIG9uZXMgaGF2ZSB0b28uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IDI1NmQ2MjliYTQ5MmVjY2Q5
NTBlNjZkODVmYTkyNjU5ZDlkODM3NTIuLjc2ZWMxZDBmMjgzMjg4NDMzMzM2ZDIyZjBiYjYwZGMz
YTQxZTg4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBA
IC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlTGlzdE1hcmtlck51bWJl
cnMoKTsKIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdChj
b25zdCBIVE1MT0xpc3RFbGVtZW50Kik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGl0ZW1Db3VudEZv
ck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxPTGlzdEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB1
cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCYpOwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpdGVtQ291bnRGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xp
c3RFbGVtZW50Jik7CiAKICAgICB2b2lkIGRpZERlc3Ryb3lMaXN0TWFya2VyKCkgeyBtX21hcmtl
ciA9IG51bGxwdHI7IH0KIApAQCAtODUsNiArODUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlVmFsdWVOb3coKSBjb25zdDsKICAgICB2b2lkIGV4cGxpY2l0VmFsdWVDaGFuZ2VkKCk7CiAK
KyAgICBlbnVtIExpc3RJc1JldmVyc2VkT3JOb3QgeyBMaXN0SXNOb3RSZXZlcnNlZCwgTGlzdElz
UmV2ZXJzZWQgfTsKKyAgICB0ZW1wbGF0ZSA8TGlzdElzUmV2ZXJzZWRPck5vdD4gdm9pZCB1cGRh
dGVMaXN0TWFya2VyTnVtYmVyc0ludGVybmFsKEVsZW1lbnQmIGxpc3ROb2RlLCBSZW5kZXJMaXN0
SXRlbSYgZmlyc3RJdGVtKTsKKwogICAgIGludCBtX2V4cGxpY2l0VmFsdWU7CiAgICAgUmVuZGVy
TGlzdE1hcmtlciogbV9tYXJrZXI7CiAgICAgbXV0YWJsZSBpbnQgbV92YWx1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241433</attachid>
            <date>2014-11-12 10:20:22 -0800</date>
            <delta_ts>2014-11-12 12:16:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138601-20141112102027.patch</filename>
            <type>text/plain</type>
            <size>19658</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmIxNDkwZTA1Nzc1NDZj
MThiMjQ3MjRlZGFiODM4ODVlOWE4NDQyZS4uZDk4MTY0OTcwMGMwNDdmMGQwZWQ5NjFiMTMwYTky
ZGIyZGNjNDhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0LTExLTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgaW1wcm92ZW1lbnRz
IHRvIFJlbmRlckxpc3RJdGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzg2MDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBNYWtlIHNldmVyYWwgbWlub3IgaW1wcm92ZW1lbnRzIHRvIFJlbmRlckxpc3RJdGVt
IGFuZCBjbGVhbiB1cCB0aGUKKyAgICAgICAgY29kZSBhIGJpdC4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0hUTUxMaXN0RWxlbWVudCk6CisgICAg
ICAgIC0gUmVuYW1lIGlzTGlzdCB0byBpc0hUTUxMaXN0RWxlbWVudCgpIGZvciBjbGFyaXR5IGFz
IGl0IGNoZWNrcworICAgICAgICAgIGZvciBIVE1MT0xpc3RFbGVtZW50IGFuZCBIVE1MVUxpc3RF
bGVtZW50IHR5cGVzCisgICAgICAgIC0gSW5saW5lIHRoZSBmdW5jdGlvbiBhcyBpdCBpcyBzaG9y
dC4KKyAgICAgICAgLSBVc2UgaXM8SFRNTCpFbGVtZW50PigpIGZvciB0eXBlIGNoZWNraW5nCisg
ICAgICAgIC0gVXBkYXRlIHRoZSBhcmd1bWVudCB0byB0YWtlIGEgTm9kZSYgaW5zdGVhZCBvZiBh
biBFbGVtZW50Ki4gVGhpcworICAgICAgICAgIGlzIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGlzIGV4
cGVjdGVkIHRvIHRoZSBub24tbnVsbC4gQWxzbyB1c2luZworICAgICAgICAgIGxvb3NlciB0eXBp
bmcgaGVyZSBhbGxvd3MgdXMgdG8gdXNlIHRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyBvbmUKKyAg
ICAgICAgICBtb3JlIHBsYWNlLCB3aXRob3V0IGltcGFjdGluZyBwZXJmb3JtYW5jZSBhcworICAg
ICAgICAgIGhhc1RhZ05hbWUoSFRNTFF1YWxpZmllZE5hbWUpIGlzIGRlZmluZWQgb24gTm9kZS4K
KworICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTGlzdCk6CisgICAgICAgIC0gUGFzcyB0aGUg
YXJndW1lbnQgYXMgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIgYXMgaXQgaXMKKyAg
ICAgICAgICBleHBlY3RlZCB0byBiZSBub24tbnVsbC4KKyAgICAgICAgLSBJbml0aWFsaXplIGZp
cnN0Tm9kZSBiZWZvcmUgdGhlIGxvb3AgdG8gYXZvaWQgdGhlIGlmICghZmlyc3ROb2RlKQorICAg
ICAgICAgIGNoZWNrIGZvciBldmVyeSBpdGVyYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6Om5l
eHRMaXN0SXRlbSk6CisgICAgICAgIC0gVGFrZSBhbiBFbGVtZW50IGFzIHNlY29uZCBhcmd1bWVu
dCBpbnN0ZWFkIG9mIGEgUmVuZGVyTGlzdEl0ZW0qCisgICAgICAgICAgYW5kIHByb3ZpZGUgY29u
dmVuaWVuY2Ugb3ZlcmxvYWRzIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbworICAgICAgICAg
IG51bGwgY2hlY2tzIGp1c3QgYmVjYXVzZSBzb21lIGNhbGxzIHNpdGVzIGNhbGwgdGhpcyBmdW5j
dGlvbgorICAgICAgICAgIHdpdGggMiBhcmd1bWVudHMgYW5kIG90aGVycyB3aXRoIDEgYXJndW1l
bnQuIFRoaXMgd2F5LCB3ZSBhdm9pZAorICAgICAgICAgIHVubmVjZXNzYXJ5IG51bGwgY2hlY2tz
IGFzIG1vc3QgY2FsbCBzaXRlcyBhbHJlYWR5IGRvIHN1Y2gKKyAgICAgICAgICBjaGVja3MgKG9y
IGhhdmUgcmVmZXJlbmNlcykuCisgICAgICAgIC0gVHJhbnNmb3JtIHRoZSB3aGlsZSBsb29wIGlu
dG8gYSBmb3IgbG9vcCBmb3IgY2xhcml0eS4KKyAgICAgICAgLSBEb24ndCB0cmF2ZXJzZSBhbiBF
bGVtZW50J3Mgc3VidHJlZSBpZiB0aGUgRWxlbWVudCBkb2VzIG5vdCBoYXZlCisgICAgICAgICAg
YSByZW5kZXJlciBhcyBpdCBpcyBpbXBvc3NpYmxlIG9mIGFueSBvZiBpdHMgZGVzY2VuZGFudCB0
byBoYXZlCisgICAgICAgICAgYSByZW5kZXJlciAoYW5kIHdlIGFyZSBsb29raW5nIGZvciBhIHNw
ZWNpZmljIHR5cGUgb2YgcmVuZGVyZXIpLgorCisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xp
c3RJdGVtKToKKyAgICAgICAgLSBQYXNzIHRoZSBpdGVtIGFyZ3VtZW50IGFzIGEgcmVmZXJlbmNl
IGluc3RlYWQgb2YgYSBwb2ludGVyIGFzIGl0CisgICAgICAgICAgaXMgZXhwZWN0ZWQgdG8gYmUg
bm9uLW51bGwuCisgICAgICAgIC0gUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgfGN1cnJlbnR8IHNv
IHRoYXQgaXQgaXMgbm93IGRlY2xhcmVkCisgICAgICAgICAgaW5zaWRlIHRoZSBsb29wLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVy
ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JP
cmRlcmVkTGlzdCk6CisgICAgICAgIC0gUGFzcyBhcmd1bWVudCBhcyBhIHJlZmVyZW5jZSBpbnN0
ZWFkIG9mIGEgcG9pbnRlciBhcyBpdCB3YXMgZXhwZWN0ZWQKKyAgICAgICAgICB0byBiZSBub24t
bnVsbCAoVGhlcmUgd2FzIGFuIGFzc2VydGlvbiBpbiBwbGFjZSB0byBtYWtlIHN1cmUgb2YgaXQp
LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ZhbHVlKToKKyAgICAg
ICAgLSBVc2UgaXM8SFRNTE9MaXN0RWxlbWVudD4oKSBpbnN0ZWFkIG9mIGhhc1RhZ05hbWUoKS4K
KworICAgICAgICAoV2ViQ29yZTo6Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3gpOgorICAgICAgICAt
IFJlbmFtZSB2YXJpYWJsZXMgdG8gc3RvcCB1c2luZyBhYmJyZXZpYXRpb25zLgorICAgICAgICAt
IFBhc3MgYXJndW1lbnRzIGFzIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBhcyB0aGV5
IGFyZSBleHBlY3RlZAorICAgICAgICAgIHRvIGJlIG5vbi1udWxsLgorICAgICAgICAtIFJlbW92
ZSB0aGUgZmlyc3RDaGlsZCBudWxsIGNoZWNrIGJlZm9yZSB0aGUgbG9vcCBhcyBpdCBkb2VzIG5v
dAorICAgICAgICAgIGNoYW5nZSBiZWhhdmlvci4gVGhlIGxvb3Agd2lsbCBhYm9ydCBlYXJseSBp
ZiBmaXJzdENoaWxkIGlzIG51bGwKKyAgICAgICAgICBhbmQgd2Ugd2lsbCBlbmQgdXAgcmV0dXJu
aW5nIG51bGxwdHIgYXMgd2VsbC4KKyAgICAgICAgLSBVc2UgaXM8PigpIG1vcmUgZm9yIHR5cGUg
Y2hlY2tpbmcuCisgICAgICAgIC0gUmV1c2UgdGhlIGlzSFRNTExpc3RFbGVtZW50KCkgdXRpbGl0
eSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nCisgICAgICAgICAgaXRzIGNvZGUgaW5z
aWRlIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Tm9uTWFya2VyQ2hp
bGQpOgorICAgICAgICAtIFBhc3MgYXJndW1lbnQgYXMgYSByZWZlcmVuY2UgYXMgaXQgaXMgZXhw
ZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisgICAgICAgIC0gUmVuYW1lIHZhcmlhYmxlIGZyb20gcmVz
dWx0IHRvIGNoaWxkIGZvciBjbGFyaXR5LCBhcyB3ZSBhcmUgdHJhdmVyc2luZworICAgICAgICAg
IHRoZSBjaGlsZHJlbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06Om1hcmtl
clRleHRXaXRoU3VmZml4KToKKyAgICAgICAgLSBVc2UgU3RyaW5nIGFwcGVuZGluZyBpbnN0ZWFk
IG9mIFN0cmluZ0J1aWxkZXIgYXMgaXQgc2ltcGxpZmllcyB0aGUKKyAgICAgICAgICBjb2RlIGEg
bG90IGFuZCBzaG91bGQgbm90IGltcGFjdCBwZXJmb3JtYW5jZSBpbiB0aGlzIGNhc2UuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCk6Cisg
ICAgICAgIC0gUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQgdG8gZG8gdGhlIHxsaXN0Tm9kZXwg
bnVsbCBjaGVjayBiZWZvcmUgdGhlCisgICAgICAgICAgbG9vcCwgbm93IHRoYXQgbmV4dExpc3RJ
dGVtKCkgdGFrZXMgYSByZWZlcmVuY2UgaW4gYXJndW1lbnQuIFRoaXMgaXMKKyAgICAgICAgICB0
aGUgb25seSBjYWxsIHNpdGUgd2hlcmUgd2UgZGlkbid0IGFscmVhZHkga25vdyB0aGF0IGxpc3RO
b2RlIGlzCisgICAgICAgICAgbm9uLW51bGwuCisKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3Vz
T3JOZXh0SXRlbSk6CisgICAgICAgIC0gTWFyayB0aGlzIGZ1bmN0aW9uIGFzIGlubGluZSBhcyBp
dCBpcyBzaG9ydCBhbmQgY2FsbGVkIHJlcGVhdGVkbHkuCisKIDIwMTQtMTEtMTIgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEV4cG9z
ZSB1c2VyIHNjcmlwdCBtZXNzYWdlcyB0byBHT2JqZWN0IERPTSBiaW5kaW5ncwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKaW5kZXggOWI2YTUwODRiNTVhODQ0YzE5NTQ4
YTFiN2NlMWFjMGE1YzE1MzNlOC4uNmYwY2U5OGE4MzIxZGZhMTA2M2Y2ODk1ZDhlZjMzMzUzN2Iz
Yjc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCkBAIC0xMDYs
MTIgKzEwNiwxMiBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFydCkK
IAogdm9pZCBIVE1MT0xpc3RFbGVtZW50Ojp1cGRhdGVJdGVtVmFsdWVzKCkKIHsKLSAgICBSZW5k
ZXJMaXN0SXRlbTo6dXBkYXRlSXRlbVZhbHVlc0Zvck9yZGVyZWRMaXN0KHRoaXMpOworICAgIFJl
bmRlckxpc3RJdGVtOjp1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3QoKnRoaXMpOwogfQog
CiB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnJlY2FsY3VsYXRlSXRlbUNvdW50KCkKIHsKLSAgICBt
X2l0ZW1Db3VudCA9IFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVkTGlzdCh0aGlz
KTsKKyAgICBtX2l0ZW1Db3VudCA9IFJlbmRlckxpc3RJdGVtOjppdGVtQ291bnRGb3JPcmRlcmVk
TGlzdCgqdGhpcyk7CiAgICAgbV9zaG91bGRSZWNhbGN1bGF0ZUl0ZW1Db3VudCA9IGZhbHNlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCBj
MDMyNTBjNDdiMTY4OTQ3ZjZlNDI5MmRhM2E5MzFhNmZkNGE4NTdlLi44Yzk5Y2UwYTBmMzAyM2Ix
ZDBkMmIyYWNlMmJkZTBmODEzZTNlYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTk5LDIzICsxMDAsMjEgQEAgdm9pZCBSZW5kZXJMaXN0
SXRlbTo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKICAgICB1cGRhdGVMaXN0TWFya2VyTnVtYmVy
cygpOwogfQogCi1zdGF0aWMgYm9vbCBpc0xpc3QoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxMaXN0RWxlbWVudChjb25zdCBOb2RlJiBub2RlKQogewot
ICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKG9sVGFnKTsKKyAgICByZXR1cm4gaXM8SFRNTFVMaXN0RWxlbWVudD4obm9kZSkgfHwgaXM8
SFRNTE9MaXN0RWxlbWVudD4obm9kZSk7CiB9CiAKIC8vIFJldHVybnMgdGhlIGVuY2xvc2luZyBs
aXN0IHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgotc3RhdGljIEVsZW1lbnQqIGVuY2xv
c2luZ0xpc3QoY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQorc3RhdGljIEVsZW1lbnQq
IGVuY2xvc2luZ0xpc3QoY29uc3QgUmVuZGVyTGlzdEl0ZW0mIGxpc3RJdGVtKQogewotICAgIEVs
ZW1lbnQmIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtLT5lbGVtZW50KCk7Ci0gICAgRWxlbWVu
dCogZmlyc3ROb2RlID0gbnVsbHB0cjsKKyAgICBFbGVtZW50JiBsaXN0SXRlbUVsZW1lbnQgPSBs
aXN0SXRlbS5lbGVtZW50KCk7CiAgICAgRWxlbWVudCogcGFyZW50ID0gaXM8UHNldWRvRWxlbWVu
dD4obGlzdEl0ZW1FbGVtZW50KSA/IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KGxpc3RJdGVtRWxl
bWVudCkuaG9zdEVsZW1lbnQoKSA6IGxpc3RJdGVtRWxlbWVudC5wYXJlbnRFbGVtZW50KCk7Cisg
ICAgRWxlbWVudCogZmlyc3ROb2RlID0gcGFyZW50OwogICAgIC8vIFdlIHVzZSBwYXJlbnROb2Rl
IGJlY2F1c2UgdGhlIGVuY2xvc2luZyBsaXN0IGNvdWxkIGJlIGEgU2hhZG93Um9vdCB0aGF0J3Mg
bm90IEVsZW1lbnQuCiAgICAgZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzTGlzdChwYXJlbnQpKQorICAgICAgICBpZiAoaXNI
VE1MTGlzdEVsZW1lbnQoKnBhcmVudCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50OwotICAg
ICAgICBpZiAoIWZpcnN0Tm9kZSkKLSAgICAgICAgICAgIGZpcnN0Tm9kZSA9IHBhcmVudDsKICAg
ICB9CiAKICAgICAvLyBJZiB0aGVyZSdzIG5vIGFjdHVhbCA8dWw+IG9yIDxvbD4gbGlzdCBlbGVt
ZW50LCB0aGVuIHRoZSBmaXJzdCBmb3VuZApAQCAtMTI1LDQxICsxMjQsNDMgQEAgc3RhdGljIEVs
ZW1lbnQqIGVuY2xvc2luZ0xpc3QoY29uc3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQogfQog
CiAvLyBSZXR1cm5zIHRoZSBuZXh0IGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBv
cmRlci4KLXN0YXRpYyBSZW5kZXJMaXN0SXRlbSogbmV4dExpc3RJdGVtKGNvbnN0IEVsZW1lbnQq
IGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IG51bGxwdHIpCitzdGF0aWMg
UmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50JiBsaXN0Tm9kZSwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWxpc3ROb2RlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnQgPSBpdGVtID8gJml0ZW0t
PmVsZW1lbnQoKSA6IGxpc3ROb2RlOwotICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0SW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2RlKTsKLQotICAgIHdoaWxlIChjdXJy
ZW50KSB7Ci0gICAgICAgIGlmIChpc0xpc3QoY3VycmVudCkpIHsKLSAgICAgICAgICAgIC8vIFdl
J3ZlIGZvdW5kIGEgbmVzdGVkLCBpbmRlcGVuZGVudCBsaXN0OiBub3RoaW5nIHRvIGRvIGhlcmUu
Ci0gICAgICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1Bz
ZXVkb1NraXBwaW5nQ2hpbGRyZW4oY3VycmVudCwgbGlzdE5vZGUpOworICAgIGZvciAoY29uc3Qg
RWxlbWVudCogbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oJmVs
ZW1lbnQsICZsaXN0Tm9kZSk7IG5leHQ7ICkgeworICAgICAgICBhdXRvKiByZW5kZXJlciA9IG5l
eHQtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIgfHwgaXNIVE1MTGlzdEVsZW1l
bnQoKm5leHQpKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBhIG5lc3RlZCwgaW5kZXBl
bmRlbnQgbGlzdCBvciBhbiB1bnJlbmRlcmVkIEVsZW1lbnQgOiBub3RoaW5nIHRvIGRvIGhlcmUu
CisgICAgICAgICAgICBuZXh0ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVk
b1NraXBwaW5nQ2hpbGRyZW4obmV4dCwgJmxpc3ROb2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBjdXJyZW50
LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSkK
KyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKQogICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcik7CiAKLSAgICAgICAgLy8g
RklYTUU6IENhbiB0aGlzIGJlIG9wdGltaXplZCB0byBza2lwIHRoZSBjaGlsZHJlbiBvZiB0aGUg
ZWxlbWVudHMgd2l0aG91dCBhIHJlbmRlcmVyPwotICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSk7CisgICAgICAg
IG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5leHQsICZsaXN0
Tm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
UmVuZGVyTGlzdEl0ZW0qIG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50JiBsaXN0Tm9kZSwgY29u
c3QgUmVuZGVyTGlzdEl0ZW0mIGl0ZW0pCit7CisgICAgcmV0dXJuIG5leHRMaXN0SXRlbShsaXN0
Tm9kZSwgaXRlbS5lbGVtZW50KCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckxpc3RJdGVt
KiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUpCit7CisgICAgcmV0dXJuIG5l
eHRMaXN0SXRlbShsaXN0Tm9kZSwgbGlzdE5vZGUpOworfQorCiAvLyBSZXR1cm5zIHRoZSBwcmV2
aW91cyBsaXN0IGl0ZW0gd2l0aCByZXNwZWN0IHRvIHRoZSBET00gb3JkZXIuCi1zdGF0aWMgUmVu
ZGVyTGlzdEl0ZW0qIHByZXZpb3VzTGlzdEl0ZW0oY29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNv
bnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtKQorc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91
c0xpc3RJdGVtKGNvbnN0IEVsZW1lbnQqIGxpc3ROb2RlLCBjb25zdCBSZW5kZXJMaXN0SXRlbSYg
aXRlbSkKIHsKLSAgICBFbGVtZW50KiBjdXJyZW50ID0gJml0ZW0tPmVsZW1lbnQoKTsKLSAgICBm
b3IgKGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhj
dXJyZW50LCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpw
cmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSkpIHsKKyAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGlu
Z1BzZXVkbygmaXRlbS5lbGVtZW50KCksIGxpc3ROb2RlKTsgY3VycmVudDsgY3VycmVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIGxpc3ROb2Rl
KSkgewogICAgICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGN1cnJlbnQtPnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghaXM8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50KiBvdGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0
KGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikpOworICAgICAgICBFbGVtZW50KiBv
dGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0KGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVy
ZXIpKTsKICAgICAgICAgLy8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3VyIGN1cnJlbnQgbGlzdCwg
c28gaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLgogICAgICAgICBpZiAobGlzdE5vZGUgPT0g
b3RoZXJMaXN0KQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPihy
ZW5kZXJlcik7CkBAIC0xNzMsMjIgKzE3NCwxNyBAQCBzdGF0aWMgUmVuZGVyTGlzdEl0ZW0qIHBy
ZXZpb3VzTGlzdEl0ZW0oY29uc3QgRWxlbWVudCogbGlzdE5vZGUsIGNvbnN0IFJlbmRlckxpcwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVJdGVt
VmFsdWVzRm9yT3JkZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCogbGlzdE5vZGUpCit2
b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJlZExpc3QoY29uc3Qg
SFRNTE9MaXN0RWxlbWVudCYgbGlzdE5vZGUpCiB7Ci0gICAgQVNTRVJUKGxpc3ROb2RlKTsKLQot
ICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2Rl
KTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gbmV4dExpc3RJdGVtKGxpc3ROb2RlLCBsaXN0SXRlbSkp
CisgICAgZm9yIChSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5v
ZGUpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsICpsaXN0SXRl
bSkpCiAgICAgICAgIGxpc3RJdGVtLT51cGRhdGVWYWx1ZSgpOwogfQogCi11bnNpZ25lZCBSZW5k
ZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJlZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVu
dCogbGlzdE5vZGUpCit1bnNpZ25lZCBSZW5kZXJMaXN0SXRlbTo6aXRlbUNvdW50Rm9yT3JkZXJl
ZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCYgbGlzdE5vZGUpCiB7Ci0gICAgQVNTRVJUKGxp
c3ROb2RlKTsKLQogICAgIHVuc2lnbmVkIGl0ZW1Db3VudCA9IDA7Ci0gICAgZm9yIChSZW5kZXJM
aXN0SXRlbSogbGlzdEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUpOyBsaXN0SXRlbTsgbGlz
dEl0ZW0gPSBuZXh0TGlzdEl0ZW0obGlzdE5vZGUsIGxpc3RJdGVtKSkKLSAgICAgICAgaXRlbUNv
dW50Kys7Ci0KKyAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBsaXN0SXRlbSA9IG5leHRMaXN0SXRl
bShsaXN0Tm9kZSk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwg
Kmxpc3RJdGVtKSkKKyAgICAgICAgKytpdGVtQ291bnQ7CiAgICAgcmV0dXJuIGl0ZW1Db3VudDsK
IH0KIApAQCAtMTk3LDE1ICsxOTMsMTUgQEAgaW5saW5lIGludCBSZW5kZXJMaXN0SXRlbTo6Y2Fs
Y1ZhbHVlKCkgY29uc3QKICAgICBpZiAobV9oYXNFeHBsaWNpdFZhbHVlKQogICAgICAgICByZXR1
cm4gbV9leHBsaWNpdFZhbHVlOwogCi0gICAgRWxlbWVudCogbGlzdCA9IGVuY2xvc2luZ0xpc3Qo
dGhpcyk7Ci0gICAgSFRNTE9MaXN0RWxlbWVudCogb0xpc3RFbGVtZW50ID0gKGxpc3QgJiYgbGlz
dC0+aGFzVGFnTmFtZShvbFRhZykpID8gZG93bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdCkg
OiBudWxscHRyOworICAgIEVsZW1lbnQqIGxpc3QgPSBlbmNsb3NpbmdMaXN0KCp0aGlzKTsKKyAg
ICBIVE1MT0xpc3RFbGVtZW50KiBvTGlzdEVsZW1lbnQgPSBpczxIVE1MT0xpc3RFbGVtZW50Pihs
aXN0KSA/IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpIDogbnVsbHB0cjsKICAgICBp
bnQgdmFsdWVTdGVwID0gMTsKICAgICBpZiAob0xpc3RFbGVtZW50ICYmIG9MaXN0RWxlbWVudC0+
aXNSZXZlcnNlZCgpKQogICAgICAgICB2YWx1ZVN0ZXAgPSAtMTsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHJlY3Vyc2VzIHRvIGEgcG9zc2libGUgZGVwdGggb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGlz
dC4KICAgICAvLyBUaGF0J3Mgbm90IGdvb2QgLS0gd2UgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBh
biBpdGVyYXRpdmUgYWxnb3JpdGhtLgotICAgIGlmIChSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNJ
dGVtID0gcHJldmlvdXNMaXN0SXRlbShsaXN0LCB0aGlzKSkKKyAgICBpZiAoUmVuZGVyTGlzdEl0
ZW0qIHByZXZpb3VzSXRlbSA9IHByZXZpb3VzTGlzdEl0ZW0obGlzdCwgKnRoaXMpKQogICAgICAg
ICByZXR1cm4gcHJldmlvdXNJdGVtLT52YWx1ZSgpICsgdmFsdWVTdGVwOwogCiAgICAgaWYgKG9M
aXN0RWxlbWVudCkKQEAgLTIyNSwzMSArMjIxLDI2IEBAIGJvb2wgUmVuZGVyTGlzdEl0ZW06Omlz
RW1wdHkoKSBjb25zdAogICAgIHJldHVybiBsYXN0Q2hpbGQoKSA9PSBtX21hcmtlcjsKIH0KIAot
c3RhdGljIFJlbmRlckJsb2NrKiBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChSZW5kZXJCbG9jayog
Y3VyciwgUmVuZGVyT2JqZWN0KiBtYXJrZXIpCitzdGF0aWMgUmVuZGVyQmxvY2sqIGdldFBhcmVu
dE9mRmlyc3RMaW5lQm94KFJlbmRlckJsb2NrJiBjdXJyZW50LCBSZW5kZXJPYmplY3QmIG1hcmtl
cikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgaW5R
dWlya3NNb2RlID0gY3Vyci0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKTsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VyckNoaWxkID0gZmlyc3RDaGlsZDsgY3VyckNoaWxkOyBjdXJyQ2hpbGQg
PSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGN1cnJDaGlsZCA9PSBt
YXJrZXIpCisgICAgYm9vbCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5RdWly
a3NNb2RlKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY3VycmVudC5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
IChjaGlsZCA9PSAmbWFya2VyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KGN1cnJDaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlzPFJlbmRlcklubGluZT4oKmN1cnJDaGlsZCkg
fHwgY3Vyci0+Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoY3VyckNoaWxkKSkpCi0g
ICAgICAgICAgICByZXR1cm4gY3VycjsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgpICYm
ICghaXM8UmVuZGVySW5saW5lPigqY2hpbGQpIHx8IGN1cnJlbnQuZ2VuZXJhdGVzTGluZUJveGVz
Rm9ySW5saW5lQ2hpbGQoY2hpbGQpKSkKKyAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKIAot
ICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY3VyckNoaWxkLT5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY2hp
bGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaWYgKGN1cnJDaGlsZC0+aXNUYWJsZSgpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmN1cnJD
aGlsZCkgfHwgKGlzPFJlbmRlckJveD4oKmN1cnJDaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94
PigqY3VyckNoaWxkKS5pc1dyaXRpbmdNb2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGlzPFJlbmRl
clRhYmxlPigqY2hpbGQpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmNoaWxkKSB8fCAoaXM8UmVuZGVy
Qm94PigqY2hpbGQpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5pc1dyaXRpbmdNb2Rl
Um9vdCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChjdXJyLT5pc0xpc3RJ
dGVtKCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCi0gICAgICAgICAg
ICAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKmN1cnJDaGlsZC0+bm9kZSgpKSB8fCBpczxIVE1MT0xp
c3RFbGVtZW50PigqY3VyckNoaWxkLT5ub2RlKCkpKSkKKyAgICAgICAgaWYgKGlzPFJlbmRlckxp
c3RJdGVtPihjdXJyZW50KSAmJiBpblF1aXJrc01vZGUgJiYgY2hpbGQtPm5vZGUoKSAmJiBpc0hU
TUxMaXN0RWxlbWVudCgqY2hpbGQtPm5vZGUoKSkpCiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBpZiAoUmVuZGVyQmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChk
b3duY2FzdDxSZW5kZXJCbG9jaz4oY3VyckNoaWxkKSwgbWFya2VyKSkKKyAgICAgICAgaWYgKFJl
bmRlckJsb2NrKiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KCpjaGlsZCksIG1hcmtlcikpCiAgICAgICAgICAgICByZXR1cm4gbGluZUJveDsK
ICAgICB9CiAKQEAgLTI2NSwxMiArMjU2LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0
ZVZhbHVlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFya2Vy
Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCkKK3N0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9u
TWFya2VyQ2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCkKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJl
c3VsdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChyZXN1bHQgJiYgcmVzdWx0
LT5pc0xpc3RNYXJrZXIoKSkKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0U2libGluZygp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC5m
aXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGlzPFJlbmRlckxpc3RNYXJrZXI+KGNoaWxkKSkKKyAg
ICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gY2hpbGQ7CiB9
CiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06Omluc2VydE9yTW92ZU1hcmtlclJlbmRlcmVySWZOZWVk
ZWQoKQpAQCAtMjgwLDcgKzI3MSw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06Omluc2VydE9yTW92
ZU1hcmtlclJlbmRlcmVySWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJF
bGVtZW50KiBjdXJyZW50UGFyZW50ID0gbV9tYXJrZXItPnBhcmVudCgpOwotICAgIFJlbmRlckJs
b2NrKiBuZXdQYXJlbnQgPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0aGlzLCBtX21hcmtlcik7
CisgICAgUmVuZGVyQmxvY2sqIG5ld1BhcmVudCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KCp0
aGlzLCAqbV9tYXJrZXIpOwogICAgIGlmICghbmV3UGFyZW50KSB7CiAgICAgICAgIC8vIElmIHRo
ZSBtYXJrZXIgaXMgY3VycmVudGx5IGNvbnRhaW5lZCBpbnNpZGUgYW4gYW5vbnltb3VzIGJveCwK
ICAgICAgICAgLy8gdGhlbiB3ZSBhcmUgdGhlIG9ubHkgaXRlbSBpbiB0aGF0IGFub255bW91cyBi
b3ggKHNpbmNlIG5vIGxpbmUgYm94CkBAIC0yOTksNyArMjkwLDcgQEAgdm9pZCBSZW5kZXJMaXN0
SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgIC8vIGNv
bnRhaW5lcnMgb3RoZXIgdGhhbiBvdXJzZWx2ZXMsIHNvIHdlIG5lZWQgdG8gZGlzYWJsZSBMYXlv
dXRTdGF0ZS4KICAgICAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVy
KCZ2aWV3KCkpOwogICAgICAgICBtX21hcmtlci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAg
ICBuZXdQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1hcmtlckNoaWxkKG5ld1Bh
cmVudCkpOworICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1h
cmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKICAgICAgICAgbV9tYXJrZXItPnVwZGF0ZU1hcmdpbnNB
bmRDb250ZW50KCk7CiAgICAgICAgIC8vIElmIGN1cnJlbnQgcGFyZW50IGlzIGFuIGFub255bW91
cyBibG9jayB0aGF0IGhhcyBsb3N0IGFsbCBpdHMgY2hpbGRyZW4sIGRlc3Ryb3kgaXQuCiAgICAg
ICAgIGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2so
KSAmJiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2FzdDxSZW5kZXJCbG9j
az4oKmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQpAQCAtNDUyLDI4ICs0NDMsMjEgQEAg
U3RyaW5nIFJlbmRlckxpc3RJdGVtOjptYXJrZXJUZXh0V2l0aFN1ZmZpeCgpIGNvbnN0CiAKICAg
ICAvLyBBcHBlbmQgdGhlIHN1ZmZpeCBmb3IgdGhlIG1hcmtlciBpbiB0aGUgcmlnaHQgcGxhY2Ug
ZGVwZW5kaW5nCiAgICAgLy8gb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGV4dCAocmlnaHQtdG8t
bGVmdCBvciBsZWZ0LXRvLXJpZ2h0KS4KLQotICAgIGNvbnN0IFN0cmluZyYgbWFya2VyVGV4dCA9
IG1fbWFya2VyLT50ZXh0KCk7Ci0gICAgY29uc3QgU3RyaW5nIG1hcmtlclN1ZmZpeCA9IG1fbWFy
a2VyLT5zdWZmaXgoKTsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLQotICAgIGlmICghbV9t
YXJrZXItPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKG1hcmtlclN1ZmZpeCk7Ci0KLSAgICByZXN1bHQuYXBwZW5kKG1hcmtlclRleHQpOwot
CiAgICAgaWYgKG1fbWFya2VyLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChtYXJrZXJTdWZmaXgpOwotCi0gICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOworICAgICAgICByZXR1cm4gbV9tYXJrZXItPnRleHQoKSArIG1fbWFya2VyLT5z
dWZmaXgoKTsKKyAgICByZXR1cm4gbV9tYXJrZXItPnN1ZmZpeCgpICsgbV9tYXJrZXItPnRleHQo
KTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQogewog
ICAgIGlmIChtX21hcmtlcikKICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwotICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdCh0
aGlzKTsKLSAgICBmb3IgKFJlbmRlckxpc3RJdGVtKiBpdGVtID0gdGhpczsgaXRlbTsgaXRlbSA9
IG5leHRMaXN0SXRlbShsaXN0Tm9kZSwgaXRlbSkpCisKKyAgICB1cGRhdGVWYWx1ZSgpOworICAg
IEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdCgqdGhpcyk7CisgICAgaWYgKCFsaXN0
Tm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSBu
ZXh0TGlzdEl0ZW0oKmxpc3ROb2RlLCAqdGhpcyk7IGl0ZW07IGl0ZW0gPSBuZXh0TGlzdEl0ZW0o
Kmxpc3ROb2RlLCAqaXRlbSkpCiAgICAgICAgIGl0ZW0tPnVwZGF0ZVZhbHVlKCk7CiB9CiAKQEAg
LTQ5NiwyNSArNDgwLDI1IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmNsZWFyRXhwbGljaXRWYWx1
ZSgpCiAgICAgZXhwbGljaXRWYWx1ZUNoYW5nZWQoKTsKIH0KIAotc3RhdGljIFJlbmRlckxpc3RJ
dGVtKiBwcmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgRWxlbWVudCogbGlz
dCwgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0pCitzdGF0aWMgaW5saW5lIFJlbmRlckxpc3RJdGVtKiBw
cmV2aW91c09yTmV4dEl0ZW0oYm9vbCBpc0xpc3RSZXZlcnNlZCwgRWxlbWVudCYgbGlzdCwgUmVu
ZGVyTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAgcmV0dXJuIGlzTGlzdFJldmVyc2VkID8gcHJldmlv
dXNMaXN0SXRlbShsaXN0LCBpdGVtKSA6IG5leHRMaXN0SXRlbShsaXN0LCBpdGVtKTsKKyAgICBy
ZXR1cm4gaXNMaXN0UmV2ZXJzZWQgPyBwcmV2aW91c0xpc3RJdGVtKCZsaXN0LCBpdGVtKSA6IG5l
eHRMaXN0SXRlbShsaXN0LCBpdGVtKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRl
TGlzdE1hcmtlck51bWJlcnMoKQogewotICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5n
TGlzdCh0aGlzKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QoKnRoaXMp
OwogICAgIC8vIFRoZSBsaXN0IG5vZGUgY2FuIGJlIHRoZSBzaGFkb3cgcm9vdCB3aGljaCBoYXMg
bm8gcmVuZGVyZXIuCiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ym9vbCBpc0xpc3RSZXZlcnNlZCA9IGZhbHNlOwotICAgIEhUTUxPTGlzdEVsZW1lbnQqIG9MaXN0
RWxlbWVudCA9IChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykpID8gZG93
bmNhc3Q8SFRNTE9MaXN0RWxlbWVudD4obGlzdE5vZGUpIDogbnVsbHB0cjsKLSAgICBpZiAob0xp
c3RFbGVtZW50KSB7Ci0gICAgICAgIG9MaXN0RWxlbWVudC0+aXRlbUNvdW50Q2hhbmdlZCgpOwot
ICAgICAgICBpc0xpc3RSZXZlcnNlZCA9IG9MaXN0RWxlbWVudC0+aXNSZXZlcnNlZCgpOworICAg
IGlmIChpczxIVE1MT0xpc3RFbGVtZW50PigqbGlzdE5vZGUpKSB7CisgICAgICAgIEhUTUxPTGlz
dEVsZW1lbnQmIG9MaXN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxPTGlzdEVsZW1lbnQ+KCpsaXN0
Tm9kZSk7CisgICAgICAgIG9MaXN0RWxlbWVudC5pdGVtQ291bnRDaGFuZ2VkKCk7CisgICAgICAg
IGlzTGlzdFJldmVyc2VkID0gb0xpc3RFbGVtZW50LmlzUmV2ZXJzZWQoKTsKICAgICB9Ci0gICAg
Zm9yIChSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZl
cnNlZCwgbGlzdE5vZGUsIHRoaXMpOyBpdGVtOyBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlz
TGlzdFJldmVyc2VkLCBsaXN0Tm9kZSwgaXRlbSkpIHsKKyAgICBmb3IgKFJlbmRlckxpc3RJdGVt
KiBpdGVtID0gcHJldmlvdXNPck5leHRJdGVtKGlzTGlzdFJldmVyc2VkLCAqbGlzdE5vZGUsICp0
aGlzKTsgaXRlbTsgaXRlbSA9IHByZXZpb3VzT3JOZXh0SXRlbShpc0xpc3RSZXZlcnNlZCwgKmxp
c3ROb2RlLCAqaXRlbSkpIHsKICAgICAgICAgaWYgKCFpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSkg
ewogICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBoYXMgYmVlbiBtYXJrZWQgZm9yIHVwZGF0ZSBi
ZWZvcmUsIHdlIGNhbiBzYWZlbHkKICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGFsbCB0aGUg
Zm9sbG93aW5nIG9uZXMgaGF2ZSB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oCmluZGV4IDI1NmQ2MjliYTQ5MmVjY2Q5NTBlNjZkODVmYTkyNjU5ZDlkODM3NTIu
LjlhNWM5NDAwYTE2MzMyOGNiN2Y4NGQwMTUzMjc5NGEyMjQ4NGZlNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgdXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAotICAgIHN0YXRpYyB2b2lk
IHVwZGF0ZUl0ZW1WYWx1ZXNGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50Kik7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGl0ZW1Db3VudEZvck9yZGVyZWRMaXN0KGNvbnN0IEhUTUxP
TGlzdEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJdGVtVmFsdWVzRm9yT3JkZXJl
ZExpc3QoY29uc3QgSFRNTE9MaXN0RWxlbWVudCYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBpdGVt
Q291bnRGb3JPcmRlcmVkTGlzdChjb25zdCBIVE1MT0xpc3RFbGVtZW50Jik7CiAKICAgICB2b2lk
IGRpZERlc3Ryb3lMaXN0TWFya2VyKCkgeyBtX21hcmtlciA9IG51bGxwdHI7IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>