<?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>136830</bug_id>
          
          <creation_ts>2014-09-15 12:08:08 -0700</creation_ts>
          <short_desc>Use an AtomicString as key for caching ClassNodeList objects</short_desc>
          <delta_ts>2014-09-15 21:10:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035280</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 12:08:08 -0700</bug_when>
    <thetext>Use an AtomicString as key for caching ClassNodeList objects instead of a String. ClassNodeList is the only type using a String instead of an AtomicString as key in the cache HashTable. This brings some complexity.
I believe this was done to avoid unnecessarily atomizing the String, for performance reasons. However, at the moment, the String gets atomized anyway when constructing the ClassNodeList object. This is because the ClassNodeList::m_classNames member is of SpaceSplitString type and the SpaceSplitString constructor takes an AtomicString in argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035289</commentid>
    <comment_count>1</comment_count>
      <attachid>238137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 12:21:34 -0700</bug_when>
    <thetext>Created attachment 238137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035290</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 12:24:30 -0700</bug_when>
    <thetext>Attachment 238137 did not pass style-queue:


ERROR: Source/WebCore/dom/NodeRareData.h:311:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035323</commentid>
    <comment_count>3</comment_count>
      <attachid>238137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 15:29:41 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt; Source/WebCore/dom/NodeRareData.h:312
&gt; +        + m_tagNodeListCacheNS.size() + m_cachedCollections.size() != 1) {

I think I did what the style checker asked (add the curly brackets), it is still complaining though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035333</commentid>
    <comment_count>4</comment_count>
      <attachid>238137</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-15 16:47:19 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        No new tests, no behavior change.

I disagree. :)

If not already covered, you should have a test ensuring that there are no name conflicts in the cache.

For example:
   getElemensByTagName(&quot;foo&quot;)
   getElementsByClassNames(&quot;foo&quot;)
   ... etc.
should have independent node lists.

If such a test already exist, you should mention it in the changelog.

&gt; Source/WebCore/dom/ClassNodeList.h:45
&gt; +    static PassRef&lt;ClassNodeList&gt; create(ContainerNode&amp; rootNode, const AtomicString&amp; classNames)
&gt;      {
&gt;          return adoptRef(*new ClassNodeList(rootNode, classNames));
&gt;      }

Looks like poor inlining. The create() function is inline and the constructor is out of line.

&gt; Source/WebCore/dom/ContainerNode.cpp:1057
&gt;  PassRefPtr&lt;NodeList&gt; ContainerNode::getElementsByClassName(const String&amp; classNames)

You should convert this argument to AtomicString to avoid any conversion on the call sites.

&gt; Source/WebCore/dom/NodeRareData.h:-139
&gt; -        NodeListNameCacheMap::AddResult result = m_nameCaches.fastAdd(namedNodeListKey&lt;T&gt;(name), nullptr);

Shouldn&apos;t you also update namedNodeListKey() to remove the generalization?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035335</commentid>
    <comment_count>5</comment_count>
      <attachid>238137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 16:51:44 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:23
&gt;&gt; +        No new tests, no behavior change.
&gt; 
&gt; I disagree. :)
&gt; 
&gt; If not already covered, you should have a test ensuring that there are no name conflicts in the cache.
&gt; 
&gt; For example:
&gt;    getElemensByTagName(&quot;foo&quot;)
&gt;    getElementsByClassNames(&quot;foo&quot;)
&gt;    ... etc.
&gt; should have independent node lists.
&gt; 
&gt; If such a test already exist, you should mention it in the changelog.

I will check if we have a test and I can easily add one if missing. In any case, this case is not an issue because both the &lt;NodeList Type, AtomicString&gt; pair is used for hashing.

&gt;&gt; Source/WebCore/dom/NodeRareData.h:-139
&gt;&gt; -        NodeListNameCacheMap::AddResult result = m_nameCaches.fastAdd(namedNodeListKey&lt;T&gt;(name), nullptr);
&gt; 
&gt; Shouldn&apos;t you also update namedNodeListKey() to remove the generalization?

I updated namedNodeListKey() below already, to take an AtomicString in argument instead of a String. Note that the generalization is for the NodeList type, not the String type though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035358</commentid>
    <comment_count>6</comment_count>
      <attachid>238137</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-09-15 18:58:59 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt;&gt; Source/WebCore/dom/NodeRareData.h:312
&gt;&gt; +        + m_tagNodeListCacheNS.size() + m_cachedCollections.size() != 1) {
&gt; 
&gt; I think I did what the style checker asked (add the curly brackets), it is still complaining though.

We shouldn&apos;t have curly brackets here.  &quot;return false&quot; is a single line statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035359</commentid>
    <comment_count>7</comment_count>
      <attachid>238137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 19:01:18 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/NodeRareData.h:312
&gt;&gt;&gt; +        + m_tagNodeListCacheNS.size() + m_cachedCollections.size() != 1) {
&gt;&gt; 
&gt;&gt; I think I did what the style checker asked (add the curly brackets), it is still complaining though.
&gt; 
&gt; We shouldn&apos;t have curly brackets here.  &quot;return false&quot; is a single line statement.

I added them because I thought this was what the style script meant:
&quot;ERROR: Source/WebCore/dom/NodeRareData.h:311:  Multi line control clauses should use braces.&quot;

Anyway, I&apos;ll remove them since the script still isn&apos;t happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035362</commentid>
    <comment_count>8</comment_count>
      <attachid>238152</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 19:28:50 -0700</bug_when>
    <thetext>Created attachment 238152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035363</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 19:30:02 -0700</bug_when>
    <thetext>Attachment 238152 did not pass style-queue:


ERROR: Source/WebCore/dom/NodeRareData.h:311:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035366</commentid>
    <comment_count>10</comment_count>
      <attachid>238137</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-15 19:31:02 -0700</bug_when>
    <thetext>Comment on attachment 238137
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:23
&gt;&gt;&gt; +        No new tests, no behavior change.
&gt;&gt; 
&gt;&gt; I disagree. :)
&gt;&gt; 
&gt;&gt; If not already covered, you should have a test ensuring that there are no name conflicts in the cache.
&gt;&gt; 
&gt;&gt; For example:
&gt;&gt;    getElemensByTagName(&quot;foo&quot;)
&gt;&gt;    getElementsByClassNames(&quot;foo&quot;)
&gt;&gt;    ... etc.
&gt;&gt; should have independent node lists.
&gt;&gt; 
&gt;&gt; If such a test already exist, you should mention it in the changelog.
&gt; 
&gt; I will check if we have a test and I can easily add one if missing. In any case, this case is not an issue because both the &lt;NodeList Type, AtomicString&gt; pair is used for hashing.

I added a test even (my patch does not change web-exposed behavior though) and the test would pass with or without my patch.

&gt;&gt; Source/WebCore/dom/ClassNodeList.h:45
&gt;&gt;      }
&gt; 
&gt; Looks like poor inlining. The create() function is inline and the constructor is out of line.

Done.

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:1057
&gt;&gt;  PassRefPtr&lt;NodeList&gt; ContainerNode::getElementsByClassName(const String&amp; classNames)
&gt; 
&gt; You should convert this argument to AtomicString to avoid any conversion on the call sites.

Done (it is only called by the JS bindings).

&gt;&gt;&gt;&gt; Source/WebCore/dom/NodeRareData.h:312
&gt;&gt;&gt;&gt; +        + m_tagNodeListCacheNS.size() + m_cachedCollections.size() != 1) {
&gt;&gt;&gt; 
&gt;&gt;&gt; I think I did what the style checker asked (add the curly brackets), it is still complaining though.
&gt;&gt; 
&gt;&gt; We shouldn&apos;t have curly brackets here.  &quot;return false&quot; is a single line statement.
&gt; 
&gt; I added them because I thought this was what the style script meant:
&gt; &quot;ERROR: Source/WebCore/dom/NodeRareData.h:311:  Multi line control clauses should use braces.&quot;
&gt; 
&gt; Anyway, I&apos;ll remove them since the script still isn&apos;t happy.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035367</commentid>
    <comment_count>11</comment_count>
      <attachid>238152</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-15 19:46:38 -0700</bug_when>
    <thetext>Comment on attachment 238152
Patch

Looks great. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035368</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-15 19:50:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; I will check if we have a test and I can easily add one if missing. In any case, this case is not an issue because both the &lt;NodeList Type, AtomicString&gt; pair is used for hashing.
&gt; 
&gt; I added a test even (my patch does not change web-exposed behavior though) and the test would pass with or without my patch.

I was not doubting the correctness of your patch. It did look absolutely correct the first round.

The reason I asked for the test is to improve the test coverage in case any future change breaks this. Since we are not rushing to finish a release, we can take our time to make perfect patches. We should take any opportunity to improve our (terrifyingly bad) test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035380</commentid>
    <comment_count>13</comment_count>
      <attachid>238152</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 21:10:12 -0700</bug_when>
    <thetext>Comment on attachment 238152
Patch

Clearing flags on attachment: 238152

Committed r173648: &lt;http://trac.webkit.org/changeset/173648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035381</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 21:10:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238137</attachid>
            <date>2014-09-15 12:21:34 -0700</date>
            <delta_ts>2014-09-15 19:31:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136830-20140915122131.patch</filename>
            <type>text/plain</type>
            <size>14154</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTI1MjE4OWU3YmRlNWVm
Y2RjMWQzZGE4YWY3MzE5OTBlN2IzMzYyZi4uYzc1Y2RmODBjODQyMjc1OTgwMGNmMjNiMDRjNjhk
MjBlOTQwNDZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcxIEBACiAyMDE0LTA5LTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVXNlIGFuIEF0b21pY1N0cmlu
ZyBhcyBrZXkgZm9yIGNhY2hpbmcgQ2xhc3NOb2RlTGlzdCBvYmplY3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4MzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYW4gQXRvbWljU3RyaW5nIGFz
IGtleSBmb3IgY2FjaGluZyBDbGFzc05vZGVMaXN0IG9iamVjdHMgaW5zdGVhZCBvZgorICAgICAg
ICBhIFN0cmluZy4gQ2xhc3NOb2RlTGlzdCBpcyB0aGUgb25seSB0eXBlIHVzaW5nIGEgU3RyaW5n
IGluc3RlYWQgb2YgYW4KKyAgICAgICAgQXRvbWljU3RyaW5nIGFzIGtleSBpbiB0aGUgY2FjaGUg
SGFzaFRhYmxlLiBUaGlzIGJyaW5ncyBzb21lCisgICAgICAgIGNvbXBsZXhpdHkuCisKKyAgICAg
ICAgSSBiZWxpZXZlIHRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBhdG9taXpp
bmcgdGhlIFN0cmluZywKKyAgICAgICAgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIEhvd2V2ZXIs
IGF0IHRoZSBtb21lbnQsIHRoZSBTdHJpbmcgZ2V0cworICAgICAgICBhdG9taXplZCBhbnl3YXkg
d2hlbiBjb25zdHJ1Y3RpbmcgdGhlIENsYXNzTm9kZUxpc3Qgb2JqZWN0LiBUaGlzIGlzCisgICAg
ICAgIGJlY2F1c2UgdGhlIENsYXNzTm9kZUxpc3Q6Om1fY2xhc3NOYW1lcyBtZW1iZXIgaXMgb2Yg
U3BhY2VTcGxpdFN0cmluZworICAgICAgICB0eXBlIGFuZCB0aGUgU3BhY2VTcGxpdFN0cmluZyBj
b25zdHJ1Y3RvciB0YWtlcyBhbiBBdG9taWNTdHJpbmcgaW4KKyAgICAgICAgYXJndW1lbnQuCisK
KyAgICAgICAgVXNpbmcgYW4gQXRvbWljU3RyaW5nIHRvIGNhY2hlIENsYXNzTm9kZUxpc3RzIHNp
bXBsaWZpZXMgdGhlIGNvZGUgcXVpdGUKKyAgICAgICAgYSBiaXQgYW5kIGRlY3JlYXNlcyB0aGUg
c2l6ZSBvZiBOb2RlTGlzdHNOb2RlRGF0YSBhcyB3ZWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAg
ICAgUmVtb3ZlIHN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIGFkZENhY2hlV2l0aE5hbWUoKSBhcyBp
dCB3YXMgcmVtb3ZlZC4KKworICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsYXNzTm9kZUxpc3Q6On5DbGFzc05vZGVMaXN0KToKKyAgICAgICAgVXBk
YXRlIHRoZSBjb25zdHJ1Y3RvciB0byB0YWtlIGFuIEF0b21pY1N0cmluZyBpbiBhcmd1bWVudCBp
bnN0ZWFkIG9mCisgICAgICAgIGEgU3RyaW5nLCBmb3IgY2xhcml0eS4gVGhlIFN0cmluZyBnZXRz
IGF0b21pemVkIHdoZW4gaW5pdGlhbGl6aW5nCisgICAgICAgIG1fY2xhc3NOYW1lcyBhbnl3YXku
CisKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QpOgorICAg
ICAgICBDYWxsIHJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUoKSBpbnN0ZWFkIG9mIHJlbW92ZUNh
Y2hlV2l0aE5hbWUoKSBub3cKKyAgICAgICAgdGhhdCBtX29yaWdpbmFsQ2xhc3NOYW1lcyBpcyBh
biBBdG9taWNTdHJpbmcuCisKKyAgICAgICAgKiBkb20vQ2xhc3NOb2RlTGlzdC5oOgorICAgICAg
ICBVc2UgQXRvbWljU3RyaW5nIGluc3RlYWQgb2YgU3RyaW5nIHR5cGUgZm9yIGNsYXNzTmFtZXMs
IGluIGJvdGggdGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGFuZCB0aGUgbV9vcmln
aW5hbENsYXNzTmFtZXMgZGF0YSBtZW1iZXIuCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKToKKyAgICAgICAgQ2FsbCBhZGRDYWNoZVdpdGhBdG9taWNOYW1lKCkgaW5zdGVhZCBv
ZiBhZGRDYWNoZVdpdGhOYW1lKCkgbm93IHRoYXQKKyAgICAgICAgYWRkQ2FjaGVXaXRoTmFtZSgp
IGhhcyBiZWVuIHJlbW92ZWQuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIFN0
b3AgaW52YWxpZGF0aW5nIG1fbmFtZUNhY2hlcyBhcyB0aGlzIEhhc2hNYXAgbm8gbG9uZ2VyIGV4
aXN0cy4KKworICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdENhY2hlTWFwRW50cnlIYXNoOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdENhY2hlTWFwRW50cnlI
YXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHREb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6bmFtZWROb2RlTGlzdEtleSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6ZGVsZXRlVGhpc0FuZFVwZGF0
ZU5vZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdpdGhOYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpyZW1vdmVDYWNoZVdpdGhOYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgLSBEcm9wIGFkZENhY2hlV2l0aE5hbWUoKSAvIHJlbW92ZUNhY2hlV2l0aE5h
bWUoKSBub3cgdGhhdCBubyBOb2RlTGlzdAorICAgICAgICAgIHVzZXMgYSBTdHJpbmcgYXMgSGFz
aE1hcCBrZXkuCisgICAgICAgIC0gRHJvcCBtX25hbWVDYWNoZXMgbm93IHRoYXQgQ2xhc3NOb2Rl
TGlzdHMgYXJlIGNhY2hlZCBpbgorICAgICAgICAgIG1fYXRvbWljTmFtZUNhY2hlcyBpbnN0ZWFk
LgorICAgICAgICAtIFJlbW92ZSBTdHJpbmdUeXBlIHRlbXBsYXRlIHBhcmFtZXRlciBhbmQgaGFy
ZGNvZGUgQXRvbWljU3RyaW5nCisgICAgICAgICAgaW5zdGVhZC4KKworMjAxNC0wOS0xNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEF2b2lkIHJlZHVuZGFudCBp
c0VsZW1lbnROb2RlKCkgY2hlY2tzIGluIFRyYXZlcnNhbDxIVE1MKkVsZW1lbnQ+IC8gVHJhdmVy
c2FsPFNWRypFbGVtZW50PgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM2NzE5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3Jk
ZXIgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCmluZGV4IDBiMTc3OTYwMjE2YTJlM2Q0
ZTgxZDBjYjUxY2U1ZDc2ODhiNDI4NDguLjk0OGEzNGZkNWU4Nzc4YTAzMGM2MDk1MTBhOWM4NWEx
YjI0MTJlYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpAQCAtNjE0MCw3ICs2MTQwLDYgQEAgX19aTjdX
ZWJDb3JlMjdKU0RPTUNvcmVFeGNlcHRpb25Qcm90b3R5cGUxOGdldE93blByb3BlcnR5U2xvdEVQ
TjNKU0M2SlNDZWxsRVBOUzEKIF9fWk4zSlNDMjFnZXRTdGF0aWNQcm9wZXJ0eVNsb3RJTjdXZWJD
b3JlMjdKU0RPTUNvcmVFeGNlcHRpb25Qcm90b3R5cGVFTlNfOEpTT2JqZWN0RUVFYlBOU185RXhl
Y1N0YXRlRVBLTlNfOUhhc2hUYWJsZUVQVF9OU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0
eVNsb3RFCiBfX1pON1dlYkNvcmU0OGpzRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dHNCeUNsYXNzTmFtZUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlNE5vZGUyMmdldEVs
ZW1lbnRzQnlDbGFzc05hbWVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxN05vZGVMaXN0
c05vZGVEYXRhMTZhZGRDYWNoZVdpdGhOYW1lSU5TXzEzQ2xhc3NOb2RlTGlzdEVFRU4zV1RGMTBQ
YXNzUmVmUHRySVRfRUVQTlNfNE5vZGVFTlNfMTRDb2xsZWN0aW9uVHlwZUVSS05TM182U3RyaW5n
RQogX19aTjdXZWJDb3JlMTNDbGFzc05vZGVMaXN0QzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5v
ZGVFRUVSS05TMV82U3RyaW5nRQogX19aTjdXZWJDb3JlMTNDbGFzc05vZGVMaXN0QzJFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVSS05TMV82U3RyaW5nRQogX19aTjdXZWJDb3JlMjBmaXJz
dE1hdGNoaW5nRWxlbWVudElOU18xM0NsYXNzTm9kZUxpc3RFRUVQTlNfN0VsZW1lbnRFUEtUX1BO
U18xM0NvbnRhaW5lck5vZGVFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKaW5kZXgg
NTk1YjcwNzZiZjUwMDM1YWNiNDg5YmIzY2VhNzRmZGMzMDZmOWY2OC4uNTM5MmE0ZmFjZTMyMDhk
YjFiOTQ3NDQ3YjlkODgzN2NjNzlmODk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NsYXNzTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9k
ZUxpc3Q6OkNsYXNzTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IFN0cmlu
ZyYgY2xhc3NOYW1lcykKK0NsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QoQ29udGFpbmVyTm9k
ZSYgcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lcykKICAgICA6IENhY2hl
ZExpdmVOb2RlTGlzdChyb290Tm9kZSwgSW52YWxpZGF0ZU9uQ2xhc3NBdHRyQ2hhbmdlKQogICAg
ICwgbV9jbGFzc05hbWVzKGNsYXNzTmFtZXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpCiAg
ICAgLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyhjbGFzc05hbWVzKQpAQCAtNDQsNyArNDQsNyBAQCBD
bGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25z
dCBTdHJpbmcmIGNsYXNzTmFtZXMpCiAKIENsYXNzTm9kZUxpc3Q6On5DbGFzc05vZGVMaXN0KCkK
IHsKLSAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoTmFtZSh0aGlz
LCBtX29yaWdpbmFsQ2xhc3NOYW1lcyk7CisgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJl
bW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgbV9vcmlnaW5hbENsYXNzTmFtZXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xhc3NOb2RlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAppbmRl
eCA5MDIyM2E0MjkxZGM2ZDRkNTZiZmZhYmQyODAwNmU3ODgwMmEzMDJlLi41MDIzNGM4OGRjMWI2
NTZhMDRiZGFkMmQzZmVjMTY2YTNkZTBhYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xhc3NOb2RlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0
LmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDbGFzc05v
ZGVMaXN0IGZpbmFsIDogcHVibGljIENhY2hlZExpdmVOb2RlTGlzdDxDbGFzc05vZGVMaXN0PiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWY8Q2xhc3NOb2RlTGlzdD4gY3JlYXRlKENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCisgICAgc3RhdGlj
IFBhc3NSZWY8Q2xhc3NOb2RlTGlzdD4gY3JlYXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZXMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDbGFzc05vZGVMaXN0KHJvb3ROb2RlLCBjbGFzc05hbWVzKSk7CiAgICAgfQpA
QCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSb290ZWRBdERv
Y3VtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKLSAg
ICBDbGFzc05vZGVMaXN0KENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNs
YXNzTmFtZXMpOworICAgIENsYXNzTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lcyk7CiAKICAgICBTcGFjZVNwbGl0U3RyaW5nIG1f
Y2xhc3NOYW1lczsKLSAgICBTdHJpbmcgbV9vcmlnaW5hbENsYXNzTmFtZXM7CisgICAgQXRvbWlj
U3RyaW5nIG1fb3JpZ2luYWxDbGFzc05hbWVzOwogfTsKIAogaW5saW5lIGJvb2wgQ2xhc3NOb2Rl
TGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAppbmRleCA2NWI3ZWU4ZjM4YzY1MWEwY2U0NzBlY2RmNDdjMmNlZGZl
OWJkZTIyLi4xMWNlZDgyYzU3Y2NjNWY4ZjJiZTQ1MmEwZGNkYzQ1YWFhY2Y2Yzg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJp
bmcmIGVsZW1lbnROYW1lKQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBDb250YWluZXJOb2RlOjpn
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKIHsKLSAgICBy
ZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhOYW1l
PENsYXNzTm9kZUxpc3Q+KCp0aGlzLCBjbGFzc05hbWVzKTsKKyAgICByZXR1cm4gZW5zdXJlUmFy
ZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPENsYXNzTm9k
ZUxpc3Q+KCp0aGlzLCBjbGFzc05hbWVzKTsKIH0KIAogUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0
PiBDb250YWluZXJOb2RlOjpyYWRpb05vZGVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCA2ZTA4ZjczNmI2YjI0MzI5ZGNhNmNlMmM2OTkxM2Q3NmMwZDJl
YjQ1Li5iN2ZmNmYyZmQ2ZGQ2ZGRiMjEzNGYwYjJmNGMyYjBlN2VlMjkwODk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0xNjgxLDkgKzE2ODEsNiBAQCB2b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZh
bGlkYXRlQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQogICAgIGZvciAoYXV0
byYgYXRvbWljTmFtZSA6IG1fYXRvbWljTmFtZUNhY2hlcykKICAgICAgICAgYXRvbWljTmFtZS52
YWx1ZS0+aW52YWxpZGF0ZUNhY2hlRm9yQXR0cmlidXRlKGF0dHJOYW1lKTsKIAotICAgIGZvciAo
YXV0byYgbmFtZSA6IG1fbmFtZUNhY2hlcykKLSAgICAgICAgbmFtZS52YWx1ZS0+aW52YWxpZGF0
ZUNhY2hlRm9yQXR0cmlidXRlKGF0dHJOYW1lKTsKLQogICAgIGZvciAoYXV0byYgY29sbGVjdGlv
biA6IG1fY2FjaGVkQ29sbGVjdGlvbnMpCiAgICAgICAgIGNvbGxlY3Rpb24udmFsdWUtPmludmFs
aWRhdGVDYWNoZShhdHRyTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCBk
YjUwOWY1N2I0NjVjOTVlNWJhMTJiMjMxYzY1NzYwOWRiOWIzZGRlLi5jZjIyNzllYjk1MzA1MDdl
NzRjNmFlZDdjNDkzNjEyYmY5ZDE4NmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBA
IC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJUZXh0VHJhY2suaCIKQEAgLTEwNiwxOSArMTA1LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9lbXB0eUNoaWxkTm9kZUxpc3QgPSBudWxscHRyOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBTdHJpbmdUeXBlPgogICAgIHN0cnVjdCBOb2RlTGlzdENhY2hlTWFwRW50cnlIYXNo
IHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qgc3RkOjpwYWlyPHVuc2lnbmVk
IGNoYXIsIFN0cmluZ1R5cGU+JiBlbnRyeSkKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3Qgc3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0cmluZz4mIGVudHJ5KQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEhhc2g8U3RyaW5nVHlwZT46Okhhc2g6
Omhhc2goZW50cnkuc2Vjb25kKSArIGVudHJ5LmZpcnN0OworICAgICAgICAgICAgcmV0dXJuIERl
ZmF1bHRIYXNoPEF0b21pY1N0cmluZz46Okhhc2g6Omhhc2goZW50cnkuc2Vjb25kKSArIGVudHJ5
LmZpcnN0OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHN0ZDo6
cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmdUeXBlPiYgYSwgY29uc3Qgc3RkOjpwYWlyPHVuc2ln
bmVkIGNoYXIsIFN0cmluZ1R5cGU+JiBiKSB7IHJldHVybiBhLmZpcnN0ID09IGIuZmlyc3QgJiYg
RGVmYXVsdEhhc2g8U3RyaW5nVHlwZT46Okhhc2g6OmVxdWFsKGEuc2Vjb25kLCBiLnNlY29uZCk7
IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBEZWZhdWx0SGFzaDxTdHJpbmdUeXBlPjo6SGFzaDo6c2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQ7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHN0ZDo6cGFpcjx1bnNp
Z25lZCBjaGFyLCBBdG9taWNTdHJpbmc+JiBhLCBjb25zdCBzdGQ6OnBhaXI8dW5zaWduZWQgY2hh
ciwgQXRvbWljU3RyaW5nPiYgYikgeyByZXR1cm4gYS5maXJzdCA9PSBiLmZpcnN0ICYmIERlZmF1
bHRIYXNoPEF0b21pY1N0cmluZz46Okhhc2g6OmVxdWFsKGEuc2Vjb25kLCBiLnNlY29uZCk7IH0K
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBEZWZhdWx0SGFzaDxBdG9taWNTdHJpbmc+OjpIYXNoOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZDsKICAgICB9OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25l
ZCBjaGFyLCBBdG9taWNTdHJpbmc+LCBMaXZlTm9kZUxpc3QqLCBOb2RlTGlzdENhY2hlTWFwRW50
cnlIYXNoPEF0b21pY1N0cmluZz4+IE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgU3RyaW5nPiwgTGl2ZU5vZGVM
aXN0KiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaDxTdHJpbmc+PiBOb2RlTGlzdE5hbWVDYWNo
ZU1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21p
Y1N0cmluZz4sIEhUTUxDb2xsZWN0aW9uKiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaDxBdG9t
aWNTdHJpbmc+PiBDb2xsZWN0aW9uQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNTdHJpbmc+LCBMaXZlTm9kZUxpc3QqLCBOb2RlTGlz
dENhY2hlTWFwRW50cnlIYXNoPiBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0cmluZz4sIEhUTUxD
b2xsZWN0aW9uKiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaD4gQ29sbGVjdGlvbkNhY2hlTWFw
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBUYWdOb2RlTGlzdCo+IFRhZ05v
ZGVMaXN0Q2FjaGVOUzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbnRh
aW5lclR5cGU+CkBAIC0xMzMsMTggKzEzMCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxp
c3Q7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBBTFdBWVNfSU5MSU5F
IFBhc3NSZWY8VD4gYWRkQ2FjaGVXaXRoTmFtZShDb250YWluZXJOb2RlJiBub2RlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1fbmFtZUNhY2hlcy5mYXN0QWRkKG5hbWVkTm9kZUxpc3RLZXk8VD4obmFt
ZSksIG51bGxwdHIpOwotICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQmPigqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Ci0KLSAg
ICAgICAgYXV0byBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gJmxpc3QuZ2V0KCk7Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAg
IH0KLQogICAgIEFMV0FZU19JTkxJTkUgUGFzc1JlZjxUYWdOb2RlTGlzdD4gYWRkQ2FjaGVXaXRo
UXVhbGlmaWVkTmFtZShDb250YWluZXJOb2RlJiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAgewogICAgICAg
ICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsK
QEAgLTE5NiwxNSArMTgxLDYgQEAgcHVibGljOgogICAgICAgICBtX2F0b21pY05hbWVDYWNoZXMu
cmVtb3ZlKG5hbWVkTm9kZUxpc3RLZXk8Tm9kZUxpc3RUeXBlPihuYW1lKSk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KLSAgICB2b2lkIHJlbW92ZUNhY2hlV2l0
aE5hbWUoTm9kZUxpc3RUeXBlKiBsaXN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgewotICAg
ICAgICBBU1NFUlQobGlzdCA9PSBtX25hbWVDYWNoZXMuZ2V0KG5hbWVkTm9kZUxpc3RLZXk8Tm9k
ZUxpc3RUeXBlPihuYW1lKSkpOwotICAgICAgICBpZiAoZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVS
YXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KGxpc3QtPm93bmVyTm9kZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9uYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0
S2V5PE5vZGVMaXN0VHlwZT4obmFtZSkpOwotICAgIH0KLQogICAgIHZvaWQgcmVtb3ZlQ2FjaGVX
aXRoUXVhbGlmaWVkTmFtZShMaXZlTm9kZUxpc3QqIGxpc3QsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICB7CiAgICAg
ICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkp
OwpAQCAtMjI1LDcgKzIwMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMo
Y29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUgPSAwKTsKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkg
JiYgbV9uYW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX2NhY2hlZENvbGxlY3Rpb25zLmlzRW1wdHko
KSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX2F0
b21pY05hbWVDYWNoZXMuaXNFbXB0eSgpICYmIG1fY2FjaGVkQ29sbGVjdGlvbnMuaXNFbXB0eSgp
ICYmIG1fdGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1wdHkoKTsKICAgICB9CiAKICAgICB2b2lkIGFk
b3B0VHJlZVNjb3BlKCkKQEAgLTI0NCw5ICsyMjAsNiBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAo
YXV0byYgY2FjaGUgOiBtX2F0b21pY05hbWVDYWNoZXMudmFsdWVzKCkpCiAgICAgICAgICAgICBj
YWNoZS0+aW52YWxpZGF0ZUNhY2hlKCpvbGREb2N1bWVudCk7CiAKLSAgICAgICAgZm9yIChhdXRv
JiBjYWNoZSA6IG1fbmFtZUNhY2hlcy52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNhY2hlLT5pbnZh
bGlkYXRlQ2FjaGUoKm9sZERvY3VtZW50KTsKLQogICAgICAgICBmb3IgKGF1dG8mIGxpc3QgOiBt
X3RhZ05vZGVMaXN0Q2FjaGVOUy52YWx1ZXMoKSkgewogICAgICAgICAgICAgQVNTRVJUKCFsaXN0
LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBsaXN0LT5pbnZhbGlkYXRlQ2Fj
aGUoKm9sZERvY3VtZW50KTsKQEAgLTI2Myw5ICsyMzYsOSBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+Ci0gICAgc3RkOjpwYWlyPHVuc2lnbmVk
IGNoYXIsIFN0cmluZz4gbmFtZWROb2RlTGlzdEtleShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAg
c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0cmluZz4gbmFtZWROb2RlTGlzdEtleShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjpwYWly
PHVuc2lnbmVkIGNoYXIsIFN0cmluZz4oTm9kZUxpc3RUeXBlSWRlbnRpZmllcjxOb2RlTGlzdFR5
cGU+Ojp2YWx1ZSgpLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBj
aGFyLCBBdG9taWNTdHJpbmc+KE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8Tm9kZUxpc3RUeXBlPjo6
dmFsdWUoKSwgbmFtZSk7CiAgICAgfQogCiAgICAgYm9vbCBkZWxldGVUaGlzQW5kVXBkYXRlTm9k
ZVJhcmVEYXRhSWZBYm91dFRvUmVtb3ZlTGFzdExpc3QoTm9kZSYpOwpAQCAtMjc1LDcgKzI0OCw2
IEBAIHByaXZhdGU6CiAgICAgRW1wdHlOb2RlTGlzdCogbV9lbXB0eUNoaWxkTm9kZUxpc3Q7CiAK
ICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcCBtX2F0b21pY05hbWVDYWNoZXM7Ci0gICAg
Tm9kZUxpc3ROYW1lQ2FjaGVNYXAgbV9uYW1lQ2FjaGVzOwogICAgIFRhZ05vZGVMaXN0Q2FjaGVO
UyBtX3RhZ05vZGVMaXN0Q2FjaGVOUzsKICAgICBDb2xsZWN0aW9uQ2FjaGVNYXAgbV9jYWNoZWRD
b2xsZWN0aW9uczsKIH07CkBAIC0zMzYsOSArMzA4LDEwIEBAIHByaXZhdGU6CiBpbmxpbmUgYm9v
bCBOb2RlTGlzdHNOb2RlRGF0YTo6ZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJv
dXRUb1JlbW92ZUxhc3RMaXN0KE5vZGUmIG93bmVyTm9kZSkKIHsKICAgICBBU1NFUlQob3duZXJO
b2RlLm5vZGVMaXN0cygpID09IHRoaXMpOwotICAgIGlmICgobV9jaGlsZE5vZGVMaXN0ID8gMSA6
IDApICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgbV9hdG9taWNOYW1lQ2FjaGVz
LnNpemUoKSArIG1fbmFtZUNhY2hlcy5zaXplKCkKLSAgICAgICAgKyBtX3RhZ05vZGVMaXN0Q2Fj
aGVOUy5zaXplKCkgKyBtX2NhY2hlZENvbGxlY3Rpb25zLnNpemUoKSAhPSAxKQorICAgIGlmICgo
bV9jaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6IDAp
ICsgbV9hdG9taWNOYW1lQ2FjaGVzLnNpemUoKQorICAgICAgICArIG1fdGFnTm9kZUxpc3RDYWNo
ZU5TLnNpemUoKSArIG1fY2FjaGVkQ29sbGVjdGlvbnMuc2l6ZSgpICE9IDEpIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KICAgICBvd25lck5vZGUuY2xlYXJOb2RlTGlzdHMoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238152</attachid>
            <date>2014-09-15 19:28:50 -0700</date>
            <delta_ts>2014-09-15 21:10:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136830-20140915192847.patch</filename>
            <type>text/plain</type>
            <size>16976</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMwMjdiYzRiYzA0MjFm
OTRkYjI2YmExZGY5ZjM3OTAxMzFmNGM0My4uYzRlZWNlNDU0MmNmNjBjOWUzOWY3ZTk3MGU4M2Y5
MWIyOGNjNThiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE0LTA5LTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGFuIEF0b21pY1N0cmlu
ZyBhcyBrZXkgZm9yIGNhY2hpbmcgQ2xhc3NOb2RlTGlzdCBvYmplY3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4MzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYW4gQXRvbWljU3RyaW5nIGFz
IGtleSBmb3IgY2FjaGluZyBDbGFzc05vZGVMaXN0IG9iamVjdHMgaW5zdGVhZCBvZgorICAgICAg
ICBhIFN0cmluZy4gQ2xhc3NOb2RlTGlzdCBpcyB0aGUgb25seSB0eXBlIHVzaW5nIGEgU3RyaW5n
IGluc3RlYWQgb2YgYW4KKyAgICAgICAgQXRvbWljU3RyaW5nIGFzIGtleSBpbiB0aGUgY2FjaGUg
SGFzaFRhYmxlLiBUaGlzIGJyaW5ncyBzb21lCisgICAgICAgIGNvbXBsZXhpdHkuCisKKyAgICAg
ICAgSSBiZWxpZXZlIHRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBhdG9taXpp
bmcgdGhlIFN0cmluZywKKyAgICAgICAgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIEhvd2V2ZXIs
IGF0IHRoZSBtb21lbnQsIHRoZSBTdHJpbmcgZ2V0cworICAgICAgICBhdG9taXplZCBhbnl3YXkg
d2hlbiBjb25zdHJ1Y3RpbmcgdGhlIENsYXNzTm9kZUxpc3Qgb2JqZWN0LiBUaGlzIGlzCisgICAg
ICAgIGJlY2F1c2UgdGhlIENsYXNzTm9kZUxpc3Q6Om1fY2xhc3NOYW1lcyBtZW1iZXIgaXMgb2Yg
U3BhY2VTcGxpdFN0cmluZworICAgICAgICB0eXBlIGFuZCB0aGUgU3BhY2VTcGxpdFN0cmluZyBj
b25zdHJ1Y3RvciB0YWtlcyBhbiBBdG9taWNTdHJpbmcgaW4KKyAgICAgICAgYXJndW1lbnQuCisK
KyAgICAgICAgVXNpbmcgYW4gQXRvbWljU3RyaW5nIHRvIGNhY2hlIENsYXNzTm9kZUxpc3RzIHNp
bXBsaWZpZXMgdGhlIGNvZGUgcXVpdGUKKyAgICAgICAgYSBiaXQgYW5kIGRlY3JlYXNlcyB0aGUg
c2l6ZSBvZiBOb2RlTGlzdHNOb2RlRGF0YSBhcyB3ZWxsLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
ZG9tL2dldEVsZW1lbnRzQnlDbGFzc05hbWUvY29uZmxpY3QtdGFnLW5hbWUuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgUmVtb3ZlIHN5bWJvbCBjb3JyZXNwb25kaW5n
IHRvIGFkZENhY2hlV2l0aE5hbWUoKSBhcyBpdCB3YXMgcmVtb3ZlZC4KKworICAgICAgICAqIGRv
bS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTm9kZUxpc3Q6On5D
bGFzc05vZGVMaXN0KToKKyAgICAgICAgVXBkYXRlIHRoZSBjb25zdHJ1Y3RvciB0byB0YWtlIGFu
IEF0b21pY1N0cmluZyBpbiBhcmd1bWVudCBpbnN0ZWFkIG9mCisgICAgICAgIGEgU3RyaW5nLCBm
b3IgY2xhcml0eS4gVGhlIFN0cmluZyBnZXRzIGF0b21pemVkIHdoZW4gaW5pdGlhbGl6aW5nCisg
ICAgICAgIG1fY2xhc3NOYW1lcyBhbnl3YXkuCisKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTm9k
ZUxpc3Q6OkNsYXNzTm9kZUxpc3QpOgorICAgICAgICBDYWxsIHJlbW92ZUNhY2hlV2l0aEF0b21p
Y05hbWUoKSBpbnN0ZWFkIG9mIHJlbW92ZUNhY2hlV2l0aE5hbWUoKSBub3cKKyAgICAgICAgdGhh
dCBtX29yaWdpbmFsQ2xhc3NOYW1lcyBpcyBhbiBBdG9taWNTdHJpbmcuCisKKyAgICAgICAgKiBk
b20vQ2xhc3NOb2RlTGlzdC5oOgorICAgICAgICBVc2UgQXRvbWljU3RyaW5nIGluc3RlYWQgb2Yg
U3RyaW5nIHR5cGUgZm9yIGNsYXNzTmFtZXMsIGluIGJvdGggdGhlCisgICAgICAgIGNvbnN0cnVj
dG9yIGFyZ3VtZW50IGFuZCB0aGUgbV9vcmlnaW5hbENsYXNzTmFtZXMgZGF0YSBtZW1iZXIuCisK
KyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgQ2FsbCBhZGRDYWNo
ZVdpdGhBdG9taWNOYW1lKCkgaW5zdGVhZCBvZiBhZGRDYWNoZVdpdGhOYW1lKCkgbm93IHRoYXQK
KyAgICAgICAgYWRkQ2FjaGVXaXRoTmFtZSgpIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52
YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIFN0b3AgaW52YWxpZGF0aW5nIG1fbmFtZUNhY2hlcyBh
cyB0aGlzIEhhc2hNYXAgbm8gbG9uZ2VyIGV4aXN0cy4KKworICAgICAgICAqIGRvbS9Ob2RlUmFy
ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdENh
Y2hlTWFwRW50cnlIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVE
YXRhOjpOb2RlTGlzdENhY2hlTWFwRW50cnlIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlz
dHNOb2RlRGF0YTo6YWRvcHREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6bmFtZWROb2RlTGlzdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6ZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxh
c3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpy
ZW1vdmVDYWNoZVdpdGhOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgLSBEcm9wIGFkZENhY2hlV2l0
aE5hbWUoKSAvIHJlbW92ZUNhY2hlV2l0aE5hbWUoKSBub3cgdGhhdCBubyBOb2RlTGlzdAorICAg
ICAgICAgIHVzZXMgYSBTdHJpbmcgYXMgSGFzaE1hcCBrZXkuCisgICAgICAgIC0gRHJvcCBtX25h
bWVDYWNoZXMgbm93IHRoYXQgQ2xhc3NOb2RlTGlzdHMgYXJlIGNhY2hlZCBpbgorICAgICAgICAg
IG1fYXRvbWljTmFtZUNhY2hlcyBpbnN0ZWFkLgorICAgICAgICAtIFJlbW92ZSBTdHJpbmdUeXBl
IHRlbXBsYXRlIHBhcmFtZXRlciBhbmQgaGFyZGNvZGUgQXRvbWljU3RyaW5nCisgICAgICAgICAg
aW5zdGVhZC4KKwogMjAxNC0wOS0xNSAgU2hpdmFrdW1hciBKTSAgPHNoaXZhLmptQHNhbXN1bmcu
Y29tPgogCiAgICAgICAgIFdlYiBDb3JlOiBXZWJzb2NrZXQgc3RhdGUgc2hvdWxkIGJlIHNldCB0
byBjbG9zZWQgaW4gZGlkUmVjZWl2ZU1lc3NhZ2UgY2FsbCBiYWNrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIK
aW5kZXggMGIxNzc5NjAyMTZhMmUzZDRlODFkMGNiNTFjZTVkNzY4OGI0Mjg0OC4uOTQ4YTM0ZmQ1
ZTg3NzhhMDMwYzYwOTUxMGE5Yzg1YTFiMjQxMmViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5vcmRlcgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC02
MTQwLDcgKzYxNDAsNiBAQCBfX1pON1dlYkNvcmUyN0pTRE9NQ29yZUV4Y2VwdGlvblByb3RvdHlw
ZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOM0pTQzZKU0NlbGxFUE5TMQogX19aTjNKU0MyMWdldFN0
YXRpY1Byb3BlcnR5U2xvdElON1dlYkNvcmUyN0pTRE9NQ29yZUV4Y2VwdGlvblByb3RvdHlwZUVO
U184SlNPYmplY3RFRUViUE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxlRVBUX05TXzEyUHJv
cGVydHlOYW1lRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTQ4anNFbGVtZW50UHJv
dG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5Q2xhc3NOYW1lRVBOM0pTQzlFeGVjU3RhdGVFCiBf
X1pON1dlYkNvcmU0Tm9kZTIyZ2V0RWxlbWVudHNCeUNsYXNzTmFtZUVSS04zV1RGNlN0cmluZ0UK
LV9fWk43V2ViQ29yZTE3Tm9kZUxpc3RzTm9kZURhdGExNmFkZENhY2hlV2l0aE5hbWVJTlNfMTND
bGFzc05vZGVMaXN0RUVFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU180Tm9kZUVOU18xNENvbGxl
Y3Rpb25UeXBlRVJLTlMzXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxM0NsYXNzTm9kZUxpc3RDMUVO
M1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRVJLTlMxXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUx
M0NsYXNzTm9kZUxpc3RDMkVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRVJLTlMxXzZTdHJp
bmdFCiBfX1pON1dlYkNvcmUyMGZpcnN0TWF0Y2hpbmdFbGVtZW50SU5TXzEzQ2xhc3NOb2RlTGlz
dEVFRVBOU183RWxlbWVudEVQS1RfUE5TXzEzQ29udGFpbmVyTm9kZUUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
bGFzc05vZGVMaXN0LmNwcAppbmRleCA1OTViNzA3NmJmNTAwMzVhY2I0ODliYjNjZWE3NGZkYzMw
NmY5ZjY4Li5kMjQzMzZhMzZlMmE0NDQwM2M3ODljODUxODljYTg0NTY2MmRjNDdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCkBAIC0zNSwxNiArMzUsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KENvbnRhaW5lck5v
ZGUmIHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCi0gICAgOiBDYWNoZWRMaXZl
Tm9kZUxpc3Qocm9vdE5vZGUsIEludmFsaWRhdGVPbkNsYXNzQXR0ckNoYW5nZSkKLSAgICAsIG1f
Y2xhc3NOYW1lcyhjbGFzc05hbWVzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKQotICAgICwg
bV9vcmlnaW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKK1Bhc3NSZWY8Q2xhc3NOb2RlTGlzdD4g
Q2xhc3NOb2RlTGlzdDo6Y3JlYXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGNsYXNzTmFtZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xhc3NO
b2RlTGlzdChyb290Tm9kZSwgY2xhc3NOYW1lcykpOwogfQogCiBDbGFzc05vZGVMaXN0Ojp+Q2xh
c3NOb2RlTGlzdCgpCiB7Ci0gICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hl
V2l0aE5hbWUodGhpcywgbV9vcmlnaW5hbENsYXNzTmFtZXMpOworICAgIG93bmVyTm9kZSgpLm5v
ZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIG1fb3JpZ2luYWxDbGFz
c05hbWVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05v
ZGVMaXN0LmgKaW5kZXggOTAyMjNhNDI5MWRjNmQ0ZDU2YmZmYWJkMjgwMDZlNzg4MDJhMzAyZS4u
MDRlYmIyMWZhYTUyYWYwNzkyODg3ODhkOWI1YzMxMmY5YTlkMDlkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xhc3NOb2RlTGlzdC5oCkBAIC0zOSwxMCArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENsYXNzTm9kZUxpc3QgZmluYWwgOiBwdWJsaWMgQ2FjaGVkTGl2ZU5vZGVMaXN0PENs
YXNzTm9kZUxpc3Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZjxDbGFzc05vZGVMaXN0
PiBjcmVhdGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1l
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsYXNzTm9kZUxpc3Qocm9v
dE5vZGUsIGNsYXNzTmFtZXMpKTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWY8Q2xhc3NOb2Rl
TGlzdD4gY3JlYXRlKENvbnRhaW5lck5vZGUmLCBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFt
ZXMpOwogCiAgICAgdmlydHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwogCkBAIC01MCwxMiArNDcsMTkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3RlZEF0RG9jdW1lbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgotICAgIENsYXNzTm9kZUxpc3Qo
Q29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcyk7CisgICAg
Q2xhc3NOb2RlTGlzdChDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBjbGFzc05hbWVzKTsKIAogICAgIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwotICAg
IFN0cmluZyBtX29yaWdpbmFsQ2xhc3NOYW1lczsKKyAgICBBdG9taWNTdHJpbmcgbV9vcmlnaW5h
bENsYXNzTmFtZXM7CiB9OwogCitpbmxpbmUgQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChD
b250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWVzKQor
ICAgIDogQ2FjaGVkTGl2ZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25DbGFzc0F0dHJD
aGFuZ2UpCisgICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgZG9jdW1lbnQoKS5pblF1aXJr
c01vZGUoKSkKKyAgICAsIG1fb3JpZ2luYWxDbGFzc05hbWVzKGNsYXNzTmFtZXMpCit7Cit9CisK
IGlubGluZSBib29sIENsYXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50LT5oYXNDbGFzcygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCmluZGV4IDY1YjdlZThmMzhjNjUxYTBjZTQ3MGVjZGY0N2MyY2VkZmU5
YmRlMjIuLjYzZTE3OTE3NWNjMTYwNjNjNTkzYzI5ZjVlNTQ4YTIyMDNkNmVkMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTEwNTQsOSArMTA1NCw5IEBAIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IENvbnRhaW5lck5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmlu
ZyYgZWxlbWVudE5hbWUpCiAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxp
c3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxOYW1lTm9kZUxpc3Q+KCp0aGlzLCBlbGVtZW50
TmFtZSk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUxpc3Q+IENvbnRhaW5lck5vZGU6OmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQorUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gQ29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIGNsYXNzTmFtZXMpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJl
Tm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoTmFtZTxDbGFzc05vZGVMaXN0PigqdGhpcywgY2xhc3NO
YW1lcyk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRk
Q2FjaGVXaXRoQXRvbWljTmFtZTxDbGFzc05vZGVMaXN0PigqdGhpcywgY2xhc3NOYW1lcyk7CiB9
CiAKIFBhc3NSZWZQdHI8UmFkaW9Ob2RlTGlzdD4gQ29udGFpbmVyTm9kZTo6cmFkaW9Ob2RlTGlz
dChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApp
bmRleCA1MTBmYTA0YTFhYmYzZmI3NTU0M2IxMGI0YjE3M2M0Nzc4NmNiOGE5Li41NTYzMzkyMzJh
OWJhMmFiZGRjYTU1ZDRkNzU2NmEyZTYxNzg5MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgUGFzc1Jl
ZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5h
bWUpOwotICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29u
c3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lcyk7CiAgICAgUGFz
c1JlZlB0cjxSYWRpb05vZGVMaXN0PiByYWRpb05vZGVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYp
OwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNmUwOGY3MzZiNmIyNDMyOWRjYTZj
ZTJjNjk5MTNkNzZjMGQyZWI0NS4uYjdmZjZmMmZkNmRkNmRkYjIxMzRmMGIyZjRjMmIwZTdlZTI5
MDg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTY4MSw5ICsxNjgxLDYgQEAgdm9pZCBOb2RlTGlz
dHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFt
ZSkKICAgICBmb3IgKGF1dG8mIGF0b21pY05hbWUgOiBtX2F0b21pY05hbWVDYWNoZXMpCiAgICAg
ICAgIGF0b21pY05hbWUudmFsdWUtPmludmFsaWRhdGVDYWNoZUZvckF0dHJpYnV0ZShhdHRyTmFt
ZSk7CiAKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX25hbWVDYWNoZXMpCi0gICAgICAgIG5hbWUu
dmFsdWUtPmludmFsaWRhdGVDYWNoZUZvckF0dHJpYnV0ZShhdHRyTmFtZSk7Ci0KICAgICBmb3Ig
KGF1dG8mIGNvbGxlY3Rpb24gOiBtX2NhY2hlZENvbGxlY3Rpb25zKQogICAgICAgICBjb2xsZWN0
aW9uLnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgKaW5kZXggZGI1MDlmNTdiNDY1Yzk1ZTViYTEyYjIzMWM2NTc2MDlkYjliM2RkZS4u
NWI3NGJjOWI0MmYwNWJiNGJlMTQ1YWViMTZlMmRjNTdiYzUyZTgxNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmFyZURhdGEuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlRhZ05vZGVMaXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCkBAIC0xMDYsMTkgKzEwNSwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fZW1wdHlDaGlsZE5vZGVMaXN0ID0gbnVsbHB0cjsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KICAgICBzdHJ1Y3QgTm9kZUxpc3RD
YWNoZU1hcEVudHJ5SGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0
ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmdUeXBlPiYgZW50cnkpCisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNTdHJp
bmc+JiBlbnRyeSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPFN0
cmluZ1R5cGU+OjpIYXNoOjpoYXNoKGVudHJ5LnNlY29uZCkgKyBlbnRyeS5maXJzdDsKKyAgICAg
ICAgICAgIHJldHVybiBEZWZhdWx0SGFzaDxBdG9taWNTdHJpbmc+OjpIYXNoOjpoYXNoKGVudHJ5
LnNlY29uZCkgKyBlbnRyeS5maXJzdDsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgU3RyaW5nVHlwZT4mIGEsIGNvbnN0
IHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmdUeXBlPiYgYikgeyByZXR1cm4gYS5maXJz
dCA9PSBiLmZpcnN0ICYmIERlZmF1bHRIYXNoPFN0cmluZ1R5cGU+OjpIYXNoOjplcXVhbChhLnNl
Y29uZCwgYi5zZWNvbmQpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gRGVmYXVsdEhhc2g8U3RyaW5nVHlwZT46Okhhc2g6OnNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5nPiYgYSwgY29uc3Qgc3RkOjpw
YWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0cmluZz4mIGIpIHsgcmV0dXJuIGEuZmlyc3QgPT0g
Yi5maXJzdCAmJiBEZWZhdWx0SGFzaDxBdG9taWNTdHJpbmc+OjpIYXNoOjplcXVhbChhLnNlY29u
ZCwgYi5zZWNvbmQpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gRGVmYXVsdEhhc2g8QXRvbWljU3RyaW5nPjo6SGFzaDo6c2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQ7CiAgICAgfTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxz
dGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5nPiwgTGl2ZU5vZGVMaXN0KiwgTm9k
ZUxpc3RDYWNoZU1hcEVudHJ5SGFzaDxBdG9taWNTdHJpbmc+PiBOb2RlTGlzdEF0b21pY05hbWVD
YWNoZU1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIFN0
cmluZz4sIExpdmVOb2RlTGlzdCosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g8U3RyaW5nPj4g
Tm9kZUxpc3ROYW1lQ2FjaGVNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNp
Z25lZCBjaGFyLCBBdG9taWNTdHJpbmc+LCBIVE1MQ29sbGVjdGlvbiosIE5vZGVMaXN0Q2FjaGVN
YXBFbnRyeUhhc2g8QXRvbWljU3RyaW5nPj4gQ29sbGVjdGlvbkNhY2hlTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5nPiwgTGl2ZU5v
ZGVMaXN0KiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaD4gTm9kZUxpc3RBdG9taWNOYW1lQ2Fj
aGVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9t
aWNTdHJpbmc+LCBIVE1MQ29sbGVjdGlvbiosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g+IENv
bGxlY3Rpb25DYWNoZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgVGFn
Tm9kZUxpc3QqPiBUYWdOb2RlTGlzdENhY2hlTlM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgpAQCAtMTMzLDE4ICsxMzAsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgQUxXQVlTX0lOTElORSBQYXNzUmVmPFQ+IGFkZENhY2hlV2l0aE5hbWUoQ29udGFpbmVyTm9k
ZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIHsKLSAgICAgICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNoZXMuZmFzdEFkZChuYW1lZE5v
ZGVMaXN0S2V5PFQ+KG5hbWUpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUJj4oKnJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUpOwotCi0gICAgICAgIGF1dG8gbGlzdCA9IFQ6OmNyZWF0ZShub2RlLCBuYW1lKTsK
LSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZsaXN0LmdldCgpOwotICAgICAgICBy
ZXR1cm4gbGlzdDsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIFBhc3NSZWY8VGFnTm9kZUxp
c3Q+IGFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUoQ29udGFpbmVyTm9kZSYgbm9kZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KQogICAgIHsKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUs
IG5hbWVzcGFjZVVSSSk7CkBAIC0xOTYsMTUgKzE4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9h
dG9taWNOYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFt
ZSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+Ci0gICAgdm9p
ZCByZW1vdmVDYWNoZVdpdGhOYW1lKE5vZGVMaXN0VHlwZSogbGlzdCwgY29uc3QgU3RyaW5nJiBu
YW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGxpc3QgPT0gbV9uYW1lQ2FjaGVzLmdldChuYW1l
ZE5vZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFtZSkpKTsKLSAgICAgICAgaWYgKGRlbGV0ZVRo
aXNBbmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlzdChsaXN0LT5vd25l
ck5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbmFtZUNhY2hlcy5yZW1v
dmUobmFtZWROb2RlTGlzdEtleTxOb2RlTGlzdFR5cGU+KG5hbWUpKTsKLSAgICB9Ci0KICAgICB2
b2lkIHJlbW92ZUNhY2hlV2l0aFF1YWxpZmllZE5hbWUoTGl2ZU5vZGVMaXN0KiBsaXN0LCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUpCiAgICAgewogICAgICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0b20sIGxvY2FsTmFt
ZSwgbmFtZXNwYWNlVVJJKTsKQEAgLTIyNSw3ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnZhbGlkYXRlQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lID0gMCk7CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2F0b21pY05hbWVD
YWNoZXMuaXNFbXB0eSgpICYmIG1fbmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9jYWNoZWRDb2xs
ZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV90YWdOb2RlTGlzdENhY2hlTlMuaXNFbXB0eSgpOworICAg
ICAgICByZXR1cm4gbV9hdG9taWNOYW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX2NhY2hlZENvbGxl
Y3Rpb25zLmlzRW1wdHkoKSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CiAgICAg
fQogCiAgICAgdm9pZCBhZG9wdFRyZWVTY29wZSgpCkBAIC0yNDQsOSArMjIwLDYgQEAgcHVibGlj
OgogICAgICAgICBmb3IgKGF1dG8mIGNhY2hlIDogbV9hdG9taWNOYW1lQ2FjaGVzLnZhbHVlcygp
KQogICAgICAgICAgICAgY2FjaGUtPmludmFsaWRhdGVDYWNoZSgqb2xkRG9jdW1lbnQpOwogCi0g
ICAgICAgIGZvciAoYXV0byYgY2FjaGUgOiBtX25hbWVDYWNoZXMudmFsdWVzKCkpCi0gICAgICAg
ICAgICBjYWNoZS0+aW52YWxpZGF0ZUNhY2hlKCpvbGREb2N1bWVudCk7Ci0KICAgICAgICAgZm9y
IChhdXRvJiBsaXN0IDogbV90YWdOb2RlTGlzdENhY2hlTlMudmFsdWVzKCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVCghbGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpOwogICAgICAgICAgICAgbGlz
dC0+aW52YWxpZGF0ZUNhY2hlKCpvbGREb2N1bWVudCk7CkBAIC0yNjMsOSArMjM2LDkgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgotICAgIHN0
ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNTdHJpbmc+IG5h
bWVkTm9kZUxpc3RLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+KE5vZGVMaXN0VHlwZUlkZW50
aWZpZXI8Tm9kZUxpc3RUeXBlPjo6dmFsdWUoKSwgbmFtZSk7CisgICAgICAgIHJldHVybiBzdGQ6
OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5nPihOb2RlTGlzdFR5cGVJZGVudGlmaWVy
PE5vZGVMaXN0VHlwZT46OnZhbHVlKCksIG5hbWUpOwogICAgIH0KIAogICAgIGJvb2wgZGVsZXRl
VGhpc0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KE5vZGUmKTsK
QEAgLTI3NSw3ICsyNDgsNiBAQCBwcml2YXRlOgogICAgIEVtcHR5Tm9kZUxpc3QqIG1fZW1wdHlD
aGlsZE5vZGVMaXN0OwogCiAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXAgbV9hdG9taWNO
YW1lQ2FjaGVzOwotICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwIG1fbmFtZUNhY2hlczsKICAgICBU
YWdOb2RlTGlzdENhY2hlTlMgbV90YWdOb2RlTGlzdENhY2hlTlM7CiAgICAgQ29sbGVjdGlvbkNh
Y2hlTWFwIG1fY2FjaGVkQ29sbGVjdGlvbnM7CiB9OwpAQCAtMzM2LDcgKzMwOCw3IEBAIHByaXZh
dGU6CiBpbmxpbmUgYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6ZGVsZXRlVGhpc0FuZFVwZGF0ZU5v
ZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KE5vZGUmIG93bmVyTm9kZSkKIHsKICAg
ICBBU1NFUlQob3duZXJOb2RlLm5vZGVMaXN0cygpID09IHRoaXMpOwotICAgIGlmICgobV9jaGls
ZE5vZGVMaXN0ID8gMSA6IDApICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgbV9h
dG9taWNOYW1lQ2FjaGVzLnNpemUoKSArIG1fbmFtZUNhY2hlcy5zaXplKCkKKyAgICBpZiAoKG1f
Y2hpbGROb2RlTGlzdCA/IDEgOiAwKSArIChtX2VtcHR5Q2hpbGROb2RlTGlzdCA/IDEgOiAwKSAr
IG1fYXRvbWljTmFtZUNhY2hlcy5zaXplKCkKICAgICAgICAgKyBtX3RhZ05vZGVMaXN0Q2FjaGVO
Uy5zaXplKCkgKyBtX2NhY2hlZENvbGxlY3Rpb25zLnNpemUoKSAhPSAxKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgb3duZXJOb2RlLmNsZWFyTm9kZUxpc3RzKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lL2NvbmZsaWN0LXRhZy1u
YW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2dldEVsZW1lbnRzQnlDbGFz
c05hbWUvY29uZmxpY3QtdGFnLW5hbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZWYzODFm
ZmNhNmNkMGRhM2FkNjg0YTExNzU0OGFmMjgyOGVlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lL2NvbmZsaWN0LXRhZy1uYW1l
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitDaGVja3MgdGhhdCBnZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCdmb28nKSBhbmQgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZvbycpIGRvIG5vdCBj
b25mbGljdAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB3aXRoRm9vVGFn
Lmxlbmd0aCBpcyAxCitQQVNTIHdpdGhGb29UYWdbMF0uaWQgaXMgImEiCitQQVNTIHdpdGhGb29D
bGFzcy5sZW5ndGggaXMgMQorUEFTUyB3aXRoRm9vQ2xhc3NbMF0uaWQgaXMgImIiCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9jb25mbGljdC10YWct
bmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9j
b25mbGljdC10YWctbmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiY2M2ZWRjOGY1MTFiNWMwNjhiY2Ex
ZjdlMTcwNGZmOWJmYjExZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lL2NvbmZsaWN0LXRhZy1uYW1lLmh0bWwKQEAgLTAsMCAr
MSwxNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QuanMiPjwvc2NyaXB0PgorCis8Zm9vIGlkPSJhIj48L2Zvbz4KKzxkaXYgaWQ9ImIi
IGNsYXNzPSJmb28iPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0
IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZvbycpIGFuZCBnZXRFbGVtZW50c0J5VGFnTmFtZSgn
Zm9vJykgZG8gbm90IGNvbmZsaWN0Iik7CisKK3ZhciB3aXRoRm9vVGFnID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImZvbyIpOworc2hvdWxkQmUoIndpdGhGb29UYWcubGVuZ3RoIiwg
IjEiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygid2l0aEZvb1RhZ1swXS5pZCIsICJhIik7CisK
K3ZhciB3aXRoRm9vQ2xhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJmb28i
KTsKK3Nob3VsZEJlKCJ3aXRoRm9vQ2xhc3MubGVuZ3RoIiwgIjEiKTsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygid2l0aEZvb0NsYXNzWzBdLmlkIiwgImIiKTsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>