<?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>141192</bug_id>
          
          <creation_ts>2015-02-02 22:33:40 -0800</creation_ts>
          <short_desc>Add removeFirst(value) / removeAll(value) methods to WTF::Vector</short_desc>
          <delta_ts>2015-02-05 20:23:21 -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>Web Template Framework</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>
          
          <blocked>141321</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066377</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-02 22:33:40 -0800</bug_when>
    <thetext>Add removeOne(value) / removeAll(value) convenience methods to WTF::Vector to reduce complexity a bit at call sites.

The naming is inspired by QVector:
http://doc.qt.io/qt-5/qvector.html#removeOne
http://doc.qt.io/qt-5/qvector.html#removeAll

I am planning to add overloads for these taking a lambda function for matching in a follow-up patch as well. I have seen quite a few Vector::remove(index) call sites that would benefit from it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066527</commentid>
    <comment_count>1</comment_count>
      <attachid>245954</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 12:33:39 -0800</bug_when>
    <thetext>Created attachment 245954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066537</commentid>
    <comment_count>2</comment_count>
      <attachid>245959</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 13:06:20 -0800</bug_when>
    <thetext>Created attachment 245959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066553</commentid>
    <comment_count>3</comment_count>
      <attachid>245963</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 13:52:25 -0800</bug_when>
    <thetext>Created attachment 245963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066630</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 16:08:02 -0800</bug_when>
    <thetext>I compared the performance of Vector::removeAll() compared to the old way of index-based traversal + Vector::remove(index).

I used the following input:
Vector&lt;int&gt; speedV = {3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3};

I did 10000000 iterations to removed all the 1&apos;s.

The results look really good:
Manual: 2478.31 ms
RemoveAll: 2129.9 ms (~17% faster)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066695</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 18:48:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I compared the performance of Vector::removeAll() compared to the old way of
&gt; index-based traversal + Vector::remove(index).
&gt; 
&gt; I used the following input:
&gt; Vector&lt;int&gt; speedV = {3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1,
&gt; 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2,
&gt; 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2,
&gt; 1, 1, 1, 3, 3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3};
&gt; 
&gt; I did 10000000 iterations to removed all the 1&apos;s.
&gt; 
&gt; The results look really good:
&gt; Manual: 2478.31 ms
&gt; RemoveAll: 2129.9 ms (~17% faster)

I also tried a Vector of CString because we currently don&apos;t use memcpy/memmove for those:
Vector&lt;CString&gt; speedV = {&quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;, &quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;, &quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;, &quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;, &quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;, &quot;3&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;1&quot;, &quot;2&quot;, &quot;2&quot;, &quot;1&quot;, &quot;1&quot;, &quot;1&quot;, &quot;3&quot;};

I did 1000000 iterations to removed all the 1&apos;s.

The results were even better:
Manual: 1716.21 ms
RemoveAll: 581.744 ms

Micro-benchmark: http://pastebin.com/C4q4a2gb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066704</commentid>
    <comment_count>6</comment_count>
      <attachid>245963</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-03 19:29:27 -0800</bug_when>
    <thetext>Comment on attachment 245963
Patch

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

That looks great to me.

&gt; Source/WTF/ChangeLog:10
&gt; +        QVector.

hehehe, back to the roots of WTF :)

&gt; Source/WTF/ChangeLog:18
&gt; +        (WTF::OverflowHandler&gt;::removeOne):
&gt; +        (WTF::OverflowHandler&gt;::removeAll):

Not a big fan of the name.

The name removeAll() seems to be a better name for Vector::clear().
The name removeOne() seems like a removeAny(). It should be some kind of removeFirstOf().

Maybe the name should hint that the operation is not O(1)?
    findAndRemove()
    findAndRemoveAll()

You should ask Darin for ideas, he always have good feedback on naming.

&gt; Source/WTF/wtf/Vector.h:739
&gt; +    template&lt;typename U&gt;  bool removeOne(const U&amp;);
&gt; +    template&lt;typename U&gt;  unsigned removeAll(const U&amp;);

Two spaces between the template&lt;&gt; and the return type.

&gt; Source/WTF/wtf/Vector.h:1348
&gt; +    m_size -= matchCount;

Orthogonal to your patch but: it may be worth considering shrinking the vector if &quot;matchCount&quot; &gt;= m_size / 2.

&gt; Source/WebCore/html/HTMLFormElement.cpp:-615
&gt; -    unsigned index;
&gt; -    for (index = 0; index &lt; m_associatedElements.size(); ++index) {
&gt; -        if (m_associatedElements[index] == e)
&gt; -            break;
&gt; -    }

Weird

&gt; Source/WebCore/page/SecurityPolicy.cpp:158
&gt; +    if (!list.removeOne(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains)))

Maybe split this?

OriginAccessEntry someVeryGoodNameForSecurityStuff(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains);

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:348
&gt; +    EXPECT_EQ(9U, v.size());
&gt; +    EXPECT_TRUE(v == Vector&lt;int&gt;({1, 1, 1, 1, 1, 1, 1, 1, 1}));

I would test the loop doing removeOne() eleven times, brute forcing that all branches are used.

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:377
&gt; +    v = {1, 2, 1, 2, 1, 2, 2, 1, 1, 1};

Large match at the end.

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:386
&gt; +    v = {3, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 3};

Large match in the middle.

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:394
&gt; +

Where is large match at the front?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066709</commentid>
    <comment_count>7</comment_count>
      <attachid>245963</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 20:02:37 -0800</bug_when>
    <thetext>Comment on attachment 245963
Patch

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

&gt;&gt; Source/WTF/ChangeLog:18
&gt;&gt; +        (WTF::OverflowHandler&gt;::removeAll):
&gt; 
&gt; Not a big fan of the name.
&gt; 
&gt; The name removeAll() seems to be a better name for Vector::clear().
&gt; The name removeOne() seems like a removeAny(). It should be some kind of removeFirstOf().
&gt; 
&gt; Maybe the name should hint that the operation is not O(1)?
&gt;     findAndRemove()
&gt;     findAndRemoveAll()
&gt; 
&gt; You should ask Darin for ideas, he always have good feedback on naming.

For what it&apos;s worth, glib seems to be using g_list_remove() / g_list_remove_all() for those:
https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-remove-all

In our case we cannot really call the first one remove(value) because it could be ambiguous with existing remove(index).

findAndRemove*() is clearer in terms of complexity but I am not a fan because it is long (and I have never seen this naming anywhere :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066714</commentid>
    <comment_count>8</comment_count>
      <attachid>245963</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 20:12:00 -0800</bug_when>
    <thetext>Comment on attachment 245963
Patch

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

&gt;&gt;&gt; Source/WTF/ChangeLog:18
&gt;&gt;&gt; +        (WTF::OverflowHandler&gt;::removeAll):
&gt;&gt; 
&gt;&gt; Not a big fan of the name.
&gt;&gt; 
&gt;&gt; The name removeAll() seems to be a better name for Vector::clear().
&gt;&gt; The name removeOne() seems like a removeAny(). It should be some kind of removeFirstOf().
&gt;&gt; 
&gt;&gt; Maybe the name should hint that the operation is not O(1)?
&gt;&gt;     findAndRemove()
&gt;&gt;     findAndRemoveAll()
&gt;&gt; 
&gt;&gt; You should ask Darin for ideas, he always have good feedback on naming.
&gt; 
&gt; For what it&apos;s worth, glib seems to be using g_list_remove() / g_list_remove_all() for those:
&gt; https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-remove-all
&gt; 
&gt; In our case we cannot really call the first one remove(value) because it could be ambiguous with existing remove(index).
&gt; 
&gt; findAndRemove*() is clearer in terms of complexity but I am not a fan because it is long (and I have never seen this naming anywhere :).

I do think removeFirst(value) would be a bit more explicit than removeOne(value) though. It would be clearer that we delete the *first* occurrence, not just any. And it leaves room for a removeLast(value) if ever useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066718</commentid>
    <comment_count>9</comment_count>
      <attachid>246012</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-03 20:53:32 -0800</bug_when>
    <thetext>Created attachment 246012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066755</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-03 23:28:30 -0800</bug_when>
    <thetext>Did you mean to cq+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066769</commentid>
    <comment_count>11</comment_count>
      <attachid>246012</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 00:39:26 -0800</bug_when>
    <thetext>Comment on attachment 246012
Patch

Clearing flags on attachment: 246012

Committed r179599: &lt;http://trac.webkit.org/changeset/179599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066770</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 00:39:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245954</attachid>
            <date>2015-02-03 12:33:39 -0800</date>
            <delta_ts>2015-02-03 13:06:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141192-20150203123340.patch</filename>
            <type>text/plain</type>
            <size>27510</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
M2MxNmE3NzJjMWVkYjQzMTFjMDRiYjk1ZGEyMWI2YzljNGM1ODdhLi45MTEyOWE2ODk0MzM2MDcz
ZjU0YTRjYzU2ODM4ZTFjMTVhMGUyMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBtZXRob2Rz
IHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1
ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OnJlbW92ZSk6CisKIDIwMTUtMDItMDIgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0IHNob3VsZCBiZSBtYXJr
ZWQgTm9kZU11c3RHZW5lcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0NWY2ZWFmYjFiZTI4MDg2NWRiOTQyZDUyOTIwYWQw
NDI4YzMzOWU2Li40NDQ4ODAwY2RjNWZlZDU1MjcxODU0MDAwNGU0MWM4NDhmNTllNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1l
dGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBjb252
ZW5pZW5jZSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIHRvIHJlZHVjZSBjb21wbGV4
aXR5IGEgYml0IGF0IGNhbGwgc2l0ZXMuIFRoZSBuYW1pbmcgaXMgaW5zcGlyZWQgYnkKKyAgICAg
ICAgUVZlY3Rvci4KKworICAgICAgICBJIGFtIHBsYW5uaW5nIHRvIGFkZCBvdmVybG9hZHMgZm9y
IHRoZXNlIHRha2luZyBhIGxhbWJkYSBmdW5jdGlvbiBmb3IKKyAgICAgICAgbWF0Y2hpbmcgaW4g
YSBmb2xsb3ctdXAgcGF0Y2ggYXMgd2VsbC4gSSBoYXZlIHNlZW4gcXVpdGUgYSBmZXcKKyAgICAg
ICAgVmVjdG9yOjpyZW1vdmUoaW5kZXgpIGNhbGwgc2l0ZXMgdGhhdCB3b3VsZCBiZW5lZml0IGZy
b20gaXQuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ok92ZXJmbG93
SGFuZGxlcj46OnJlbW92ZU9uZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZUFsbCk6CisKIDIwMTUtMDItMDIgIERoaSBBdXJyYWhtYW4gIDxkaW9yYWhtYW5Acm9ja3li
YXJzLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBtYXRjaGVzTGFuZ1BzZXVkb0NsYXNzKCkgb2Yg
OmxhbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhhN2FmNDk5ZjQzMjk2YTE1OTMxNDczNjBjYjU2NGU2OWUw
NDgyYTguLmNkY2M3ZDRiNmM1MmVjOTQ3NzU0ZjdhY2E1NTk2ODQwY2FjNjQ2MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVl
KSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92
ZUFsbCh2YWx1ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisg
ICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1v
dmVJbWdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUZyb21WZWN0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZTo6dW5yZWdpc3RlclBvcHVwT3BlbmluZ09ic2VydmVyKToKKyAgICAgICAgKiBwYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9t
UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6cmVtb3ZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpyZW1vdmVDYXB0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNo
aWxkV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1
bnNjaGVkdWxlKToKKwogMjAxNS0wMi0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgSklUIENvbXBpbGUgc2ltcGxlIGNhc2VzIG9mIDpudGgtbGFz
dC1jaGlsZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzZkOGQ1OTI0NDk3MGU1M2VkNzJkMDlmNDc4YzY4Yzk4
ZWJiZmY3Zi4uZWU1ZGYyNmUyZWRhOTFlZjkwMjQzMzI5NTllZTFkYmMwY2FlODcxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFs
dWUpIG1ldGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVPbmUodmFsdWUpIC8gcmVt
b3ZlQWxsKHZhbHVlKSBBUEkgdG8gc2ltcGxpZnkgdGhlCisgICAgICAgIGNvZGUgYSBiaXQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3Vw
Q3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9t
UHJvdG9jb2wpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUxvYWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
ZGlzY29ubmVjdFByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcDoKKyAgICAgICAgKEV3a0V4dGVuc2lvbjo6cmVtb3Zl
KToKKwogMjAxNS0wMi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgTmV0d29ya0NhY2hlJ3MgY29uc3RydWN0b3IgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDQy
YTZiNWYzY2Y4NDY2ZmUxYWYyNmYyNDA2YzliNTFjZDMzOTgzY2IuLjcxNzE2MzU5YmU2MzE0ZmUw
ZDIyYTBhYzdmN2U4NGFkZTgwMDFmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTc4NiwxMiArNzg2LDcgQEAgYm9v
bCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4mIG8KIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX2RhdGEucmVtb3ZlKG5hbWUpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9v
cmRlcltpXSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBtX29yZGVyLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fb3JkZXIucmVtb3ZlT25lKG5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBi
L1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDg0YTE1NGEyN2VkYmYxYzBlODNhYjI1MzZh
YzA1ODQ0ODVhMTA0ZTcuLmE3NDNlZmUyODg3YmFiZTE4ZGU1Mjg0OTg3ZmI2MTk5OGQ3NzZlZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCkBAIC03MzUsNiArNzM1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUo
c2l6ZV90IHBvc2l0aW9uKTsKICAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVf
dCBsZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+ICBib29sIHJlbW92ZU9uZShjb25z
dCBVJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gIHVuc2lnbmVkIHJlbW92ZUFsbChjb25z
dCBVJik7CiAKICAgICB2b2lkIHJlbW92ZUxhc3QoKSAKICAgICB7CkBAIC0xMzA5LDYgKzEzMTEs
NDUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uLAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFU+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZU9uZShjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgaW5k
ZXggPSBmaW5kKHZhbHVlKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgoraW5saW5lIHVu
c2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
QWxsKGNvbnN0IFUmIHZhbHVlKQoreworICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwor
ICAgIGl0ZXJhdG9yIGhvbGVFbmQgPSBlbmQoKTsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0g
MDsKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbigpLCBpdEVuZCA9IGVuZCgpOyBpdCAhPSBpdEVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoKml0ID09IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
aG9sZUJlZ2luID09IGVuZCgpKQorICAgICAgICAgICAgICAgIGhvbGVCZWdpbiA9IGl0OworICAg
ICAgICAgICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBpdCkgeworICAgICAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9sZUVuZCwgaXQsIGhvbGVCZWdpbik7CisgICAg
ICAgICAgICAgICAgaG9sZUJlZ2luICs9IGl0IC0gaG9sZUVuZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGhvbGVFbmQgPSBpdCArIDE7CisgICAgICAgICAgICBpdC0+flQoKTsKKyAgICAg
ICAgICAgICsrbWF0Y2hDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaG9sZUVuZCAh
PSBlbmQoKSkKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhob2xlRW5k
LCBlbmQoKSwgaG9sZUJlZ2luKTsKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3Np
emUgLSBtYXRjaENvdW50KTsKKyAgICBtX3NpemUgLT0gbWF0Y2hDb3VudDsKKyAgICByZXR1cm4g
bWF0Y2hDb3VudDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJldmVyc2UoKQogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zaXplIC8gMjsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcAppbmRleCBhYTBkNzVjMGQyYzI0Zjg2M2ZmMTVjNGFkYzEyMDdmNzI3
N2U4YmVmLi4xNDMyZmUwMjU3Yjg5YjM0NGExYjIzYzc3OTlkNWQ5MDcyNDEwZDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDg0LDkgKzQ4NCw4IEBA
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpyZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0KiBz
aGVldCkKIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQoQ1NTU3R5
bGVTaGVldCogc2hlZXQpCiB7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9jbGllbnRzLmZpbmQo
c2hlZXQpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0gICAgbV9jbGllbnRz
LnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVkID0gbV9jbGllbnRzLnJlbW92ZU9u
ZShzaGVldCk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9p
ZCBTdHlsZVNoZWV0Q29udGVudHM6OmFkZGVkVG9NZW1vcnlDYWNoZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNjg1YjE5NmZhZjcyZjYxZWNjYzhlZDMxMmVj
NDk4YWVlMmYwMjllYi4uYWMwNTNlYjBkZmRkNTM0NzVkZjA2YjU1Y2I1MTAxZWViZjMyMmEyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNTEwLDE2ICs1MTAs
NiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4g
c3RhdGljIHZvaWQgcmVtb3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVt
KQotewotICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBzaXplOyArK2kpCi0gICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgewotICAgICAg
ICAgICAgdmVjLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci19Ci0K
IHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmli
dXRlKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdl
RW5kKQogewogICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC02MDgs
MTggKzU5OCwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVG
b3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgdW5zaWduZWQgaW5k
ZXg7Ci0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpbmRleF0g
PT0gZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
YXNzb2NpYXRlZEVsZW1lbnRzLmZpbmQoZSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkpOwogICAgIGlmIChp
bmRleCA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXgpCiAgICAgICAgIC0tbV9hc3Nv
Y2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKICAgICBpZiAoaW5kZXggPCBtX2Fzc29jaWF0ZWRF
bGVtZW50c0FmdGVySW5kZXgpCiAgICAgICAgIC0tbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlcklu
ZGV4OwogICAgIHJlbW92ZUZyb21QYXN0TmFtZXNNYXAoZSk7Ci0gICAgcmVtb3ZlRnJvbVZlY3Rv
cihtX2Fzc29jaWF0ZWRFbGVtZW50cywgZSk7CisgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMucmVt
b3ZlKGluZGV4KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFz
c29jaWF0ZWRGb3JtQ29udHJvbChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtQ29u
dHJvbEVsZW1lbnQpCkBAIC02NTMsOSArNjM5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJl
Z2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogCiB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogewotICAgIEFTU0VS
VChtX2ltYWdlRWxlbWVudHMuZmluZChlKSAhPSBub3RGb3VuZCk7CiAgICAgcmVtb3ZlRnJvbVBh
c3ROYW1lc01hcChlKTsKLSAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7
CisgICAgYm9vbCByZW1vdmVkID0gbV9pbWFnZUVsZW1lbnRzLnJlbW92ZU9uZShlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4
IDY4YmY2NjhjYTMyNTYzZTFjZjFiYTcyZTU2NDNmN2M2MzY5NzM5MjAuLjQ2YWY0Mzg3ZDM1MTRm
NzZlOGY4Mjg5MDA0Zjk1YWJkODliMmZkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTYz
Nyw5ICs2MzcsOCBAQCB2b2lkIENocm9tZTo6cmVnaXN0ZXJQb3B1cE9wZW5pbmdPYnNlcnZlcihQ
b3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiAKIHZvaWQgQ2hyb21lOjp1bnJlZ2lzdGVy
UG9wdXBPcGVuaW5nT2JzZXJ2ZXIoUG9wdXBPcGVuaW5nT2JzZXJ2ZXIqIG9ic2VydmVyKQogewot
ICAgIHNpemVfdCBpbmRleCA9IG1fcG9wdXBPcGVuaW5nT2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIp
OwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgbV9wb3B1cE9wZW5pbmdPYnNl
cnZlcnMucmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3BvcHVwT3BlbmluZ09i
c2VydmVycy5yZW1vdmVPbmUob2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwg
cmVtb3ZlZCk7CiB9CiAKIHZvaWQgQ2hyb21lOjpub3RpZnlQb3B1cE9wZW5pbmdPYnNlcnZlcnMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGM2NjA2NTU4OGJhYTUwNDkyNDI4ZThhMzc5MGM3ZWMwODZjNjg5MWYuLjFiMDVkNWVi
NmI5YWMzODU1NGE1MDliNTI5Yjg5MmY5MTcxZDY3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTE1MSw5ICsxNTEsOCBAQCB2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybAogCiAgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVy
bGF5KS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1f
cGFnZU92ZXJsYXlzLmZpbmQob3ZlcmxheSk7Ci0gICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBu
b3RGb3VuZCk7Ci0gICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisgICAg
Ym9vbCByZW1vdmVkID0gbV9wYWdlT3ZlcmxheXMucmVtb3ZlT25lKG92ZXJsYXkpOworICAgIEFT
U0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAKICAgICB1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eVBvbGljeS5jcHAKaW5kZXggMzUyN2FiODEyY2M3OWVlYmZmZTNhMjdkYjMwYmQ2NjJkMzkx
ZjQ3Ny4uN2RhNjkyMDU1N2Q1ODUxOTExNjI4YjEzNDMwNDc3OGU2YjM5NTRhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTE1NCwxNCArMTU0LDExIEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgp
OwotICAgIHNpemVfdCBpbmRleCA9IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGlu
YXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0JiBsaXN0ID0gKml0LT52YWx1ZTsKKyAgICBpZiAoIWxp
c3QucmVtb3ZlT25lKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3Rp
bmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21h
aW5zKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxpc3QtPnJlbW92ZShpbmRleCk7Ci0KLSAg
ICBpZiAobGlzdC0+aXNFbXB0eSgpKQorICAgIGlmIChsaXN0LmlzRW1wdHkoKSkKICAgICAgICAg
bWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggOTc5OWI4NWU5NTk1OTE1MzEzMmNmNGVjZTFk
MjdmZTJjNjEzYTRiMC4uNmY2OWQ2Y2RjZGZhZTUwYzQ2YmZhZWVmNWFiMDBiMGE4YjgwM2M0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTI1MywxNCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbigpCiB2b2lkIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQogewogICAg
IGlmIChtX3BhcmVudCkgewotICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbV9wYXJlbnQtPm1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzID09IG1fcGFyZW50LT5tX2NoaWxkcmVuW2ldKSB7Ci0gICAgICAgICAgICAgICAgbV9w
YXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVt
b3ZlT25lKHRoaXMpOwogICAgICAgICBzZXRQYXJlbnQobnVsbHB0cik7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCmluZGV4IGMxNDRkMDU1ZTBkZjc2ZTk5Mzg5
NWYyM2E2NmNiZDJhZmQ3MzhhYjcuLmY1ZjFiMmQ5NmEwNmE2MTQ5NGI1OGJmNjI1YWNjOTNhYjg1
NjFhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKQEAgLTM2NSwxMCAr
MzY1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVzdW1lKCkKIAogdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAg
ICBmb3IgKGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0g
ICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0ubmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICBt
X2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxs
KG5hbWUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZW1vdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAppbmRleCAzMDJiOTk0NjQ5NDQ4
MjQ0MWMxYzRhYmZkY2Q3MTg4MDQxZGJkNzBmLi41NTEwMjc3NGFlODkyYTg0MjY0MzNhZjhjZDQ3
NDI2Y2ZlMzE0ZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5jcHAKQEAgLTg4LDEyICs4OCw3IEBAIHZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmFk
ZFNlYXJjaFJlc3VsdCgpCiAgICAgaWYgKGZyYW1lKCkucGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vz
c2lvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGlu
dD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpOwotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fcmVjZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUp
Ci0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZShpKTsKLSAgICB9Ci0KKyAgICBt
X3JlY2VudFNlYXJjaGVzLnJlbW92ZUFsbCh2YWx1ZSk7CiAgICAgbV9yZWNlbnRTZWFyY2hlcy5p
bnNlcnQoMCwgdmFsdWUpOwogICAgIHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2Vh
cmNoZXMuc2l6ZSgpKSA+IGlucHV0RWxlbWVudCgpLm1heFJlc3VsdHMoKSkKICAgICAgICAgbV9y
ZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAppbmRleCBlZmNiMWNkOGU3YWE1M2RiOTM4NmMzNTFmYzAwNmZjMjhkYzM3ZDhk
Li45MDBmODRkZDBlYTdkNzM0YTZjZDYwOWQzMzQ3YTIxODFkZDc2ZDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTIzMCwxMiArMjMwLDggQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6YWRkQ2FwdGlvbihjb25zdCBSZW5kZXJUYWJsZUNhcHRpb24qIGNhcHRpb24p
CiAKIHZvaWQgUmVuZGVyVGFibGU6OnJlbW92ZUNhcHRpb24oY29uc3QgUmVuZGVyVGFibGVDYXB0
aW9uKiBvbGRDYXB0aW9uKQogewotICAgIHNpemVfdCBpbmRleCA9IG1fY2FwdGlvbnMuZmluZChv
bGRDYXB0aW9uKTsKLSAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotICAgIGlmIChpbmRl
eCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYXB0aW9ucy5yZW1vdmUo
aW5kZXgpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fY2FwdGlvbnMucmVtb3ZlT25lKG9sZENhcHRp
b24pOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyVGFibGU6OmludmFsaWRhdGVDYWNoZWRDb2x1bW5zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IGZkMjI2ZmU3OTQwMjdkMmFhZDZm
NDdkZTYyZTViYzk5YjBiNWJiNTMuLmU3OGQyOGNkMDNkYmRjMjA0MTU5ZDRiYWFlMzUyYmU5N2Iy
YjBiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmNwcApAQCAtMjYyLDkgKzI2Miw4IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNoaWxk
V2lsbEJlUmVtb3ZlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBWZWN0b3I8U1ZHVGV4CiAgICAgaWYg
KG5leHQpCiAgICAgICAgIGFmZmVjdGVkQXR0cmlidXRlcy5hcHBlbmQobmV4dCk7CiAKLSAgICBz
aXplX3QgcG9zaXRpb24gPSBtX2xheW91dEF0dHJpYnV0ZXMuZmluZCh0ZXh0LmxheW91dEF0dHJp
YnV0ZXMoKSk7Ci0gICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKLSAgICBtX2xheW91
dEF0dHJpYnV0ZXMucmVtb3ZlKHBvc2l0aW9uKTsKKyAgICBib29sIHJlbW92ZWQgPSBtX2xheW91
dEF0dHJpYnV0ZXMucmVtb3ZlT25lKHRleHQubGF5b3V0QXR0cmlidXRlcygpKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6OnN1
YnRyZWVDaGlsZFdhc1JlbW92ZWQoY29uc3QgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
KiwgMj4mIGFmZmVjdGVkQXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMDQ5MTkyODgxMjg0ZTc0ODc4ZDkzMThiZmRhN2VkMTVm
Y2E1MTRkMi4uYzhjMGRkYjNmZjRlYmIxMjVhMWUzMmJmMTQxNzdkMjVhMTMwN2VlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTM3OSwxMCAr
Mzc5LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlYnVpbGRBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50JiByZWYKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiByZWZl
cmVuY2VkRWxlbWVudCkKIHsKICAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMucmVtb3ZlKHJlZmVy
ZW5jZWRFbGVtZW50KTsKLQotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fcmVidWlsZEVsZW1lbnRz
LmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkK
LSAgICAgICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlKHBvc2l0aW9uKTsKKyAgICBtX3JlYnVp
bGRFbGVtZW50cy5yZW1vdmVPbmUocmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxF
KFNWR19GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5jcHAKaW5kZXggNmJjZDI1ZDUzNjRkMmMyZmIwNTQ2NWUwMjVjZmU2OGFkYzg3
ZDA2MS4uNzFhMDc1YTliZDQwZDJmYTljMzY1ZGQ3MjY2NWY5MzhjZTJhODdiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKQEAg
LTkyLDkgKzkyLDggQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZShTVkdTTUlM
RWxlbWVudCogYW5pbWF0aW9uLCBTVkdFbGVtZW50KiB0YXJnZXQKICAgICBFbGVtZW50QXR0cmli
dXRlUGFpciBrZXkodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lKTsKICAgICBBbmltYXRpb25zVmVjdG9y
KiBzY2hlZHVsZWQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZ2V0KGtleSk7CiAgICAgQVNTRVJU
KHNjaGVkdWxlZCk7Ci0gICAgc2l6ZV90IGlkeCA9IHNjaGVkdWxlZC0+ZmluZChhbmltYXRpb24p
OwotICAgIEFTU0VSVChpZHggIT0gbm90Rm91bmQpOwotICAgIHNjaGVkdWxlZC0+cmVtb3ZlKGlk
eCk7CisgICAgYm9vbCByZW1vdmVkID0gc2NoZWR1bGVkLT5yZW1vdmVPbmUoYW5pbWF0aW9uKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjpub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBDdXN0
b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RN
YW5hZ2VyLmNwcAppbmRleCA0Y2JmMTI4N2MzYzYzMTM1YTk5MTAzMWVjZDhkY2FhMGVlNjE3ZjU4
Li44OTc2MTA5MDY2YTY0NTYwMWY0MjRhZjBkNDExMmJiMTEwZTNkOWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJT
b3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3Rv
Y29sUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC05Niw4ICs5Niw4IEBAIHZvaWQgV2ViU291cEN1c3Rv
bVByb3RvY29sUmVxdWVzdE1hbmFnZXI6OnVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2Nv
bChjb25zCiAKICAgICBwcm9jZXNzUG9vbCgpLT51bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJv
dG9jb2woc2NoZW1lKTsKIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY2hlbWVzLmNvbnRhaW5z
KHNjaGVtZSkpOwotICAgIG1fcmVnaXN0ZXJlZFNjaGVtZXMucmVtb3ZlKG1fcmVnaXN0ZXJlZFNj
aGVtZXMuZmluZChzY2hlbWUpKTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3JlZ2lzdGVyZWRTY2hl
bWVzLnJlbW92ZU9uZShzY2hlbWUpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3Zl
ZCk7CiB9CiAKIHZvaWQgV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXI6OnN0YXJ0
TG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUxvYWRTdGF0
ZS5jcHAKaW5kZXggODZjZTllMDg2NDIwYjNjMTYzZWI2MDg4ZGYzMzMwNGE1NjY1ZmZjZS4uOGYy
ODA5NDU1NTEyYTUwNTNjODJlMzQ3MWZjZWQ0ZmY2M2FmOWMwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcApAQCAtNzQsMTAgKzc0LDggQEAgdm9pZCBQYWdl
TG9hZFN0YXRlOjphZGRPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKIHZvaWQgUGFnZUxv
YWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogewotICAgIEFTU0VS
VChtX29ic2VydmVycy5jb250YWlucygmb2JzZXJ2ZXIpKTsKLQotICAgIHNpemVfdCBpbmRleCA9
IG1fb2JzZXJ2ZXJzLmZpbmQoJm9ic2VydmVyKTsKLSAgICBtX29ic2VydmVycy5yZW1vdmUoaW5k
ZXgpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fb2JzZXJ2ZXJzLnJlbW92ZU9uZSgmb2JzZXJ2ZXIp
OworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiB9CiAKIHZvaWQgUGFnZUxv
YWRTdGF0ZTo6ZW5kVHJhbnNhY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggYmE0NDAyYWU1N2Y1OTY1MTJmODE5MGIwOGU3MmYzOTMwYmRh
ZmQ3Yi4uYzRmNjk1MzA1NjYwZTI2OWRiMWMyMzE1MjI0MjllY2JiYjcxMjAwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC0yMzcsOCArMjM3LDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIAogV2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiB7Ci0gICAgQVNTRVJUKHByb2Nlc3NQb29scygpLmZp
bmQodGhpcykgIT0gbm90Rm91bmQpOwotICAgIHByb2Nlc3NQb29scygpLnJlbW92ZShwcm9jZXNz
UG9vbHMoKS5maW5kKHRoaXMpKTsKKyAgICBib29sIHJlbW92ZWQgPSBwcm9jZXNzUG9vbHMoKS5y
ZW1vdmVPbmUodGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIAog
ICAgIHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CiAKQEAgLTgwNSw3ICs4MDUs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MpCiAKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29udGV4dFN1cHBsZW1lbnQq
PihzdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpKS0+cHJvY2Vzc0RpZENs
b3NlKHByb2Nlc3MpOwogCi0gICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nlc3Nlcy5m
aW5kKHByb2Nlc3MpKTsKKyAgICAgICAgbV9wcm9jZXNzZXMucmVtb3ZlT25lKHByb2Nlc3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MTksOCArODE5LDggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAg
IC8vIGlmIGl0IHdlcmUgaW52b2tlZCBmcm9tIFZlY3Rvcjo6cmVtb3ZlKCkuIFJlZlB0ciBkZWxh
eXMgZGVzdHJ1Y3Rpb24gdW50aWwgaXQncyBzYWZlLgogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJv
eHk+IHByb3RlY3QocHJvY2Vzcyk7CiAgICAgaWYgKG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPT0g
cHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9IDA7Ci0gICAgbV9wcm9j
ZXNzZXMucmVtb3ZlKG1fcHJvY2Vzc2VzLmZpbmQocHJvY2VzcykpOworICAgICAgICBtX3Byb2Nl
c3NXaXRoUGFnZUNhY2hlID0gbnVsbHB0cjsKKyAgICBtX3Byb2Nlc3Nlcy5yZW1vdmVPbmUocHJv
Y2Vzcyk7CiB9CiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5ld1dl
YlByb2Nlc3NSZXNwZWN0aW5nUHJvY2Vzc0NvdW50TGltaXQoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24u
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3
a19leHRlbnNpb24uY3BwCmluZGV4IGExYmM4NTZiMWViYTMyZTdjNmMwNmFlM2Y4ZWQwOWI0YjM3
NTE5NzYuLjg2ZjI5YWQ2MzljMGZjYWQ4Zjc4NjgzNTExZjhkZGM4NTBlZGNmYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tf
ZXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBFd2tF
eHRlbnNpb246OmFwcGVuZChFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KQogCiB2b2lkIEV3
a0V4dGVuc2lvbjo6cmVtb3ZlKEV3a19FeHRlbnNpb25fQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAg
bV9jbGllbnRzLnJlbW92ZShtX2NsaWVudHMuZmluZChjbGllbnQpKTsKKyAgICBtX2NsaWVudHMu
cmVtb3ZlT25lKGNsaWVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZXh0ZW5zaW9uX2NsaWVudF9h
ZGQoRXdrX0V4dGVuc2lvbiogZXh0ZW5zaW9uLCBFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGVl
MWYwNTNiNWVlMTc2NDkyZWNiZWRhMGI2NWFmMWFjM2I1M2ZiZDEuLjQxOGEzZTMyMjllYTJkM2Rk
ZTg1OTJmNzExNzYwZDQ1MjdlNTRhNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8g
cmVtb3ZlQWxsKHZhbHVlKSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3RzIGZvciBWZWN0b3I6
OnJlbW92ZU9uZSh2YWx1ZSkgYW5kCisgICAgICAgIFZlY3Rvcjo6cmVtb3ZlQWxsKHZhbHVlKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNS0wMi0wMiAgU2FhbSBCYXJhdGkgIDxzYWFt
YmFyYXRpMUBnbWFpbC5jb20+CiAKICAgICAgICAgQ3JlYXRlIHRlc3RzIGZvciBKU0MncyBDb250
cm9sIEZsb3cgUHJvZmlsZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZlY3Rvci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3Bw
CmluZGV4IGQyMDdhMGZlMGE3NGRmNTEwMzQ2OGQ3NDQ2Y2VhNjZiYjEwZTZjMDkuLjY4OThhMTcw
MzkwMTM3YjY0M2NjNzk3NzdkMDI2MTgwZjU1ZDQzNGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvVmVjdG9yLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiTW92ZU9u
bHkuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKQEAgLTMyMyw0ICszMjQsMTIxIEBA
IFRFU1QoV1RGX1ZlY3RvciwgVmVjdG9yT2ZWZWN0b3JzT2ZWZWN0b3JzSW5saW5lQ2FwYWNpdHlT
d2FwKQogICAgIEVYUEVDVF9FUSgwVSwgYi5zaXplKCkpOwogfQogCitURVNUKFdURl9WZWN0b3Is
IFJlbW92ZU9uZSkKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9UUlVFKHYuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVPbmUoMSkpOworICAgIEVYUEVDVF9G
QUxTRSh2LnJlbW92ZU9uZSgtMSkpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKwor
ICAgIHYuZmlsbCgyLCAxMCk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkpOworICAgIEVY
UEVDVF9GQUxTRSh2LnJlbW92ZU9uZSgxKSk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkp
OworICAgIHYuY2xlYXIoKTsKKworICAgIHYuZmlsbCgxLCAxMCk7CisgICAgRVhQRUNUX0VRKDEw
VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHYucmVtb3ZlT25lKDEpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfSkpOwor
ICAgIEVYUEVDVF9FUSg5VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZU9u
ZSgyKSk7CisgICAgRVhQRUNUX0VRKDlVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9
PSBWZWN0b3I8aW50Pih7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMX0pKTsKKworICAgIHYucmVz
aXplKDEpOworICAgIEVYUEVDVF9FUSgxVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHYu
cmVtb3ZlT25lKDEpKTsKKyAgICBFWFBFQ1RfRVEoMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2LmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1ZlY3RvciwgUmVtb3ZlQWxsKQorewor
ICAgIC8vIFVzaW5nIGEgbWVtY3B5LWFibGUgdHlwZS4KKyAgICBzdGF0aWNfYXNzZXJ0KFZlY3Rv
clRyYWl0czxpbnQ+OjpjYW5Nb3ZlV2l0aE1lbWNweSwgIlNob3VsZCB1c2UgYSBtZW1jcHktYWJs
ZSB0eXBlIik7CisgICAgVmVjdG9yPGludD4gdjsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlQWxsKDEpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
di5yZW1vdmVBbGwoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisKKyAgICB2
LmZpbGwoMSwgMTApOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTBVLCB2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOwor
CisgICAgdi5maWxsKDIsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDBVLCB2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXpl
KCkpOworCisgICAgdiA9IHsxLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxfTsKKyAgICBFWFBF
Q1RfRVEoMTBVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2LnJlbW92ZUFsbCgxKSk7
CisgICAgRVhQRUNUX0VRKDRVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0
b3I8aW50Pih7MiwgMiwgMiwgMn0pKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmQoMSkgPT0gbm90
Rm91bmQpOworICAgIEVYUEVDVF9FUSg0VSwgdi5yZW1vdmVBbGwoMikpOworICAgIEVYUEVDVF9U
UlVFKHYuaXNFbXB0eSgpKTsKKworICAgIHYgPSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwg
MSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEyVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgz
LCB2LmZpcnN0KCkpOworICAgIEVYUEVDVF9FUSgzLCB2Lmxhc3QoKSk7CisgICAgRVhQRUNUX0VR
KDZVLCB2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2LnNpemUoKSk7CisgICAg
RVhQRUNUX1RSVUUodi5maW5kKDEpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09
IFZlY3RvcjxpbnQ+KHszLCAyLCAyLCAyLCAyLCAzfSkpOworCisgICAgRVhQRUNUX0VRKDRVLCB2
LnJlbW92ZUFsbCgyKSk7CisgICAgRVhQRUNUX0VRKDJVLCB2LnNpemUoKSk7CisgICAgRVhQRUNU
X1RSVUUodi5maW5kKDIpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3Rv
cjxpbnQ+KHszLCAzfSkpOworCisgICAgRVhQRUNUX0VRKDJVLCB2LnJlbW92ZUFsbCgzKSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgLy8gVXNpbmcgYSBub24gbWVtY3B5
LWFibGUgdHlwZS4KKyAgICBzdGF0aWNfYXNzZXJ0KCFWZWN0b3JUcmFpdHM8Q1N0cmluZz46OmNh
bk1vdmVXaXRoTWVtY3B5LCAiU2hvdWxkIHVzZSBhIG5vbiBtZW1jcHktYWJsZSB0eXBlIik7Cisg
ICAgVmVjdG9yPENTdHJpbmc+IHYyOworICAgIEVYUEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHYyLnJlbW92ZUFsbCgiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5p
c0VtcHR5KCkpOworCisgICAgdjIuZmlsbCgiMSIsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2
Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxMFUsIHYyLnJlbW92ZUFsbCgiMSIpKTsKKyAgICBF
WFBFQ1RfVFJVRSh2Mi5pc0VtcHR5KCkpOworCisgICAgdjIuZmlsbCgiMiIsIDEwKTsKKyAgICBF
WFBFQ1RfRVEoMTBVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwVSwgdjIucmVtb3ZlQWxs
KCIxIikpOworICAgIEVYUEVDVF9FUSgxMFUsIHYyLnNpemUoKSk7CisKKyAgICB2MiA9IHsiMSIs
ICIyIiwgIjEiLCAiMiIsICIxIiwgIjIiLCAiMiIsICIxIiwgIjEiLCAiMSJ9OworICAgIEVYUEVD
VF9FUSgxMFUsIHYyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2Mi5yZW1vdmVBbGwoIjEi
KSk7CisgICAgRVhQRUNUX0VRKDRVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHYyLmZp
bmQoIjEiKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX0VRKDRVLCB2Mi5yZW1vdmVBbGwoIjIi
KSk7CisgICAgRVhQRUNUX1RSVUUodjIuaXNFbXB0eSgpKTsKKworICAgIHYyID0geyIzIiwgIjEi
LCAiMiIsICIxIiwgIjIiLCAiMSIsICIyIiwgIjIiLCAiMSIsICIxIiwgIjEiLCAiMyJ9OworICAg
IEVYUEVDVF9FUSgxMlUsIHYyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2Mi5yZW1vdmVB
bGwoIjEiKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVF
KHYyLmZpbmQoIjEiKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUodjIgPT0gVmVjdG9y
PENTdHJpbmc+KHsiMyIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjMifSkpOworCisgICAgRVhQRUNU
X0VRKDRVLCB2Mi5yZW1vdmVBbGwoIjIiKSk7CisgICAgRVhQRUNUX0VRKDJVLCB2Mi5zaXplKCkp
OworICAgIEVYUEVDVF9UUlVFKHYyLmZpbmQoIjIiKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUodjIgPT0gVmVjdG9yPENTdHJpbmc+KHsiMyIsICIzIn0pKTsKKworICAgIEVYUEVDVF9F
USgyVSwgdjIucmVtb3ZlQWxsKCIzIikpOworICAgIEVYUEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245959</attachid>
            <date>2015-02-03 13:06:20 -0800</date>
            <delta_ts>2015-02-03 13:52:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141192-20150203130620.patch</filename>
            <type>text/plain</type>
            <size>26722</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
M2MxNmE3NzJjMWVkYjQzMTFjMDRiYjk1ZGEyMWI2YzljNGM1ODdhLi45MTEyOWE2ODk0MzM2MDcz
ZjU0YTRjYzU2ODM4ZTFjMTVhMGUyMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBtZXRob2Rz
IHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1
ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OnJlbW92ZSk6CisKIDIwMTUtMDItMDIgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0IHNob3VsZCBiZSBtYXJr
ZWQgTm9kZU11c3RHZW5lcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0NWY2ZWFmYjFiZTI4MDg2NWRiOTQyZDUyOTIwYWQw
NDI4YzMzOWU2Li40NDQ4ODAwY2RjNWZlZDU1MjcxODU0MDAwNGU0MWM4NDhmNTllNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1l
dGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBjb252
ZW5pZW5jZSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIHRvIHJlZHVjZSBjb21wbGV4
aXR5IGEgYml0IGF0IGNhbGwgc2l0ZXMuIFRoZSBuYW1pbmcgaXMgaW5zcGlyZWQgYnkKKyAgICAg
ICAgUVZlY3Rvci4KKworICAgICAgICBJIGFtIHBsYW5uaW5nIHRvIGFkZCBvdmVybG9hZHMgZm9y
IHRoZXNlIHRha2luZyBhIGxhbWJkYSBmdW5jdGlvbiBmb3IKKyAgICAgICAgbWF0Y2hpbmcgaW4g
YSBmb2xsb3ctdXAgcGF0Y2ggYXMgd2VsbC4gSSBoYXZlIHNlZW4gcXVpdGUgYSBmZXcKKyAgICAg
ICAgVmVjdG9yOjpyZW1vdmUoaW5kZXgpIGNhbGwgc2l0ZXMgdGhhdCB3b3VsZCBiZW5lZml0IGZy
b20gaXQuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ok92ZXJmbG93
SGFuZGxlcj46OnJlbW92ZU9uZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZUFsbCk6CisKIDIwMTUtMDItMDIgIERoaSBBdXJyYWhtYW4gIDxkaW9yYWhtYW5Acm9ja3li
YXJzLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBtYXRjaGVzTGFuZ1BzZXVkb0NsYXNzKCkgb2Yg
OmxhbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhhN2FmNDk5ZjQzMjk2YTE1OTMxNDczNjBjYjU2NGU2OWUw
NDgyYTguLmNkY2M3ZDRiNmM1MmVjOTQ3NzU0ZjdhY2E1NTk2ODQwY2FjNjQ2MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVl
KSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92
ZUFsbCh2YWx1ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisg
ICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1v
dmVJbWdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUZyb21WZWN0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZTo6dW5yZWdpc3RlclBvcHVwT3BlbmluZ09ic2VydmVyKToKKyAgICAgICAgKiBwYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9t
UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6cmVtb3ZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpyZW1vdmVDYXB0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNo
aWxkV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1
bnNjaGVkdWxlKToKKwogMjAxNS0wMi0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgSklUIENvbXBpbGUgc2ltcGxlIGNhc2VzIG9mIDpudGgtbGFz
dC1jaGlsZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzZkOGQ1OTI0NDk3MGU1M2VkNzJkMDlmNDc4YzY4Yzk4
ZWJiZmY3Zi4uZWU1ZGYyNmUyZWRhOTFlZjkwMjQzMzI5NTllZTFkYmMwY2FlODcxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFs
dWUpIG1ldGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVPbmUodmFsdWUpIC8gcmVt
b3ZlQWxsKHZhbHVlKSBBUEkgdG8gc2ltcGxpZnkgdGhlCisgICAgICAgIGNvZGUgYSBiaXQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3Vw
Q3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9t
UHJvdG9jb2wpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUxvYWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
ZGlzY29ubmVjdFByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcDoKKyAgICAgICAgKEV3a0V4dGVuc2lvbjo6cmVtb3Zl
KToKKwogMjAxNS0wMi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgTmV0d29ya0NhY2hlJ3MgY29uc3RydWN0b3IgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDQy
YTZiNWYzY2Y4NDY2ZmUxYWYyNmYyNDA2YzliNTFjZDMzOTgzY2IuLjcxNzE2MzU5YmU2MzE0ZmUw
ZDIyYTBhYzdmN2U4NGFkZTgwMDFmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTc4NiwxMiArNzg2LDcgQEAgYm9v
bCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4mIG8KIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX2RhdGEucmVtb3ZlKG5hbWUpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9v
cmRlcltpXSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBtX29yZGVyLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fb3JkZXIucmVtb3ZlT25lKG5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBi
L1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDg0YTE1NGEyN2VkYmYxYzBlODNhYjI1MzZh
YzA1ODQ0ODVhMTA0ZTcuLmE3NDNlZmUyODg3YmFiZTE4ZGU1Mjg0OTg3ZmI2MTk5OGQ3NzZlZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCkBAIC03MzUsNiArNzM1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUo
c2l6ZV90IHBvc2l0aW9uKTsKICAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVf
dCBsZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+ICBib29sIHJlbW92ZU9uZShjb25z
dCBVJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gIHVuc2lnbmVkIHJlbW92ZUFsbChjb25z
dCBVJik7CiAKICAgICB2b2lkIHJlbW92ZUxhc3QoKSAKICAgICB7CkBAIC0xMzA5LDYgKzEzMTEs
NDUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uLAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFU+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZU9uZShjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgaW5k
ZXggPSBmaW5kKHZhbHVlKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgoraW5saW5lIHVu
c2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
QWxsKGNvbnN0IFUmIHZhbHVlKQoreworICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwor
ICAgIGl0ZXJhdG9yIGhvbGVFbmQgPSBlbmQoKTsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0g
MDsKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbigpLCBpdEVuZCA9IGVuZCgpOyBpdCAhPSBpdEVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoKml0ID09IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
aG9sZUJlZ2luID09IGVuZCgpKQorICAgICAgICAgICAgICAgIGhvbGVCZWdpbiA9IGl0OworICAg
ICAgICAgICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBpdCkgeworICAgICAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9sZUVuZCwgaXQsIGhvbGVCZWdpbik7CisgICAg
ICAgICAgICAgICAgaG9sZUJlZ2luICs9IGl0IC0gaG9sZUVuZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGhvbGVFbmQgPSBpdCArIDE7CisgICAgICAgICAgICBpdC0+flQoKTsKKyAgICAg
ICAgICAgICsrbWF0Y2hDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaG9sZUVuZCAh
PSBlbmQoKSkKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhob2xlRW5k
LCBlbmQoKSwgaG9sZUJlZ2luKTsKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3Np
emUgLSBtYXRjaENvdW50KTsKKyAgICBtX3NpemUgLT0gbWF0Y2hDb3VudDsKKyAgICByZXR1cm4g
bWF0Y2hDb3VudDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJldmVyc2UoKQogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zaXplIC8gMjsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcAppbmRleCBhYTBkNzVjMGQyYzI0Zjg2M2ZmMTVjNGFkYzEyMDdmNzI3
N2U4YmVmLi4xNDMyZmUwMjU3Yjg5YjM0NGExYjIzYzc3OTlkNWQ5MDcyNDEwZDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDg0LDkgKzQ4NCw4IEBA
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpyZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0KiBz
aGVldCkKIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQoQ1NTU3R5
bGVTaGVldCogc2hlZXQpCiB7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9jbGllbnRzLmZpbmQo
c2hlZXQpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0gICAgbV9jbGllbnRz
LnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVkID0gbV9jbGllbnRzLnJlbW92ZU9u
ZShzaGVldCk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9p
ZCBTdHlsZVNoZWV0Q29udGVudHM6OmFkZGVkVG9NZW1vcnlDYWNoZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNjg1YjE5NmZhZjcyZjYxZWNjYzhlZDMxMmVj
NDk4YWVlMmYwMjllYi4uYWMwNTNlYjBkZmRkNTM0NzVkZjA2YjU1Y2I1MTAxZWViZjMyMmEyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNTEwLDE2ICs1MTAs
NiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4g
c3RhdGljIHZvaWQgcmVtb3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVt
KQotewotICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBzaXplOyArK2kpCi0gICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgewotICAgICAg
ICAgICAgdmVjLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci19Ci0K
IHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmli
dXRlKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdl
RW5kKQogewogICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC02MDgs
MTggKzU5OCwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVG
b3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgdW5zaWduZWQgaW5k
ZXg7Ci0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpbmRleF0g
PT0gZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
YXNzb2NpYXRlZEVsZW1lbnRzLmZpbmQoZSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkpOwogICAgIGlmIChp
bmRleCA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXgpCiAgICAgICAgIC0tbV9hc3Nv
Y2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKICAgICBpZiAoaW5kZXggPCBtX2Fzc29jaWF0ZWRF
bGVtZW50c0FmdGVySW5kZXgpCiAgICAgICAgIC0tbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlcklu
ZGV4OwogICAgIHJlbW92ZUZyb21QYXN0TmFtZXNNYXAoZSk7Ci0gICAgcmVtb3ZlRnJvbVZlY3Rv
cihtX2Fzc29jaWF0ZWRFbGVtZW50cywgZSk7CisgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMucmVt
b3ZlKGluZGV4KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFz
c29jaWF0ZWRGb3JtQ29udHJvbChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtQ29u
dHJvbEVsZW1lbnQpCkBAIC02NTMsOSArNjM5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJl
Z2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogCiB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogewotICAgIEFTU0VS
VChtX2ltYWdlRWxlbWVudHMuZmluZChlKSAhPSBub3RGb3VuZCk7CiAgICAgcmVtb3ZlRnJvbVBh
c3ROYW1lc01hcChlKTsKLSAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7
CisgICAgYm9vbCByZW1vdmVkID0gbV9pbWFnZUVsZW1lbnRzLnJlbW92ZU9uZShlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4
IDY4YmY2NjhjYTMyNTYzZTFjZjFiYTcyZTU2NDNmN2M2MzY5NzM5MjAuLjQ2YWY0Mzg3ZDM1MTRm
NzZlOGY4Mjg5MDA0Zjk1YWJkODliMmZkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTYz
Nyw5ICs2MzcsOCBAQCB2b2lkIENocm9tZTo6cmVnaXN0ZXJQb3B1cE9wZW5pbmdPYnNlcnZlcihQ
b3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiAKIHZvaWQgQ2hyb21lOjp1bnJlZ2lzdGVy
UG9wdXBPcGVuaW5nT2JzZXJ2ZXIoUG9wdXBPcGVuaW5nT2JzZXJ2ZXIqIG9ic2VydmVyKQogewot
ICAgIHNpemVfdCBpbmRleCA9IG1fcG9wdXBPcGVuaW5nT2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIp
OwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgbV9wb3B1cE9wZW5pbmdPYnNl
cnZlcnMucmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3BvcHVwT3BlbmluZ09i
c2VydmVycy5yZW1vdmVPbmUob2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwg
cmVtb3ZlZCk7CiB9CiAKIHZvaWQgQ2hyb21lOjpub3RpZnlQb3B1cE9wZW5pbmdPYnNlcnZlcnMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGM2NjA2NTU4OGJhYTUwNDkyNDI4ZThhMzc5MGM3ZWMwODZjNjg5MWYuLjFiMDVkNWVi
NmI5YWMzODU1NGE1MDliNTI5Yjg5MmY5MTcxZDY3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTE1MSw5ICsxNTEsOCBAQCB2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybAogCiAgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVy
bGF5KS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1f
cGFnZU92ZXJsYXlzLmZpbmQob3ZlcmxheSk7Ci0gICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBu
b3RGb3VuZCk7Ci0gICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisgICAg
Ym9vbCByZW1vdmVkID0gbV9wYWdlT3ZlcmxheXMucmVtb3ZlT25lKG92ZXJsYXkpOworICAgIEFT
U0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAKICAgICB1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eVBvbGljeS5jcHAKaW5kZXggMzUyN2FiODEyY2M3OWVlYmZmZTNhMjdkYjMwYmQ2NjJkMzkx
ZjQ3Ny4uN2RhNjkyMDU1N2Q1ODUxOTExNjI4YjEzNDMwNDc3OGU2YjM5NTRhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTE1NCwxNCArMTU0LDExIEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgp
OwotICAgIHNpemVfdCBpbmRleCA9IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGlu
YXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0JiBsaXN0ID0gKml0LT52YWx1ZTsKKyAgICBpZiAoIWxp
c3QucmVtb3ZlT25lKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3Rp
bmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21h
aW5zKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxpc3QtPnJlbW92ZShpbmRleCk7Ci0KLSAg
ICBpZiAobGlzdC0+aXNFbXB0eSgpKQorICAgIGlmIChsaXN0LmlzRW1wdHkoKSkKICAgICAgICAg
bWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggOTc5OWI4NWU5NTk1OTE1MzEzMmNmNGVjZTFk
MjdmZTJjNjEzYTRiMC4uNmY2OWQ2Y2RjZGZhZTUwYzQ2YmZhZWVmNWFiMDBiMGE4YjgwM2M0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTI1MywxNCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbigpCiB2b2lkIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQogewogICAg
IGlmIChtX3BhcmVudCkgewotICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbV9wYXJlbnQtPm1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzID09IG1fcGFyZW50LT5tX2NoaWxkcmVuW2ldKSB7Ci0gICAgICAgICAgICAgICAgbV9w
YXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVt
b3ZlT25lKHRoaXMpOwogICAgICAgICBzZXRQYXJlbnQobnVsbHB0cik7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXggMzAy
Yjk5NDY0OTQ0ODI0NDFjMWM0YWJmZGNkNzE4ODA0MWRiZDcwZi4uNTUxMDI3NzRhZTg5MmE4NDI2
NDMzYWY4Y2Q0NzQyNmNmZTMxNGU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwCkBAIC04OCwxMiArODgsNyBAQCB2b2lkIFJlbmRlclNlYXJj
aEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKQogICAgIGlmIChmcmFtZSgpLnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHNpemUgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0g
c2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ld
ID09IHZhbHVlKQotICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmUoaSk7Ci0gICAg
fQotCisgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVBbGwodmFsdWUpOwogICAgIG1fcmVjZW50
U2VhcmNoZXMuaW5zZXJ0KDAsIHZhbHVlKTsKICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50Piht
X3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dEVsZW1lbnQoKS5tYXhSZXN1bHRzKCkpCiAg
ICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZWZjYjFjZDhlN2FhNTNkYjkzODZjMzUxZmMwMDZm
YzI4ZGMzN2Q4ZC4uOTAwZjg0ZGQwZWE3ZDczNGE2Y2Q2MDlkMzM0N2EyMTgxZGQ3NmQ4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0yMzAsMTIgKzIzMCw4
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENhcHRpb24oY29uc3QgUmVuZGVyVGFibGVDYXB0aW9u
KiBjYXB0aW9uKQogCiB2b2lkIFJlbmRlclRhYmxlOjpyZW1vdmVDYXB0aW9uKGNvbnN0IFJlbmRl
clRhYmxlQ2FwdGlvbiogb2xkQ2FwdGlvbikKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2NhcHRp
b25zLmZpbmQob2xkQ2FwdGlvbik7Ci0gICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAg
ICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2FwdGlv
bnMucmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX2NhcHRpb25zLnJlbW92ZU9u
ZShvbGRDYXB0aW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQog
CiB2b2lkIFJlbmRlclRhYmxlOjppbnZhbGlkYXRlQ2FjaGVkQ29sdW1ucygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCBmZDIyNmZlNzk0
MDI3ZDJhYWQ2ZjQ3ZGU2MmU1YmM5OWIwYjViYjUzLi5lNzhkMjhjZDAzZGJkYzIwNDE1OWQ0YmFh
ZTM1MmJlOTdiMmIwYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHAKQEAgLTI2Miw5ICsyNjIsOCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnN1
YnRyZWVDaGlsZFdpbGxCZVJlbW92ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgVmVjdG9yPFNWR1Rl
eAogICAgIGlmIChuZXh0KQogICAgICAgICBhZmZlY3RlZEF0dHJpYnV0ZXMuYXBwZW5kKG5leHQp
OwogCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9sYXlvdXRBdHRyaWJ1dGVzLmZpbmQodGV4dC5s
YXlvdXRBdHRyaWJ1dGVzKCkpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0g
ICAgbV9sYXlvdXRBdHRyaWJ1dGVzLnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVk
ID0gbV9sYXlvdXRBdHRyaWJ1dGVzLnJlbW92ZU9uZSh0ZXh0LmxheW91dEF0dHJpYnV0ZXMoKSk7
CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9pZCBSZW5kZXJT
VkdUZXh0OjpzdWJ0cmVlQ2hpbGRXYXNSZW1vdmVkKGNvbnN0IFZlY3RvcjxTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyosIDI+JiBhZmZlY3RlZEF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDA0OTE5Mjg4MTI4NGU3NDg3OGQ5MzE4
YmZkYTdlZDE1ZmNhNTE0ZDIuLmM4YzBkZGIzZmY0ZWJiMTI1YTFlMzJiZjE0MTc3ZDI1YTEzMDdl
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBA
IC0zNzksMTAgKzM3OSw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkQWxs
RWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVmCiB2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxl
bWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCiB7CiAgICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJl
bW92ZShyZWZlcmVuY2VkRWxlbWVudCk7Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX3JlYnVp
bGRFbGVtZW50cy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBpZiAocG9zaXRpb24gIT0g
bm90Rm91bmQpCi0gICAgICAgIG1fcmVidWlsZEVsZW1lbnRzLnJlbW92ZShwb3NpdGlvbik7Cisg
ICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlT25lKHJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IDZiY2QyNWQ1MzY0ZDJjMmZiMDU0NjVlMDI1
Y2ZlNjhhZGM4N2QwNjEuLjcxYTA3NWE5YmQ0MGQyZmE5YzM2NWRkNzI2NjVmOTM4Y2UyYTg3YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCkBAIC05Miw5ICs5Miw4IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1
bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiwgU1ZHRWxlbWVudCogdGFyZ2V0CiAgICAgRWxl
bWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldCwgYXR0cmlidXRlTmFtZSk7CiAgICAgQW5pbWF0
aW9uc1ZlY3Rvciogc2NoZWR1bGVkID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmdldChrZXkpOwog
ICAgIEFTU0VSVChzY2hlZHVsZWQpOwotICAgIHNpemVfdCBpZHggPSBzY2hlZHVsZWQtPmZpbmQo
YW5pbWF0aW9uKTsKLSAgICBBU1NFUlQoaWR4ICE9IG5vdEZvdW5kKTsKLSAgICBzY2hlZHVsZWQt
PnJlbW92ZShpZHgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHNjaGVkdWxlZC0+cmVtb3ZlT25lKGFu
aW1hdGlvbik7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9p
ZCBTTUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9X
ZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3VwQ3VzdG9tUHJvdG9j
b2xSZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGNiZjEyODdjM2M2MzEzNWE5OTEwMzFlY2Q4ZGNh
YTBlZTYxN2Y1OC4uODk3NjEwOTA2NmE2NDU2MDFmNDI0YWYwZDQxMTJiYjExMGUzZDliYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBD
dXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtOTYsOCArOTYsOCBAQCB2b2lkIFdl
YlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3Vz
dG9tUHJvdG9jb2woY29ucwogCiAgICAgcHJvY2Vzc1Bvb2woKS0+dW5yZWdpc3RlclNjaGVtZUZv
ckN1c3RvbVByb3RvY29sKHNjaGVtZSk7CiAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2NoZW1l
cy5jb250YWlucyhzY2hlbWUpKTsKLSAgICBtX3JlZ2lzdGVyZWRTY2hlbWVzLnJlbW92ZShtX3Jl
Z2lzdGVyZWRTY2hlbWVzLmZpbmQoc2NoZW1lKSk7CisgICAgYm9vbCByZW1vdmVkID0gbV9yZWdp
c3RlcmVkU2NoZW1lcy5yZW1vdmVPbmUoc2NoZW1lKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92
ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFdlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5h
Z2VyOjpzdGFydExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VMb2FkU3RhdGUuY3BwCmluZGV4IDg2Y2U5ZTA4NjQyMGIzYzE2M2ViNjA4OGRmMzMzMDRhNTY2
NWZmY2UuLjhmMjgwOTQ1NTUxMmE1MDUzYzgyZTM0NzFmY2VkNGZmNjNhZjljMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAKQEAgLTc0LDEwICs3NCw4IEBA
IHZvaWQgUGFnZUxvYWRTdGF0ZTo6YWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiB2
b2lkIFBhZ2VMb2FkU3RhdGU6OnJlbW92ZU9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKIHsK
LSAgICBBU1NFUlQobV9vYnNlcnZlcnMuY29udGFpbnMoJm9ic2VydmVyKSk7Ci0KLSAgICBzaXpl
X3QgaW5kZXggPSBtX29ic2VydmVycy5maW5kKCZvYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlcnMu
cmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX29ic2VydmVycy5yZW1vdmVPbmUo
Jm9ic2VydmVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2
b2lkIFBhZ2VMb2FkU3RhdGU6OmVuZFRyYW5zYWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGJhNDQwMmFlNTdmNTk2NTEyZjgxOTBiMDhl
NzJmMzkzMGJkYWZkN2IuLmM0ZjY5NTMwNTY2MGUyNjlkYjFjMjMxNTIyNDI5ZWNiYmI3MTIwMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjM3
LDggKzIzNyw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAK
IFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogewotICAgIEFTU0VSVChwcm9jZXNz
UG9vbHMoKS5maW5kKHRoaXMpICE9IG5vdEZvdW5kKTsKLSAgICBwcm9jZXNzUG9vbHMoKS5yZW1v
dmUocHJvY2Vzc1Bvb2xzKCkuZmluZCh0aGlzKSk7CisgICAgYm9vbCByZW1vdmVkID0gcHJvY2Vz
c1Bvb2xzKCkucmVtb3ZlT25lKHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVt
b3ZlZCk7CiAKICAgICByZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyKHRoaXMpOwogCkBAIC04
MDUsNyArODA1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvbnRleHRT
dXBwbGVtZW50Kj4oc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKSktPnBy
b2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKIAotICAgICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUobV9w
cm9jZXNzZXMuZmluZChwcm9jZXNzKSk7CisgICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZU9uZShw
cm9jZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODE5LDggKzgxOSw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcykKICAgICAvLyBpZiBpdCB3ZXJlIGludm9rZWQgZnJvbSBWZWN0b3I6OnJlbW92ZSgpLiBS
ZWZQdHIgZGVsYXlzIGRlc3RydWN0aW9uIHVudGlsIGl0J3Mgc2FmZS4KICAgICBSZWZQdHI8V2Vi
UHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHByb2Nlc3MpOwogICAgIGlmIChtX3Byb2Nlc3NXaXRoUGFn
ZUNhY2hlID09IHByb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPSAwOwot
ICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nlc3Nlcy5maW5kKHByb2Nlc3MpKTsKKyAgICAg
ICAgbV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9IG51bGxwdHI7CisgICAgbV9wcm9jZXNzZXMucmVt
b3ZlT25lKHByb2Nlc3MpOwogfQogCiBXZWJQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjpj
cmVhdGVOZXdXZWJQcm9jZXNzUmVzcGVjdGluZ1Byb2Nlc3NDb3VudExpbWl0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tf
ZXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcAppbmRleCBhMWJjODU2YjFlYmEzMmU3YzZjMDZhZTNm
OGVkMDliNGIzNzUxOTc2Li44NmYyOWFkNjM5YzBmY2FkOGY3ODY4MzUxMWY4ZGRjODUwZWRjZmEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24uY3BwCkBAIC0zNyw3ICszNyw3IEBA
IHZvaWQgRXdrRXh0ZW5zaW9uOjphcHBlbmQoRXdrX0V4dGVuc2lvbl9DbGllbnQqIGNsaWVudCkK
IAogdm9pZCBFd2tFeHRlbnNpb246OnJlbW92ZShFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50
KQogewotICAgIG1fY2xpZW50cy5yZW1vdmUobV9jbGllbnRzLmZpbmQoY2xpZW50KSk7CisgICAg
bV9jbGllbnRzLnJlbW92ZU9uZShjbGllbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2V4dGVuc2lv
bl9jbGllbnRfYWRkKEV3a19FeHRlbnNpb24qIGV4dGVuc2lvbiwgRXdrX0V4dGVuc2lvbl9DbGll
bnQqIGNsaWVudCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlZTFmMDUzYjVlZTE3NjQ5MmVjYmVkYTBiNjVhZjFhYzNiNTNmYmQxLi40MThhM2Uz
MjI5ZWEyZDNkZGU4NTkyZjcxMTc2MGQ0NTI3ZTU0YTZhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDItMDMg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVtb3ZlT25l
KHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1ZSkgbWV0aG9kcyB0byBXVEY6OlZlY3RvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTkyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0cyBm
b3IgVmVjdG9yOjpyZW1vdmVPbmUodmFsdWUpIGFuZAorICAgICAgICBWZWN0b3I6OnJlbW92ZUFs
bCh2YWx1ZSkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDItMDIgIFNhYW0gQmFy
YXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAgICAgIENyZWF0ZSB0ZXN0cyBmb3Ig
SlNDJ3MgQ29udHJvbCBGbG93IFByb2ZpbGVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VmVjdG9yLmNwcAppbmRleCBkMjA3YTBmZTBhNzRkZjUxMDM0NjhkNzQ0NmNlYTY2YmIxMGU2YzA5
Li42ODk4YTE3MDM5MDEzN2I2NDNjYzc5Nzc3ZDAyNjE4MGY1NWQ0MzRlIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIk1vdmVPbmx5LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCkBAIC0zMjMsNCAr
MzI0LDEyMSBAQCBURVNUKFdURl9WZWN0b3IsIFZlY3Rvck9mVmVjdG9yc09mVmVjdG9yc0lubGlu
ZUNhcGFjaXR5U3dhcCkKICAgICBFWFBFQ1RfRVEoMFUsIGIuc2l6ZSgpKTsKIH0KIAorVEVTVChX
VEZfVmVjdG9yLCBSZW1vdmVPbmUpCit7CisgICAgVmVjdG9yPGludD4gdjsKKyAgICBFWFBFQ1Rf
VFJVRSh2LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlT25lKDEpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVPbmUoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1w
dHkoKSk7CisKKyAgICB2LmZpbGwoMiwgMTApOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVPbmUoMSkpOworICAgIEVYUEVDVF9FUSgxMFUs
IHYuc2l6ZSgpKTsKKyAgICB2LmNsZWFyKCk7CisKKyAgICB2LmZpbGwoMSwgMTApOworICAgIEVY
UEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LnJlbW92ZU9uZSgxKSk7
CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMX0pKTsKKyAgICBFWFBFQ1RfRVEoOVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
di5yZW1vdmVPbmUoMikpOworICAgIEVYUEVDVF9FUSg5VSwgdi5zaXplKCkpOworICAgIEVYUEVD
VF9UUlVFKHYgPT0gVmVjdG9yPGludD4oezEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9KSk7CisK
KyAgICB2LnJlc2l6ZSgxKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2LnJlbW92ZU9uZSgxKSk7CisgICAgRVhQRUNUX0VRKDBVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9WZWN0b3IsIFJlbW92
ZUFsbCkKK3sKKyAgICAvLyBVc2luZyBhIG1lbWNweS1hYmxlIHR5cGUuCisgICAgc3RhdGljX2Fz
c2VydChWZWN0b3JUcmFpdHM8aW50Pjo6Y2FuTW92ZVdpdGhNZW1jcHksICJTaG91bGQgdXNlIGEg
bWVtY3B5LWFibGUgdHlwZSIpOworICAgIFZlY3RvcjxpbnQ+IHY7CisgICAgRVhQRUNUX1RSVUUo
di5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHYucmVtb3ZlQWxsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkp
OworCisgICAgdi5maWxsKDEsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDEwVSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9UUlVFKHYuaXNF
bXB0eSgpKTsKKworICAgIHYuZmlsbCgyLCAxMCk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSgx
MFUsIHYuc2l6ZSgpKTsKKworICAgIHYgPSB7MSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMX07
CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg2VSwgdi5yZW1v
dmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSg0VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVF
KHYgPT0gVmVjdG9yPGludD4oezIsIDIsIDIsIDJ9KSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5k
KDEpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYucmVtb3ZlQWxsKDIpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisKKyAgICB2ID0gezMsIDEsIDIsIDEsIDIsIDEs
IDIsIDIsIDEsIDEsIDEsIDN9OworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMywgdi5maXJzdCgpKTsKKyAgICBFWFBFQ1RfRVEoMywgdi5sYXN0KCkpOworICAg
IEVYUEVDVF9FUSg2VSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSg2VSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZCgxKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MywgMiwgMiwgMiwgMiwgM30pKTsKKworICAgIEVYUEVD
VF9FUSg0VSwgdi5yZW1vdmVBbGwoMikpOworICAgIEVYUEVDVF9FUSgyVSwgdi5zaXplKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHYuZmluZCgyKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUo
diA9PSBWZWN0b3I8aW50Pih7MywgM30pKTsKKworICAgIEVYUEVDVF9FUSgyVSwgdi5yZW1vdmVB
bGwoMykpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKworICAgIC8vIFVzaW5nIGEg
bm9uIG1lbWNweS1hYmxlIHR5cGUuCisgICAgc3RhdGljX2Fzc2VydCghVmVjdG9yVHJhaXRzPENT
dHJpbmc+OjpjYW5Nb3ZlV2l0aE1lbWNweSwgIlNob3VsZCB1c2UgYSBub24gbWVtY3B5LWFibGUg
dHlwZSIpOworICAgIFZlY3RvcjxDU3RyaW5nPiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh2Mi5yZW1vdmVBbGwoIjEiKSk7CisgICAgRVhQRUNU
X1RSVUUodjIuaXNFbXB0eSgpKTsKKworICAgIHYyLmZpbGwoIjEiLCAxMCk7CisgICAgRVhQRUNU
X0VRKDEwVSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2Mi5yZW1vdmVBbGwoIjEi
KSk7CisgICAgRVhQRUNUX1RSVUUodjIuaXNFbXB0eSgpKTsKKworICAgIHYyLmZpbGwoIjIiLCAx
MCk7CisgICAgRVhQRUNUX0VRKDEwVSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMFUsIHYy
LnJlbW92ZUFsbCgiMSIpKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2Mi5zaXplKCkpOworCisgICAg
djIgPSB7IjEiLCAiMiIsICIxIiwgIjIiLCAiMSIsICIyIiwgIjIiLCAiMSIsICIxIiwgIjEifTsK
KyAgICBFWFBFQ1RfRVEoMTBVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg2VSwgdjIucmVt
b3ZlQWxsKCIxIikpOworICAgIEVYUEVDVF9FUSg0VSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2Mi5maW5kKCIxIikgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9FUSg0VSwgdjIucmVt
b3ZlQWxsKCIyIikpOworICAgIEVYUEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7CisKKyAgICB2MiA9
IHsiMyIsICIxIiwgIjIiLCAiMSIsICIyIiwgIjEiLCAiMiIsICIyIiwgIjEiLCAiMSIsICIxIiwg
IjMifTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg2VSwg
djIucmVtb3ZlQWxsKCIxIikpOworICAgIEVYUEVDVF9FUSg2VSwgdjIuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRSh2Mi5maW5kKCIxIikgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKHYy
ID09IFZlY3RvcjxDU3RyaW5nPih7IjMiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIzIn0pKTsKKwor
ICAgIEVYUEVDVF9FUSg0VSwgdjIucmVtb3ZlQWxsKCIyIikpOworICAgIEVYUEVDVF9FUSgyVSwg
djIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5maW5kKCIyIikgPT0gbm90Rm91bmQpOwor
ICAgIEVYUEVDVF9UUlVFKHYyID09IFZlY3RvcjxDU3RyaW5nPih7IjMiLCAiMyJ9KSk7CisKKyAg
ICBFWFBFQ1RfRVEoMlUsIHYyLnJlbW92ZUFsbCgiMyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5p
c0VtcHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245963</attachid>
            <date>2015-02-03 13:52:25 -0800</date>
            <delta_ts>2015-02-03 20:53:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141192-20150203135225.patch</filename>
            <type>text/plain</type>
            <size>26776</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
M2MxNmE3NzJjMWVkYjQzMTFjMDRiYjk1ZGEyMWI2YzljNGM1ODdhLi45MTEyOWE2ODk0MzM2MDcz
ZjU0YTRjYzU2ODM4ZTFjMTVhMGUyMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBtZXRob2Rz
IHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1
ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2U6OnJlbW92ZSk6CisKIDIwMTUtMDItMDIgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0IHNob3VsZCBiZSBtYXJr
ZWQgTm9kZU11c3RHZW5lcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0NWY2ZWFmYjFiZTI4MDg2NWRiOTQyZDUyOTIwYWQw
NDI4YzMzOWU2Li40NDQ4ODAwY2RjNWZlZDU1MjcxODU0MDAwNGU0MWM4NDhmNTllNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1l
dGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBjb252
ZW5pZW5jZSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIHRvIHJlZHVjZSBjb21wbGV4
aXR5IGEgYml0IGF0IGNhbGwgc2l0ZXMuIFRoZSBuYW1pbmcgaXMgaW5zcGlyZWQgYnkKKyAgICAg
ICAgUVZlY3Rvci4KKworICAgICAgICBJIGFtIHBsYW5uaW5nIHRvIGFkZCBvdmVybG9hZHMgZm9y
IHRoZXNlIHRha2luZyBhIGxhbWJkYSBmdW5jdGlvbiBmb3IKKyAgICAgICAgbWF0Y2hpbmcgaW4g
YSBmb2xsb3ctdXAgcGF0Y2ggYXMgd2VsbC4gSSBoYXZlIHNlZW4gcXVpdGUgYSBmZXcKKyAgICAg
ICAgVmVjdG9yOjpyZW1vdmUoaW5kZXgpIGNhbGwgc2l0ZXMgdGhhdCB3b3VsZCBiZW5lZml0IGZy
b20gaXQuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ok92ZXJmbG93
SGFuZGxlcj46OnJlbW92ZU9uZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZUFsbCk6CisKIDIwMTUtMDItMDIgIERoaSBBdXJyYWhtYW4gIDxkaW9yYWhtYW5Acm9ja3li
YXJzLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBtYXRjaGVzTGFuZ1BzZXVkb0NsYXNzKCkgb2Yg
OmxhbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhhN2FmNDk5ZjQzMjk2YTE1OTMxNDczNjBjYjU2NGU2OWUw
NDgyYTguLmNkY2M3ZDRiNmM1MmVjOTQ3NzU0ZjdhY2E1NTk2ODQwY2FjNjQ2MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCByZW1vdmVPbmUodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVl
KSBtZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlT25lKHZhbHVlKSAvIHJlbW92
ZUFsbCh2YWx1ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisg
ICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1v
dmVJbWdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUZyb21WZWN0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZTo6dW5yZWdpc3RlclBvcHVwT3BlbmluZ09ic2VydmVyKToKKyAgICAgICAgKiBwYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9s
aWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9t
UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6cmVtb3ZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpyZW1vdmVDYXB0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNo
aWxkV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1
bnNjaGVkdWxlKToKKwogMjAxNS0wMi0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgSklUIENvbXBpbGUgc2ltcGxlIGNhc2VzIG9mIDpudGgtbGFz
dC1jaGlsZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzZkOGQ1OTI0NDk3MGU1M2VkNzJkMDlmNDc4YzY4Yzk4
ZWJiZmY3Zi4uZWU1ZGYyNmUyZWRhOTFlZjkwMjQzMzI5NTllZTFkYmMwY2FlODcxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTAyLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlbW92ZU9uZSh2YWx1ZSkgLyByZW1vdmVBbGwodmFs
dWUpIG1ldGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVPbmUodmFsdWUpIC8gcmVt
b3ZlQWxsKHZhbHVlKSBBUEkgdG8gc2ltcGxpZnkgdGhlCisgICAgICAgIGNvZGUgYSBiaXQuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3Vw
Q3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
dXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9t
UHJvdG9jb2wpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUxvYWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6
ZGlzY29ubmVjdFByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcDoKKyAgICAgICAgKEV3a0V4dGVuc2lvbjo6cmVtb3Zl
KToKKwogMjAxNS0wMi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgTmV0d29ya0NhY2hlJ3MgY29uc3RydWN0b3IgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDQy
YTZiNWYzY2Y4NDY2ZmUxYWYyNmYyNDA2YzliNTFjZDMzOTgzY2IuLjcxNzE2MzU5YmU2MzE0ZmUw
ZDIyYTBhYzdmN2U4NGFkZTgwMDFmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTc4NiwxMiArNzg2LDcgQEAgYm9v
bCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4mIG8KIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX2RhdGEucmVtb3ZlKG5hbWUpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9v
cmRlcltpXSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBtX29yZGVyLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fb3JkZXIucmVtb3ZlT25lKG5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBi
L1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDg0YTE1NGEyN2VkYmYxYzBlODNhYjI1MzZh
YzA1ODQ0ODVhMTA0ZTcuLmE3NDNlZmUyODg3YmFiZTE4ZGU1Mjg0OTg3ZmI2MTk5OGQ3NzZlZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCkBAIC03MzUsNiArNzM1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmUo
c2l6ZV90IHBvc2l0aW9uKTsKICAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVf
dCBsZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+ICBib29sIHJlbW92ZU9uZShjb25z
dCBVJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gIHVuc2lnbmVkIHJlbW92ZUFsbChjb25z
dCBVJik7CiAKICAgICB2b2lkIHJlbW92ZUxhc3QoKSAKICAgICB7CkBAIC0xMzA5LDYgKzEzMTEs
NDUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uLAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFU+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZU9uZShjb25zdCBVJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgaW5k
ZXggPSBmaW5kKHZhbHVlKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBVPgoraW5saW5lIHVu
c2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3Zl
QWxsKGNvbnN0IFUmIHZhbHVlKQoreworICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwor
ICAgIGl0ZXJhdG9yIGhvbGVFbmQgPSBlbmQoKTsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0g
MDsKKyAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbigpLCBpdEVuZCA9IGVuZCgpOyBpdCAhPSBpdEVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoKml0ID09IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAo
aG9sZUJlZ2luID09IGVuZCgpKQorICAgICAgICAgICAgICAgIGhvbGVCZWdpbiA9IGl0OworICAg
ICAgICAgICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBpdCkgeworICAgICAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9sZUVuZCwgaXQsIGhvbGVCZWdpbik7CisgICAg
ICAgICAgICAgICAgaG9sZUJlZ2luICs9IGl0IC0gaG9sZUVuZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGhvbGVFbmQgPSBpdCArIDE7CisgICAgICAgICAgICBpdC0+flQoKTsKKyAgICAg
ICAgICAgICsrbWF0Y2hDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaG9sZUVuZCAh
PSBlbmQoKSkKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhob2xlRW5k
LCBlbmQoKSwgaG9sZUJlZ2luKTsKKyAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3Np
emUgLSBtYXRjaENvdW50KTsKKyAgICBtX3NpemUgLT0gbWF0Y2hDb3VudDsKKyAgICByZXR1cm4g
bWF0Y2hDb3VudDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJldmVyc2UoKQogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zaXplIC8gMjsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcAppbmRleCBhYTBkNzVjMGQyYzI0Zjg2M2ZmMTVjNGFkYzEyMDdmNzI3
N2U4YmVmLi4xNDMyZmUwMjU3Yjg5YjM0NGExYjIzYzc3OTlkNWQ5MDcyNDEwZDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDg0LDkgKzQ4NCw4IEBA
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpyZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0KiBz
aGVldCkKIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQoQ1NTU3R5
bGVTaGVldCogc2hlZXQpCiB7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9jbGllbnRzLmZpbmQo
c2hlZXQpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0gICAgbV9jbGllbnRz
LnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVkID0gbV9jbGllbnRzLnJlbW92ZU9u
ZShzaGVldCk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9p
ZCBTdHlsZVNoZWV0Q29udGVudHM6OmFkZGVkVG9NZW1vcnlDYWNoZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNjg1YjE5NmZhZjcyZjYxZWNjYzhlZDMxMmVj
NDk4YWVlMmYwMjllYi4uYWMwNTNlYjBkZmRkNTM0NzVkZjA2YjU1Y2I1MTAxZWViZjMyMmEyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNTEwLDE2ICs1MTAs
NiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4g
c3RhdGljIHZvaWQgcmVtb3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVt
KQotewotICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBzaXplOyArK2kpCi0gICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgewotICAgICAg
ICAgICAgdmVjLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci19Ci0K
IHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmli
dXRlKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdl
RW5kKQogewogICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC02MDgs
MTggKzU5OCwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVG
b3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgdW5zaWduZWQgaW5k
ZXg7Ci0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpbmRleF0g
PT0gZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
YXNzb2NpYXRlZEVsZW1lbnRzLmZpbmQoZSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkpOwogICAgIGlmIChp
bmRleCA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXgpCiAgICAgICAgIC0tbV9hc3Nv
Y2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKICAgICBpZiAoaW5kZXggPCBtX2Fzc29jaWF0ZWRF
bGVtZW50c0FmdGVySW5kZXgpCiAgICAgICAgIC0tbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlcklu
ZGV4OwogICAgIHJlbW92ZUZyb21QYXN0TmFtZXNNYXAoZSk7Ci0gICAgcmVtb3ZlRnJvbVZlY3Rv
cihtX2Fzc29jaWF0ZWRFbGVtZW50cywgZSk7CisgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMucmVt
b3ZlKGluZGV4KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFz
c29jaWF0ZWRGb3JtQ29udHJvbChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtQ29u
dHJvbEVsZW1lbnQpCkBAIC02NTMsOSArNjM5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJl
Z2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogCiB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogewotICAgIEFTU0VS
VChtX2ltYWdlRWxlbWVudHMuZmluZChlKSAhPSBub3RGb3VuZCk7CiAgICAgcmVtb3ZlRnJvbVBh
c3ROYW1lc01hcChlKTsKLSAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7
CisgICAgYm9vbCByZW1vdmVkID0gbV9pbWFnZUVsZW1lbnRzLnJlbW92ZU9uZShlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4
IDY4YmY2NjhjYTMyNTYzZTFjZjFiYTcyZTU2NDNmN2M2MzY5NzM5MjAuLjQ2YWY0Mzg3ZDM1MTRm
NzZlOGY4Mjg5MDA0Zjk1YWJkODliMmZkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTYz
Nyw5ICs2MzcsOCBAQCB2b2lkIENocm9tZTo6cmVnaXN0ZXJQb3B1cE9wZW5pbmdPYnNlcnZlcihQ
b3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiAKIHZvaWQgQ2hyb21lOjp1bnJlZ2lzdGVy
UG9wdXBPcGVuaW5nT2JzZXJ2ZXIoUG9wdXBPcGVuaW5nT2JzZXJ2ZXIqIG9ic2VydmVyKQogewot
ICAgIHNpemVfdCBpbmRleCA9IG1fcG9wdXBPcGVuaW5nT2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIp
OwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgbV9wb3B1cE9wZW5pbmdPYnNl
cnZlcnMucmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3BvcHVwT3BlbmluZ09i
c2VydmVycy5yZW1vdmVPbmUob2JzZXJ2ZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwg
cmVtb3ZlZCk7CiB9CiAKIHZvaWQgQ2hyb21lOjpub3RpZnlQb3B1cE9wZW5pbmdPYnNlcnZlcnMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGM2NjA2NTU4OGJhYTUwNDkyNDI4ZThhMzc5MGM3ZWMwODZjNjg5MWYuLjFiMDVkNWVi
NmI5YWMzODU1NGE1MDliNTI5Yjg5MmY5MTcxZDY3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTE1MSw5ICsxNTEsOCBAQCB2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybAogCiAgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVy
bGF5KS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1f
cGFnZU92ZXJsYXlzLmZpbmQob3ZlcmxheSk7Ci0gICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBu
b3RGb3VuZCk7Ci0gICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisgICAg
Ym9vbCByZW1vdmVkID0gbV9wYWdlT3ZlcmxheXMucmVtb3ZlT25lKG92ZXJsYXkpOworICAgIEFT
U0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAKICAgICB1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eVBvbGljeS5jcHAKaW5kZXggMzUyN2FiODEyY2M3OWVlYmZmZTNhMjdkYjMwYmQ2NjJkMzkx
ZjQ3Ny4uN2RhNjkyMDU1N2Q1ODUxOTExNjI4YjEzNDMwNDc3OGU2YjM5NTRhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTE1NCwxNCArMTU0LDExIEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgp
OwotICAgIHNpemVfdCBpbmRleCA9IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGlu
YXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0JiBsaXN0ID0gKml0LT52YWx1ZTsKKyAgICBpZiAoIWxp
c3QucmVtb3ZlT25lKE9yaWdpbkFjY2Vzc0VudHJ5KGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3Rp
bmF0aW9uRG9tYWluLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyA/IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpBbGxvd1N1YmRvbWFpbnMgOiBPcmlnaW5BY2Nlc3NFbnRyeTo6RGlzYWxsb3dTdWJkb21h
aW5zKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxpc3QtPnJlbW92ZShpbmRleCk7Ci0KLSAg
ICBpZiAobGlzdC0+aXNFbXB0eSgpKQorICAgIGlmIChsaXN0LmlzRW1wdHkoKSkKICAgICAgICAg
bWFwLnJlbW92ZShpdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggOTc5OWI4NWU5NTk1OTE1MzEzMmNmNGVjZTFk
MjdmZTJjNjEzYTRiMC4uNmY2OWQ2Y2RjZGZhZTUwYzQ2YmZhZWVmNWFiMDBiMGE4YjgwM2M0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTI1MywxNCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbigpCiB2b2lkIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQogewogICAg
IGlmIChtX3BhcmVudCkgewotICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbV9wYXJlbnQtPm1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzID09IG1fcGFyZW50LT5tX2NoaWxkcmVuW2ldKSB7Ci0gICAgICAgICAgICAgICAgbV9w
YXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVt
b3ZlT25lKHRoaXMpOwogICAgICAgICBzZXRQYXJlbnQobnVsbHB0cik7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXggMzAy
Yjk5NDY0OTQ0ODI0NDFjMWM0YWJmZGNkNzE4ODA0MWRiZDcwZi4uNTUxMDI3NzRhZTg5MmE4NDI2
NDMzYWY4Y2Q0NzQyNmNmZTMxNGU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwCkBAIC04OCwxMiArODgsNyBAQCB2b2lkIFJlbmRlclNlYXJj
aEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKQogICAgIGlmIChmcmFtZSgpLnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHNpemUgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0g
c2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ld
ID09IHZhbHVlKQotICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmUoaSk7Ci0gICAg
fQotCisgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVBbGwodmFsdWUpOwogICAgIG1fcmVjZW50
U2VhcmNoZXMuaW5zZXJ0KDAsIHZhbHVlKTsKICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50Piht
X3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dEVsZW1lbnQoKS5tYXhSZXN1bHRzKCkpCiAg
ICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZWZjYjFjZDhlN2FhNTNkYjkzODZjMzUxZmMwMDZm
YzI4ZGMzN2Q4ZC4uOTAwZjg0ZGQwZWE3ZDczNGE2Y2Q2MDlkMzM0N2EyMTgxZGQ3NmQ4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0yMzAsMTIgKzIzMCw4
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENhcHRpb24oY29uc3QgUmVuZGVyVGFibGVDYXB0aW9u
KiBjYXB0aW9uKQogCiB2b2lkIFJlbmRlclRhYmxlOjpyZW1vdmVDYXB0aW9uKGNvbnN0IFJlbmRl
clRhYmxlQ2FwdGlvbiogb2xkQ2FwdGlvbikKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2NhcHRp
b25zLmZpbmQob2xkQ2FwdGlvbik7Ci0gICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAg
ICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2FwdGlv
bnMucmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX2NhcHRpb25zLnJlbW92ZU9u
ZShvbGRDYXB0aW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQog
CiB2b2lkIFJlbmRlclRhYmxlOjppbnZhbGlkYXRlQ2FjaGVkQ29sdW1ucygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCBmZDIyNmZlNzk0
MDI3ZDJhYWQ2ZjQ3ZGU2MmU1YmM5OWIwYjViYjUzLi5lNzhkMjhjZDAzZGJkYzIwNDE1OWQ0YmFh
ZTM1MmJlOTdiMmIwYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHAKQEAgLTI2Miw5ICsyNjIsOCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnN1
YnRyZWVDaGlsZFdpbGxCZVJlbW92ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgVmVjdG9yPFNWR1Rl
eAogICAgIGlmIChuZXh0KQogICAgICAgICBhZmZlY3RlZEF0dHJpYnV0ZXMuYXBwZW5kKG5leHQp
OwogCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9sYXlvdXRBdHRyaWJ1dGVzLmZpbmQodGV4dC5s
YXlvdXRBdHRyaWJ1dGVzKCkpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0g
ICAgbV9sYXlvdXRBdHRyaWJ1dGVzLnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVk
ID0gbV9sYXlvdXRBdHRyaWJ1dGVzLnJlbW92ZU9uZSh0ZXh0LmxheW91dEF0dHJpYnV0ZXMoKSk7
CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9pZCBSZW5kZXJT
VkdUZXh0OjpzdWJ0cmVlQ2hpbGRXYXNSZW1vdmVkKGNvbnN0IFZlY3RvcjxTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyosIDI+JiBhZmZlY3RlZEF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDA0OTE5Mjg4MTI4NGU3NDg3OGQ5MzE4
YmZkYTdlZDE1ZmNhNTE0ZDIuLmM4YzBkZGIzZmY0ZWJiMTI1YTFlMzJiZjE0MTc3ZDI1YTEzMDdl
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBA
IC0zNzksMTAgKzM3OSw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkQWxs
RWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVmCiB2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxl
bWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCiB7CiAgICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJl
bW92ZShyZWZlcmVuY2VkRWxlbWVudCk7Ci0KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX3JlYnVp
bGRFbGVtZW50cy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBpZiAocG9zaXRpb24gIT0g
bm90Rm91bmQpCi0gICAgICAgIG1fcmVidWlsZEVsZW1lbnRzLnJlbW92ZShwb3NpdGlvbik7Cisg
ICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlT25lKHJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IDZiY2QyNWQ1MzY0ZDJjMmZiMDU0NjVlMDI1
Y2ZlNjhhZGM4N2QwNjEuLjcxYTA3NWE5YmQ0MGQyZmE5YzM2NWRkNzI2NjVmOTM4Y2UyYTg3YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCkBAIC05Miw5ICs5Miw4IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1
bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiwgU1ZHRWxlbWVudCogdGFyZ2V0CiAgICAgRWxl
bWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldCwgYXR0cmlidXRlTmFtZSk7CiAgICAgQW5pbWF0
aW9uc1ZlY3Rvciogc2NoZWR1bGVkID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmdldChrZXkpOwog
ICAgIEFTU0VSVChzY2hlZHVsZWQpOwotICAgIHNpemVfdCBpZHggPSBzY2hlZHVsZWQtPmZpbmQo
YW5pbWF0aW9uKTsKLSAgICBBU1NFUlQoaWR4ICE9IG5vdEZvdW5kKTsKLSAgICBzY2hlZHVsZWQt
PnJlbW92ZShpZHgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHNjaGVkdWxlZC0+cmVtb3ZlT25lKGFu
aW1hdGlvbik7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9p
ZCBTTUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9X
ZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3VwQ3VzdG9tUHJvdG9j
b2xSZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGNiZjEyODdjM2M2MzEzNWE5OTEwMzFlY2Q4ZGNh
YTBlZTYxN2Y1OC4uODk3NjEwOTA2NmE2NDU2MDFmNDI0YWYwZDQxMTJiYjExMGUzZDliYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBD
dXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtOTYsOCArOTYsOCBAQCB2b2lkIFdl
YlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3Vz
dG9tUHJvdG9jb2woY29ucwogCiAgICAgcHJvY2Vzc1Bvb2woKS0+dW5yZWdpc3RlclNjaGVtZUZv
ckN1c3RvbVByb3RvY29sKHNjaGVtZSk7CiAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2NoZW1l
cy5jb250YWlucyhzY2hlbWUpKTsKLSAgICBtX3JlZ2lzdGVyZWRTY2hlbWVzLnJlbW92ZShtX3Jl
Z2lzdGVyZWRTY2hlbWVzLmZpbmQoc2NoZW1lKSk7CisgICAgYm9vbCByZW1vdmVkID0gbV9yZWdp
c3RlcmVkU2NoZW1lcy5yZW1vdmVPbmUoc2NoZW1lKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92
ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFdlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5h
Z2VyOjpzdGFydExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VMb2FkU3RhdGUuY3BwCmluZGV4IDg2Y2U5ZTA4NjQyMGIzYzE2M2ViNjA4OGRmMzMzMDRhNTY2
NWZmY2UuLjhmMjgwOTQ1NTUxMmE1MDUzYzgyZTM0NzFmY2VkNGZmNjNhZjljMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAKQEAgLTc0LDEwICs3NCw4IEBA
IHZvaWQgUGFnZUxvYWRTdGF0ZTo6YWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiB2
b2lkIFBhZ2VMb2FkU3RhdGU6OnJlbW92ZU9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKIHsK
LSAgICBBU1NFUlQobV9vYnNlcnZlcnMuY29udGFpbnMoJm9ic2VydmVyKSk7Ci0KLSAgICBzaXpl
X3QgaW5kZXggPSBtX29ic2VydmVycy5maW5kKCZvYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlcnMu
cmVtb3ZlKGluZGV4KTsKKyAgICBib29sIHJlbW92ZWQgPSBtX29ic2VydmVycy5yZW1vdmVPbmUo
Jm9ic2VydmVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2
b2lkIFBhZ2VMb2FkU3RhdGU6OmVuZFRyYW5zYWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGJhNDQwMmFlNTdmNTk2NTEyZjgxOTBiMDhl
NzJmMzkzMGJkYWZkN2IuLmM0ZjY5NTMwNTY2MGUyNjlkYjFjMjMxNTIyNDI5ZWNiYmI3MTIwMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjM3
LDggKzIzNyw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAK
IFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogewotICAgIEFTU0VSVChwcm9jZXNz
UG9vbHMoKS5maW5kKHRoaXMpICE9IG5vdEZvdW5kKTsKLSAgICBwcm9jZXNzUG9vbHMoKS5yZW1v
dmUocHJvY2Vzc1Bvb2xzKCkuZmluZCh0aGlzKSk7CisgICAgYm9vbCByZW1vdmVkID0gcHJvY2Vz
c1Bvb2xzKCkucmVtb3ZlT25lKHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVt
b3ZlZCk7CiAKICAgICByZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyKHRoaXMpOwogCkBAIC04
MDUsNyArODA1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvbnRleHRT
dXBwbGVtZW50Kj4oc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKSktPnBy
b2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKIAotICAgICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUobV9w
cm9jZXNzZXMuZmluZChwcm9jZXNzKSk7CisgICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZU9uZShw
cm9jZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODE5LDggKzgxOSw4IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcykKICAgICAvLyBpZiBpdCB3ZXJlIGludm9rZWQgZnJvbSBWZWN0b3I6OnJlbW92ZSgpLiBS
ZWZQdHIgZGVsYXlzIGRlc3RydWN0aW9uIHVudGlsIGl0J3Mgc2FmZS4KICAgICBSZWZQdHI8V2Vi
UHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHByb2Nlc3MpOwogICAgIGlmIChtX3Byb2Nlc3NXaXRoUGFn
ZUNhY2hlID09IHByb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPSAwOwot
ICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nlc3Nlcy5maW5kKHByb2Nlc3MpKTsKKyAgICAg
ICAgbV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9IG51bGxwdHI7CisgICAgbV9wcm9jZXNzZXMucmVt
b3ZlT25lKHByb2Nlc3MpOwogfQogCiBXZWJQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjpj
cmVhdGVOZXdXZWJQcm9jZXNzUmVzcGVjdGluZ1Byb2Nlc3NDb3VudExpbWl0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tf
ZXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcAppbmRleCBhMWJjODU2YjFlYmEzMmU3YzZjMDZhZTNm
OGVkMDliNGIzNzUxOTc2Li44NmYyOWFkNjM5YzBmY2FkOGY3ODY4MzUxMWY4ZGRjODUwZWRjZmEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24uY3BwCkBAIC0zNyw3ICszNyw3IEBA
IHZvaWQgRXdrRXh0ZW5zaW9uOjphcHBlbmQoRXdrX0V4dGVuc2lvbl9DbGllbnQqIGNsaWVudCkK
IAogdm9pZCBFd2tFeHRlbnNpb246OnJlbW92ZShFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50
KQogewotICAgIG1fY2xpZW50cy5yZW1vdmUobV9jbGllbnRzLmZpbmQoY2xpZW50KSk7CisgICAg
bV9jbGllbnRzLnJlbW92ZU9uZShjbGllbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2V4dGVuc2lv
bl9jbGllbnRfYWRkKEV3a19FeHRlbnNpb24qIGV4dGVuc2lvbiwgRXdrX0V4dGVuc2lvbl9DbGll
bnQqIGNsaWVudCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlZTFmMDUzYjVlZTE3NjQ5MmVjYmVkYTBiNjVhZjFhYzNiNTNmYmQxLi40MThhM2Uz
MjI5ZWEyZDNkZGU4NTkyZjcxMTc2MGQ0NTI3ZTU0YTZhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDItMDMg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVtb3ZlT25l
KHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1ZSkgbWV0aG9kcyB0byBXVEY6OlZlY3RvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTkyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0cyBm
b3IgVmVjdG9yOjpyZW1vdmVPbmUodmFsdWUpIGFuZAorICAgICAgICBWZWN0b3I6OnJlbW92ZUFs
bCh2YWx1ZSkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDItMDIgIFNhYW0gQmFy
YXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAgICAgIENyZWF0ZSB0ZXN0cyBmb3Ig
SlNDJ3MgQ29udHJvbCBGbG93IFByb2ZpbGVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VmVjdG9yLmNwcAppbmRleCBkMjA3YTBmZTBhNzRkZjUxMDM0NjhkNzQ0NmNlYTY2YmIxMGU2YzA5
Li42NjA3YWM1OGY0MTkwOTIzMzNlNmFlOGQzMTc5NjNiZTkwNzI5ZWMwIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIk1vdmVPbmx5LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCkBAIC0zMjMsNCAr
MzI0LDEyNCBAQCBURVNUKFdURl9WZWN0b3IsIFZlY3Rvck9mVmVjdG9yc09mVmVjdG9yc0lubGlu
ZUNhcGFjaXR5U3dhcCkKICAgICBFWFBFQ1RfRVEoMFUsIGIuc2l6ZSgpKTsKIH0KIAorVEVTVChX
VEZfVmVjdG9yLCBSZW1vdmVPbmUpCit7CisgICAgVmVjdG9yPGludD4gdjsKKyAgICBFWFBFQ1Rf
VFJVRSh2LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlT25lKDEpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVPbmUoLTEpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1w
dHkoKSk7CisKKyAgICB2LmZpbGwoMiwgMTApOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVPbmUoMSkpOworICAgIEVYUEVDVF9FUSgxMFUs
IHYuc2l6ZSgpKTsKKyAgICB2LmNsZWFyKCk7CisKKyAgICB2LmZpbGwoMSwgMTApOworICAgIEVY
UEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LnJlbW92ZU9uZSgxKSk7
CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMX0pKTsKKyAgICBFWFBFQ1RfRVEoOVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
di5yZW1vdmVPbmUoMikpOworICAgIEVYUEVDVF9FUSg5VSwgdi5zaXplKCkpOworICAgIEVYUEVD
VF9UUlVFKHYgPT0gVmVjdG9yPGludD4oezEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9KSk7CisK
KyAgICB2LnJlc2l6ZSgxKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2LnJlbW92ZU9uZSgxKSk7CisgICAgRVhQRUNUX0VRKDBVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9WZWN0b3IsIFJlbW92
ZUFsbCkKK3sKKyAgICAvLyBVc2luZyBhIG1lbWNweS1hYmxlIHR5cGUuCisgICAgc3RhdGljX2Fz
c2VydChWZWN0b3JUcmFpdHM8aW50Pjo6Y2FuTW92ZVdpdGhNZW1jcHksICJTaG91bGQgdXNlIGEg
bWVtY3B5LWFibGUgdHlwZSIpOworICAgIFZlY3RvcjxpbnQ+IHY7CisgICAgRVhQRUNUX1RSVUUo
di5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHYucmVtb3ZlQWxsKC0xKSk7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkp
OworCisgICAgdi5maWxsKDEsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDEwVSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9UUlVFKHYuaXNF
bXB0eSgpKTsKKworICAgIHYuZmlsbCgyLCAxMCk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSgx
MFUsIHYuc2l6ZSgpKTsKKworICAgIHYgPSB7MSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMX07
CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg2VSwgdi5yZW1v
dmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSg0VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVF
KHYgPT0gVmVjdG9yPGludD4oezIsIDIsIDIsIDJ9KSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5k
KDEpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYucmVtb3ZlQWxsKDIpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisKKyAgICB2ID0gezMsIDEsIDIsIDEsIDIsIDEs
IDIsIDIsIDEsIDEsIDEsIDN9OworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMywgdi5maXJzdCgpKTsKKyAgICBFWFBFQ1RfRVEoMywgdi5sYXN0KCkpOworICAg
IEVYUEVDVF9FUSg2VSwgdi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9FUSg2VSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZCgxKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MywgMiwgMiwgMiwgMiwgM30pKTsKKworICAgIEVYUEVD
VF9FUSg0VSwgdi5yZW1vdmVBbGwoMikpOworICAgIEVYUEVDVF9FUSgyVSwgdi5zaXplKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHYuZmluZCgyKSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUo
diA9PSBWZWN0b3I8aW50Pih7MywgM30pKTsKKworICAgIEVYUEVDVF9FUSgyVSwgdi5yZW1vdmVB
bGwoMykpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKworICAgIC8vIFVzaW5nIGEg
bm9uIG1lbWNweS1hYmxlIHR5cGUuCisgICAgc3RhdGljX2Fzc2VydCghVmVjdG9yVHJhaXRzPENT
dHJpbmc+OjpjYW5Nb3ZlV2l0aE1lbWNweSwgIlNob3VsZCB1c2UgYSBub24gbWVtY3B5LWFibGUg
dHlwZSIpOworICAgIFZlY3RvcjxDU3RyaW5nPiB2RXhwZWN0ZWQ7CisgICAgVmVjdG9yPENTdHJp
bmc+IHYyOworICAgIEVYUEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHYyLnJlbW92ZUFsbCgiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pc0VtcHR5KCkpOworCisg
ICAgdjIuZmlsbCgiMSIsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2Mi5zaXplKCkpOworICAg
IEVYUEVDVF9FUSgxMFUsIHYyLnJlbW92ZUFsbCgiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5p
c0VtcHR5KCkpOworCisgICAgdjIuZmlsbCgiMiIsIDEwKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2
Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwVSwgdjIucmVtb3ZlQWxsKCIxIikpOworICAgIEVY
UEVDVF9FUSgxMFUsIHYyLnNpemUoKSk7CisKKyAgICB2MiA9IHsiMSIsICIyIiwgIjEiLCAiMiIs
ICIxIiwgIjIiLCAiMiIsICIxIiwgIjEiLCAiMSJ9OworICAgIEVYUEVDVF9FUSgxMFUsIHYyLnNp
emUoKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2Mi5yZW1vdmVBbGwoIjEiKSk7CisgICAgRVhQRUNU
X0VRKDRVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHYyLmZpbmQoIjEiKSA9PSBub3RG
b3VuZCk7CisgICAgRVhQRUNUX0VRKDRVLCB2Mi5yZW1vdmVBbGwoIjIiKSk7CisgICAgRVhQRUNU
X1RSVUUodjIuaXNFbXB0eSgpKTsKKworICAgIHYyID0geyIzIiwgIjEiLCAiMiIsICIxIiwgIjIi
LCAiMSIsICIyIiwgIjIiLCAiMSIsICIxIiwgIjEiLCAiMyJ9OworICAgIEVYUEVDVF9FUSgxMlUs
IHYyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2Mi5yZW1vdmVBbGwoIjEiKSk7CisgICAg
RVhQRUNUX0VRKDZVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHYyLmZpbmQoIjEiKSA9
PSBub3RGb3VuZCk7CisgICAgdkV4cGVjdGVkID0geyIzIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAi
MyJ9OworICAgIEVYUEVDVF9UUlVFKHYyID09IHZFeHBlY3RlZCk7CisKKyAgICBFWFBFQ1RfRVEo
NFUsIHYyLnJlbW92ZUFsbCgiMiIpKTsKKyAgICBFWFBFQ1RfRVEoMlUsIHYyLnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodjIuZmluZCgiMiIpID09IG5vdEZvdW5kKTsKKyAgICB2RXhwZWN0ZWQg
PSB7IjMiLCAiMyJ9OworICAgIEVYUEVDVF9UUlVFKHYyID09IHZFeHBlY3RlZCk7CisKKyAgICBF
WFBFQ1RfRVEoMlUsIHYyLnJlbW92ZUFsbCgiMyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pc0Vt
cHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246012</attachid>
            <date>2015-02-03 20:53:32 -0800</date>
            <delta_ts>2015-02-04 00:39:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141192-20150203205331.patch</filename>
            <type>text/plain</type>
            <size>27625</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ODY2YjE1Yzc0YjMzYTE1ODBkZTE5OTE5Y2NiMjAxMTNjNWNlNjRmLi44MjAyZDQ1N2I1ZTBiMTc4
M2Y3ZGRjMGEzMGE2YTljMmNlZTg2ODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCByZW1vdmVGaXJzdCh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1ldGhv
ZHMgdG8gV1RGOjpWZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4u
CisKKyAgICAgICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZpcnN0KHZhbHVlKSAvIHJlbW92ZUFs
bCh2YWx1ZSkgQVBJIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2U6OnJlbW92ZSk6CisKIDIwMTUtMDItMDMgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmthcm91bmQgYSB0aHJlYWQgbGlicmFy
eSBidWcgd2hlcmUgdGhyZWFkIGRlc3RydWN0b3JzIG1heSBub3QgZ2V0IGNhbGxlZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXgg
NDVmNmVhZmIxYmUyODA4NjVkYjk0MmQ1MjkyMGFkMDQyOGMzMzllNi4uYWMxMzc2ZGM5ZDQ4YzUw
ZTg0YzhmZjAyOTRiMTBhN2QwMzA4OGVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNS0wMi0w
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZW1vdmVG
aXJzdCh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1ldGhvZHMgdG8gV1RGOjpWZWN0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgQWRkIHJlbW92
ZUZpcnN0KHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1ZSkgY29udmVuaWVuY2UgbWV0aG9kcyB0bwor
ICAgICAgICBXVEY6OlZlY3RvciB0byByZWR1Y2UgY29tcGxleGl0eSBhIGJpdCBhdCBjYWxsIHNp
dGVzLgorCisgICAgICAgIEkgYW0gcGxhbm5pbmcgdG8gYWRkIG92ZXJsb2FkcyBmb3IgdGhlc2Ug
dGFraW5nIGEgbGFtYmRhIGZ1bmN0aW9uIGZvcgorICAgICAgICBtYXRjaGluZyBpbiBhIGZvbGxv
dy11cCBwYXRjaCBhcyB3ZWxsLiBJIGhhdmUgc2VlbiBxdWl0ZSBhIGZldworICAgICAgICBWZWN0
b3I6OnJlbW92ZShpbmRleCkgY2FsbCBzaXRlcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBpdC4K
KworICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVy
Pjo6cmVtb3ZlRmlyc3QpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVB
bGwpOgorCiAyMDE1LTAyLTAyICBEaGkgQXVycmFobWFuICA8ZGlvcmFobWFuQHJvY2t5YmFycy5j
b20+CiAKICAgICAgICAgT3B0aW1pemUgbWF0Y2hlc0xhbmdQc2V1ZG9DbGFzcygpIG9mIDpsYW5n
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA5YzNmMjY2Y2VkMWJmYWIwMDRlZTBjNTkxNjM3OTA2MGU2MDUwZGFm
Li41Njk0ZjRjNzRmM2Y1NDA3NjI0ZmYxYmJkOWJjMzczMmY5OGI0NjRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNDIgQEAKIDIwMTUtMDItMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAorICAgICAgICBBZGQgcmVtb3ZlRmlyc3QodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBt
ZXRob2RzIHRvIFdURjo6VmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDExOTIKKworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3Vs
YWluLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdCh2YWx1ZSkgLyByZW1v
dmVBbGwodmFsdWUpIEFQSSB0byBzaW1wbGlmeSB0aGUKKyAgICAgICAgY29kZSBhIGJpdC4KKwor
ICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTaGVldENvbnRlbnRzOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJl
bW92ZUZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlSW1nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVGcm9tVmVjdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnVucmVnaXN0ZXJQb3B1cE9wZW5pbmdPYnNlcnZlcik6CisgICAgICAgICogcGFnZS9QYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250
cm9sbGVyOjp1bmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eVBv
bGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJv
bVBhcmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlv
bnM6OnJlbW92ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjphZGRTZWFyY2hSZXN1bHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6cmVtb3ZlQ2FwdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnN1YnRyZWVD
aGlsZFdpbGxCZVJlbW92ZWQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxF
bGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
dW5zY2hlZHVsZSk6CisKKzIwMTUtMDItMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKwogICAgICAgICBEcm9wIFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCByZXNvdXJj
ZSBsb2FkIHByaW9yaXR5IGFuZCB1c2UgT3B0aW9uYWw8PiBpbnN0ZWFkCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExODYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDgwN2I1YjQzNWQ4MmYwNjhjOTU1ZGQ3OGM2NGQzMTk3NzM0MTllMzEuLjM1ZGVmNWE4ZDZiNjNk
MDY1Nzg5ODBkM2EyMDBkMDE0M2ZiY2QxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAor
MjAxNS0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCByZW1vdmVGaXJzdCh2YWx1ZSkgLyByZW1vdmVBbGwodmFsdWUpIG1ldGhvZHMgdG8gV1RGOjpW
ZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAg
VXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZpcnN0KHZhbHVlKSAvIHJlbW92ZUFsbCh2YWx1ZSkgQVBJ
IHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICBjb2RlIGEgYml0LgorCisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVx
dWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VwQ3VzdG9tUHJvdG9jb2xS
ZXF1ZXN0TWFuYWdlcjo6dW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VM
b2FkU3RhdGU6OnJlbW92ZU9ic2VydmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQ
b29sKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNz
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVu
c2lvbi5jcHA6CisgICAgICAgIChFd2tFeHRlbnNpb246OnJlbW92ZSk6CisKIDIwMTUtMDItMDMg
IFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEV2
ZXJ5IFBhZ2VPdmVybGF5Q2xpZW50SW1wbCBsZWFrcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDQyYTZiNWYzY2Y4NDY2
ZmUxYWYyNmYyNDA2YzliNTFjZDMzOTgzY2IuLjY1MjMyODM1YmZjNTFiNGNmNDY2NTgzMTcwMGY5
OWVkOGU3Y2ZiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTc4NiwxMiArNzg2LDcgQEAgYm9vbCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4mIG8KIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBtX2RhdGEucmVtb3ZlKG5hbWUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9vcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9vcmRlcltpXSA9PSBu
YW1lKSB7Ci0gICAgICAgICAgICBtX29yZGVyLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIG1fb3JkZXIucmVtb3ZlRmlyc3QobmFtZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1
dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dU
Ri93dGYvVmVjdG9yLmgKaW5kZXggODRhMTU0YTI3ZWRiZjFjMGU4M2FiMjUzNmFjMDU4NDQ4NWEx
MDRlNy4uYTRjNDM1OTQ0NmFhYjNlOTZkNGIxYWUxZjg1M2UxZTQ5YWU4ZjU0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgK
QEAgLTczNSw2ICs3MzUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9z
aXRpb24pOwogICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCByZW1vdmVGaXJzdChjb25zdCBVJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdW5zaWduZWQgcmVtb3ZlQWxsKGNvbnN0IFUmKTsKIAog
ICAgIHZvaWQgcmVtb3ZlTGFzdCgpIAogICAgIHsKQEAgLTEzMDksNiArMTMxMSw0NSBAQCBpbmxp
bmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92
ZShzaXplX3QgcG9zaXRpb24sCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgordGVtcGxhdGU8dHlwZW5hbWUg
VT4KK2lubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
Pjo6cmVtb3ZlRmlyc3QoY29uc3QgVSYgdmFsdWUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmlu
ZCh2YWx1ZSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHJlbW92ZShp
bmRleCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgordGVtcGxhdGU8dHlwZW5hbWUgVT4KK2lubGluZSB1bnNpZ25lZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZUFsbChjb25z
dCBVJiB2YWx1ZSkKK3sKKyAgICBpdGVyYXRvciBob2xlQmVnaW4gPSBlbmQoKTsKKyAgICBpdGVy
YXRvciBob2xlRW5kID0gZW5kKCk7CisgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CisgICAg
Zm9yIChhdXRvIGl0ID0gYmVnaW4oKSwgaXRFbmQgPSBlbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKCppdCA9PSB2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGhvbGVCZWdp
biA9PSBlbmQoKSkKKyAgICAgICAgICAgICAgICBob2xlQmVnaW4gPSBpdDsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGhvbGVFbmQgIT0gaXQpIHsKKyAgICAgICAgICAgICAgICBUeXBlT3BlcmF0aW9u
czo6bW92ZU92ZXJsYXBwaW5nKGhvbGVFbmQsIGl0LCBob2xlQmVnaW4pOworICAgICAgICAgICAg
ICAgIGhvbGVCZWdpbiArPSBpdCAtIGhvbGVFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBob2xlRW5kID0gaXQgKyAxOworICAgICAgICAgICAgaXQtPn5UKCk7CisgICAgICAgICAgICAr
K21hdGNoQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGhvbGVFbmQgIT0gZW5kKCkp
CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9sZUVuZCwgZW5kKCks
IGhvbGVCZWdpbik7CisgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplIC0gbWF0
Y2hDb3VudCk7CisgICAgbV9zaXplIC09IG1hdGNoQ291bnQ7CisgICAgcmV0dXJuIG1hdGNoQ291
bnQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZXZlcnNlKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2l6ZSAvIDI7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAKaW5kZXggYWEwZDc1YzBkMmMyNGY4NjNmZjE1YzRhZGMxMjA3ZjcyNzdlOGJlZi4u
ZmQ1ZTk3ZGViNDQ1MDI3YTQ5OWNiMTczNDdhZTJiMzk1M2VhZmI3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQ4NCw5ICs0ODQsOCBAQCB2b2lkIFN0
eWxlU2hlZXRDb250ZW50czo6cmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVldCogc2hlZXQpCiAK
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp1bnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQq
IHNoZWV0KQogewotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fY2xpZW50cy5maW5kKHNoZWV0KTsK
LSAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwotICAgIG1fY2xpZW50cy5yZW1vdmUo
cG9zaXRpb24pOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fY2xpZW50cy5yZW1vdmVGaXJzdChzaGVl
dCk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9pZCBTdHls
ZVNoZWV0Q29udGVudHM6OmFkZGVkVG9NZW1vcnlDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNjg1YjE5NmZhZjcyZjYxZWNjYzhlZDMxMmVjNDk4YWVl
MmYwMjllYi4uODJmZjExYTcyZjkxNDFmYjRjNzQzZDI4Zjk4NjhjOGMzZWU0NmVlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNTEwLDE2ICs1MTAsNiBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4gc3RhdGlj
IHZvaWQgcmVtb3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVtKQotewot
ICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAh
PSBzaXplOyArK2kpCi0gICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgewotICAgICAgICAgICAg
dmVjLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci19Ci0KIHVuc2ln
bmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEVs
ZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdlRW5kKQog
ewogICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC02MDgsMTggKzU5
OCwxNCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGUpCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxl
bWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgdW5zaWduZWQgaW5kZXg7Ci0g
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpbmRleF0gPT0gZSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbmRleCA9IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLmZpbmQoZSk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkpOwogICAgIGlmIChpbmRleCA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXgpCiAgICAgICAgIC0tbV9hc3NvY2lhdGVk
RWxlbWVudHNCZWZvcmVJbmRleDsKICAgICBpZiAoaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50
c0FmdGVySW5kZXgpCiAgICAgICAgIC0tbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4Owog
ICAgIHJlbW92ZUZyb21QYXN0TmFtZXNNYXAoZSk7Ci0gICAgcmVtb3ZlRnJvbVZlY3RvcihtX2Fz
c29jaWF0ZWRFbGVtZW50cywgZSk7CisgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMucmVtb3ZlKGlu
ZGV4KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVySW52YWxpZEFzc29jaWF0
ZWRGb3JtQ29udHJvbChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBmb3JtQ29udHJvbEVs
ZW1lbnQpCkBAIC02NTMsOSArNjM5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVy
SW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6
cmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50KiBlKQogewotICAgIEFTU0VSVChtX2lt
YWdlRWxlbWVudHMuZmluZChlKSAhPSBub3RGb3VuZCk7CiAgICAgcmVtb3ZlRnJvbVBhc3ROYW1l
c01hcChlKTsKLSAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7CisgICAg
Ym9vbCByZW1vdmVkID0gbV9pbWFnZUVsZW1lbnRzLnJlbW92ZUZpcnN0KGUpOworICAgIEFTU0VS
VF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiB9CiAKIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
SFRNTEZvcm1FbGVtZW50OjplbGVtZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggNjhi
ZjY2OGNhMzI1NjNlMWNmMWJhNzJlNTY0M2Y3YzYzNjk3MzkyMC4uZWExMjM2ZmIyOWViN2RkNTQy
NWQ4Njg2NGVkNmIxYTI4ODgxNzJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNjM3LDkg
KzYzNyw4IEBAIHZvaWQgQ2hyb21lOjpyZWdpc3RlclBvcHVwT3BlbmluZ09ic2VydmVyKFBvcHVw
T3BlbmluZ09ic2VydmVyKiBvYnNlcnZlcikKIAogdm9pZCBDaHJvbWU6OnVucmVnaXN0ZXJQb3B1
cE9wZW5pbmdPYnNlcnZlcihQb3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAg
c2l6ZV90IGluZGV4ID0gbV9wb3B1cE9wZW5pbmdPYnNlcnZlcnMuZmluZChvYnNlcnZlcik7Ci0g
ICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BvcHVwT3BlbmluZ09ic2VydmVy
cy5yZW1vdmUoaW5kZXgpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fcG9wdXBPcGVuaW5nT2JzZXJ2
ZXJzLnJlbW92ZUZpcnN0KG9ic2VydmVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJl
bW92ZWQpOwogfQogCiB2b2lkIENocm9tZTo6bm90aWZ5UG9wdXBPcGVuaW5nT2JzZXJ2ZXJzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApp
bmRleCBjNjYwNjU1ODhiYWE1MDQ5MjQyOGU4YTM3OTBjN2VjMDg2YzY4OTFmLi40MmM3ODBjMDQ3
OTVmNTEzNjQ0N2M4MmRiMmI3YmY3ZTQ4MjY4YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0xNTEsOSArMTUxLDggQEAgdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVy
bGF5LCBQYWdlT3ZlcmwKIAogICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3Zlcmxh
eSktPnJlbW92ZUZyb21QYXJlbnQoKTsKIAotICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBtX3Bh
Z2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOwotICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0gbm90
Rm91bmQpOwotICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOworICAgIGJv
b2wgcmVtb3ZlZCA9IG1fcGFnZU92ZXJsYXlzLnJlbW92ZUZpcnN0KG92ZXJsYXkpOworICAgIEFT
U0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAKICAgICB1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eVBvbGljeS5jcHAKaW5kZXggMzUyN2FiODEyY2M3OWVlYmZmZTNhMjdkYjMwYmQ2NjJkMzkx
ZjQ3Ny4uNTgxYjVjYmZlYWU3NWQ1ZDUyNWRlZGUyNDlhZTBiODQ5OTIzZDVjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eVBvbGljeS5jcHAKQEAgLTE1NCwxNCArMTU0LDEyIEBAIHZvaWQg
U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiBzb3VyCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlLmdldCgp
OwotICAgIHNpemVfdCBpbmRleCA9IGxpc3QtPmZpbmQoT3JpZ2luQWNjZXNzRW50cnkoZGVzdGlu
YXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Eb21haW4sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zID8gT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucyA6IE9yaWdpbkFjY2Vzc0Vu
dHJ5OjpEaXNhbGxvd1N1YmRvbWFpbnMpKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisg
ICAgT3JpZ2luQWNjZXNzV2hpdGVMaXN0JiBsaXN0ID0gKml0LT52YWx1ZTsKKyAgICBPcmlnaW5B
Y2Nlc3NFbnRyeSBvcmlnaW5BY2Nlc3NFbnRyeShkZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5h
dGlvbkRvbWFpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMgPyBPcmlnaW5BY2Nlc3NFbnRy
eTo6QWxsb3dTdWJkb21haW5zIDogT3JpZ2luQWNjZXNzRW50cnk6OkRpc2FsbG93U3ViZG9tYWlu
cyk7CisgICAgaWYgKCFsaXN0LnJlbW92ZUZpcnN0KG9yaWdpbkFjY2Vzc0VudHJ5KSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbGlzdC0+cmVtb3ZlKGluZGV4KTsKLQotICAgIGlmIChsaXN0LT5p
c0VtcHR5KCkpCisgICAgaWYgKGxpc3QuaXNFbXB0eSgpKQogICAgICAgICBtYXAucmVtb3ZlKGl0
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmNwcAppbmRleCA5Nzk5Yjg1ZTk1OTU5MTUzMTMyY2Y0ZWNlMWQyN2ZlMmM2MTNhNGIw
Li5lYmUxMzZlZjJlODA5NWFjMGY0MGZjOWM1MTQ3MDBlNjllMTk0MmY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAtMjUz
LDE0ICsyNTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFsbENoaWxkcmVuKCkKIHZv
aWQgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7CiAgICAgaWYgKG1fcGFyZW50
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX3BhcmVu
dC0+bV9jaGlsZHJlbi5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKHRoaXMgPT0gbV9w
YXJlbnQtPm1fY2hpbGRyZW5baV0pIHsKLSAgICAgICAgICAgICAgICBtX3BhcmVudC0+bV9jaGls
ZHJlbi5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQorICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmVGaXJzdCh0aGlz
KTsKICAgICAgICAgc2V0UGFyZW50KG51bGxwdHIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCmluZGV4IDMwMmI5OTQ2NDk0NDgy
NDQxYzFjNGFiZmRjZDcxODgwNDFkYmQ3MGYuLjU1MTAyNzc0YWU4OTJhODQyNjQzM2FmOGNkNDc0
MjZjZmUzMTRlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmNwcApAQCAtODgsMTIgKzg4LDcgQEAgdm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6YWRk
U2VhcmNoUmVzdWx0KCkKICAgICBpZiAoZnJhbWUoKS5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNz
aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBzaXplID0gc3RhdGljX2Nhc3Q8aW50
PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBpZiAobV9yZWNlbnRTZWFyY2hlc1tpXSA9PSB2YWx1ZSkK
LSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlKGkpOwotICAgIH0KLQorICAgIG1f
cmVjZW50U2VhcmNoZXMucmVtb3ZlQWxsKHZhbHVlKTsKICAgICBtX3JlY2VudFNlYXJjaGVzLmlu
c2VydCgwLCB2YWx1ZSk7CiAgICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFy
Y2hlcy5zaXplKCkpID4gaW5wdXRFbGVtZW50KCkubWF4UmVzdWx0cygpKQogICAgICAgICBtX3Jl
Y2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCmluZGV4IGVmY2IxY2Q4ZTdhYTUzZGI5Mzg2YzM1MWZjMDA2ZmMyOGRjMzdkOGQu
LjViNGRkOWU4MzU2NmQ0MGViZjdkNzhiZTUxNDE0NDMzODJhZjM5ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMjMwLDEyICsyMzAsOCBAQCB2b2lkIFJl
bmRlclRhYmxlOjphZGRDYXB0aW9uKGNvbnN0IFJlbmRlclRhYmxlQ2FwdGlvbiogY2FwdGlvbikK
IAogdm9pZCBSZW5kZXJUYWJsZTo6cmVtb3ZlQ2FwdGlvbihjb25zdCBSZW5kZXJUYWJsZUNhcHRp
b24qIG9sZENhcHRpb24pCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9jYXB0aW9ucy5maW5kKG9s
ZENhcHRpb24pOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhcHRpb25zLnJlbW92ZShp
bmRleCk7CisgICAgYm9vbCByZW1vdmVkID0gbV9jYXB0aW9ucy5yZW1vdmVGaXJzdChvbGRDYXB0
aW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFJl
bmRlclRhYmxlOjppbnZhbGlkYXRlQ2FjaGVkQ29sdW1ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCBmZDIyNmZlNzk0MDI3ZDJhYWQ2
ZjQ3ZGU2MmU1YmM5OWIwYjViYjUzLi5jNjk5YmQ0YmZiNGJkN2NiN2RjMjhjZjI1ZGMyOGMwYmRi
ZDkzOTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAKQEAgLTI2Miw5ICsyNjIsOCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnN1YnRyZWVDaGls
ZFdpbGxCZVJlbW92ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgVmVjdG9yPFNWR1RleAogICAgIGlm
IChuZXh0KQogICAgICAgICBhZmZlY3RlZEF0dHJpYnV0ZXMuYXBwZW5kKG5leHQpOwogCi0gICAg
c2l6ZV90IHBvc2l0aW9uID0gbV9sYXlvdXRBdHRyaWJ1dGVzLmZpbmQodGV4dC5sYXlvdXRBdHRy
aWJ1dGVzKCkpOwotICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0gICAgbV9sYXlv
dXRBdHRyaWJ1dGVzLnJlbW92ZShwb3NpdGlvbik7CisgICAgYm9vbCByZW1vdmVkID0gbV9sYXlv
dXRBdHRyaWJ1dGVzLnJlbW92ZUZpcnN0KHRleHQubGF5b3V0QXR0cmlidXRlcygpKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6
OnN1YnRyZWVDaGlsZFdhc1JlbW92ZWQoY29uc3QgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzKiwgMj4mIGFmZmVjdGVkQXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggMDQ5MTkyODgxMjg0ZTc0ODc4ZDkzMThiZmRhN2Vk
MTVmY2E1MTRkMi4uMzZkZTM3N2IyNzAzOWJhOWMwMWRiOWE1MjdhOWUyMjkwYmFlMmRjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTM3OSwx
MCArMzc5LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlYnVpbGRBbGxFbGVtZW50
UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50JiByZWYKIHZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCkKIHsKICAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMucmVtb3ZlKHJl
ZmVyZW5jZWRFbGVtZW50KTsKLQotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fcmVidWlsZEVsZW1l
bnRzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3Vu
ZCkKLSAgICAgICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlKHBvc2l0aW9uKTsKKyAgICBtX3Jl
YnVpbGRFbGVtZW50cy5yZW1vdmVGaXJzdChyZWZlcmVuY2VkRWxlbWVudCk7CiB9CiAKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmNwcAppbmRleCA2YmNkMjVkNTM2NGQyYzJmYjA1NDY1ZTAyNWNmZTY4
YWRjODdkMDYxLi41MzI2OGFkYTM2ZWE1MzVmYTc4ZTdiY2U2NGNjZDIwMmZmZTkxZTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNw
cApAQCAtOTIsOSArOTIsOCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1bnNjaGVkdWxlKFNW
R1NNSUxFbGVtZW50KiBhbmltYXRpb24sIFNWR0VsZW1lbnQqIHRhcmdldAogICAgIEVsZW1lbnRB
dHRyaWJ1dGVQYWlyIGtleSh0YXJnZXQsIGF0dHJpYnV0ZU5hbWUpOwogICAgIEFuaW1hdGlvbnNW
ZWN0b3IqIHNjaGVkdWxlZCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5nZXQoa2V5KTsKICAgICBB
U1NFUlQoc2NoZWR1bGVkKTsKLSAgICBzaXplX3QgaWR4ID0gc2NoZWR1bGVkLT5maW5kKGFuaW1h
dGlvbik7Ci0gICAgQVNTRVJUKGlkeCAhPSBub3RGb3VuZCk7Ci0gICAgc2NoZWR1bGVkLT5yZW1v
dmUoaWR4KTsKKyAgICBib29sIHJlbW92ZWQgPSBzY2hlZHVsZWQtPnJlbW92ZUZpcnN0KGFuaW1h
dGlvbik7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAogdm9pZCBT
TUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJT
b3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJTb3VwQ3VzdG9tUHJvdG9jb2xS
ZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNGNiZjEyODdjM2M2MzEzNWE5OTEwMzFlY2Q4ZGNhYTBl
ZTYxN2Y1OC4uMWYyYWM4ZWJjZDMyNmYxNDlkMDkzZTFkZmQzOWQwNzJkODc3NWM5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3Nv
dXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBDdXN0
b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtOTYsOCArOTYsOCBAQCB2b2lkIFdlYlNv
dXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9t
UHJvdG9jb2woY29ucwogCiAgICAgcHJvY2Vzc1Bvb2woKS0+dW5yZWdpc3RlclNjaGVtZUZvckN1
c3RvbVByb3RvY29sKHNjaGVtZSk7CiAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2NoZW1lcy5j
b250YWlucyhzY2hlbWUpKTsKLSAgICBtX3JlZ2lzdGVyZWRTY2hlbWVzLnJlbW92ZShtX3JlZ2lz
dGVyZWRTY2hlbWVzLmZpbmQoc2NoZW1lKSk7CisgICAgYm9vbCByZW1vdmVkID0gbV9yZWdpc3Rl
cmVkU2NoZW1lcy5yZW1vdmVGaXJzdChzY2hlbWUpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3Zl
ZCwgcmVtb3ZlZCk7CiB9CiAKIHZvaWQgV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFn
ZXI6OnN0YXJ0TG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFn
ZUxvYWRTdGF0ZS5jcHAKaW5kZXggODZjZTllMDg2NDIwYjNjMTYzZWI2MDg4ZGYzMzMwNGE1NjY1
ZmZjZS4uY2EzMWE0Mzc4NzE2NTcxMWY3OTA1MGJlMjhlMzg0YmIyYjYzOTVjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcApAQCAtNzQsMTAgKzc0LDggQEAg
dm9pZCBQYWdlTG9hZFN0YXRlOjphZGRPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpCiAKIHZv
aWQgUGFnZUxvYWRTdGF0ZTo6cmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogewot
ICAgIEFTU0VSVChtX29ic2VydmVycy5jb250YWlucygmb2JzZXJ2ZXIpKTsKLQotICAgIHNpemVf
dCBpbmRleCA9IG1fb2JzZXJ2ZXJzLmZpbmQoJm9ic2VydmVyKTsKLSAgICBtX29ic2VydmVycy5y
ZW1vdmUoaW5kZXgpOworICAgIGJvb2wgcmVtb3ZlZCA9IG1fb2JzZXJ2ZXJzLnJlbW92ZUZpcnN0
KCZvYnNlcnZlcik7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKIH0KIAog
dm9pZCBQYWdlTG9hZFN0YXRlOjplbmRUcmFuc2FjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBiYTQ0MDJhZTU3ZjU5NjUxMmY4MTkwYjA4
ZTcyZjM5MzBiZGFmZDdiLi5jYWMxNTMzYmUyYTYyOGVlYTNhNDdkODczYmI1ZmMwMDBjZTlmMjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTIz
Nyw4ICsyMzcsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQog
CiBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKIHsKLSAgICBBU1NFUlQocHJvY2Vz
c1Bvb2xzKCkuZmluZCh0aGlzKSAhPSBub3RGb3VuZCk7Ci0gICAgcHJvY2Vzc1Bvb2xzKCkucmVt
b3ZlKHByb2Nlc3NQb29scygpLmZpbmQodGhpcykpOworICAgIGJvb2wgcmVtb3ZlZCA9IHByb2Nl
c3NQb29scygpLnJlbW92ZUZpcnN0KHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwg
cmVtb3ZlZCk7CiAKICAgICByZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyKHRoaXMpOwogCkBA
IC04MDUsNyArODA1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3Mo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvbnRl
eHRTdXBwbGVtZW50Kj4oc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKSkt
PnByb2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKIAotICAgICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUo
bV9wcm9jZXNzZXMuZmluZChwcm9jZXNzKSk7CisgICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZUZp
cnN0KHByb2Nlc3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MTksOCArODE5LDgg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5
KiBwcm9jZXNzKQogICAgIC8vIGlmIGl0IHdlcmUgaW52b2tlZCBmcm9tIFZlY3Rvcjo6cmVtb3Zl
KCkuIFJlZlB0ciBkZWxheXMgZGVzdHJ1Y3Rpb24gdW50aWwgaXQncyBzYWZlLgogICAgIFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+IHByb3RlY3QocHJvY2Vzcyk7CiAgICAgaWYgKG1fcHJvY2Vzc1dp
dGhQYWdlQ2FjaGUgPT0gcHJvY2VzcykKLSAgICAgICAgbV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9
IDA7Ci0gICAgbV9wcm9jZXNzZXMucmVtb3ZlKG1fcHJvY2Vzc2VzLmZpbmQocHJvY2VzcykpOwor
ICAgICAgICBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlID0gbnVsbHB0cjsKKyAgICBtX3Byb2Nlc3Nl
cy5yZW1vdmVGaXJzdChwcm9jZXNzKTsKIH0KIAogV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNz
UG9vbDo6Y3JlYXRlTmV3V2ViUHJvY2Vzc1Jlc3BlY3RpbmdQcm9jZXNzQ291bnRMaW1pdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9l
ZmwvZXdrX2V4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAKaW5kZXggYTFiYzg1NmIxZWJhMzJlN2M2
YzA2YWUzZjhlZDA5YjRiMzc1MTk3Ni4uN2M2YjY3NDlhNjhlODFjNDA1MWE5NGJhOTIyZWYwZTQz
MzAwMTlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcApAQCAtMzcsNyAr
MzcsNyBAQCB2b2lkIEV3a0V4dGVuc2lvbjo6YXBwZW5kKEV3a19FeHRlbnNpb25fQ2xpZW50KiBj
bGllbnQpCiAKIHZvaWQgRXdrRXh0ZW5zaW9uOjpyZW1vdmUoRXdrX0V4dGVuc2lvbl9DbGllbnQq
IGNsaWVudCkKIHsKLSAgICBtX2NsaWVudHMucmVtb3ZlKG1fY2xpZW50cy5maW5kKGNsaWVudCkp
OworICAgIG1fY2xpZW50cy5yZW1vdmVGaXJzdChjbGllbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X2V4dGVuc2lvbl9jbGllbnRfYWRkKEV3a19FeHRlbnNpb24qIGV4dGVuc2lvbiwgRXdrX0V4dGVu
c2lvbl9DbGllbnQqIGNsaWVudCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAyMjgyNjkwMmE2YWFhNDAzZjAwMmRkODcwYWVjNDJiN2ExZWNlOWZk
Li45NDdiNWIzMDkyMzI3OGJiMzExN2VmZTdiZTA4MDIwYjljODhlZTcyIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTUtMDItMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
cmVtb3ZlRmlyc3QodmFsdWUpIC8gcmVtb3ZlQWxsKHZhbHVlKSBtZXRob2RzIHRvIFdURjo6VmVj
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEx
OTIKKworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIEFk
ZCBBUEkgdGVzdHMgZm9yIFZlY3Rvcjo6cmVtb3ZlRmlyc3QodmFsdWUpIGFuZAorICAgICAgICBW
ZWN0b3I6OnJlbW92ZUFsbCh2YWx1ZSkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9WZWN0b3IuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUt
MDItMDMgIERoaSBBdXJyYWhtYW4gIDxkaW9yYWhtYW5Acm9ja3liYXJzLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLiBBZGQgbXlzZWxmIGFzIGEgY29tbWl0dGVyLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXggZDIwN2EwZmUwYTc0ZGY1MTAzNDY4ZDc0NDZj
ZWE2NmJiMTBlNmMwOS4uNjc1OTZhYzQ5Yjg3ZWRhOTgxOTg4NDJjMTQ3YzJlZDgyMDY3NTE5ZSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpbmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IApAQCAtMzIzLDQgKzMyNCwxNDMgQEAgVEVTVChXVEZfVmVjdG9yLCBWZWN0b3JPZlZlY3RvcnNP
ZlZlY3RvcnNJbmxpbmVDYXBhY2l0eVN3YXApCiAgICAgRVhQRUNUX0VRKDBVLCBiLnNpemUoKSk7
CiB9CiAKK1RFU1QoV1RGX1ZlY3RvciwgUmVtb3ZlRmlyc3QpCit7CisgICAgVmVjdG9yPGludD4g
djsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVt
b3ZlRmlyc3QoMSkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0KC0xKSk7CisgICAg
RVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdi5maWxsKDIsIDEwKTsKKyAgICBFWFBF
Q1RfRVEoMTBVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlRmlyc3QoMSkp
OworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICB2LmNsZWFyKCk7CisKKyAgICB2
LmZpbGwoMSwgMTApOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2LnJlbW92ZUZpcnN0KDEpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+
KHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfSkpOworICAgIEVYUEVDVF9FUSg5VSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0KDIpKTsKKyAgICBFWFBFQ1RfRVEo
OVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsxLCAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxfSkpOworCisgICAgdW5zaWduZWQgcmVtb3ZlZCA9IDA7CisgICAg
d2hpbGUgKHYucmVtb3ZlRmlyc3QoMSkpCisgICAgICAgICsrcmVtb3ZlZDsKKyAgICBFWFBFQ1Rf
RVEoOVUsIHJlbW92ZWQpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKworICAgIHYu
cmVzaXplKDEpOworICAgIEVYUEVDVF9FUSgxVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9UUlVF
KHYucmVtb3ZlRmlyc3QoMSkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5zaXplKCkpOworICAgIEVY
UEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBSZW1vdmVBbGwp
Cit7CisgICAgLy8gVXNpbmcgYSBtZW1jcHktYWJsZSB0eXBlLgorICAgIHN0YXRpY19hc3NlcnQo
VmVjdG9yVHJhaXRzPGludD46OmNhbk1vdmVXaXRoTWVtY3B5LCAiU2hvdWxkIHVzZSBhIG1lbWNw
eS1hYmxlIHR5cGUiKTsKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9UUlVFKHYuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVBbGwoMSkpOworICAgIEVYUEVDVF9G
QUxTRSh2LnJlbW92ZUFsbCgtMSkpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKwor
ICAgIHYuZmlsbCgxLCAxMCk7CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkpOworICAgIEVY
UEVDVF9FUSgxMFUsIHYucmVtb3ZlQWxsKDEpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHko
KSk7CisKKyAgICB2LmZpbGwoMiwgMTApOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMFUsIHYucmVtb3ZlQWxsKDEpKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2
LnNpemUoKSk7CisKKyAgICB2ID0gezEsIDIsIDEsIDIsIDEsIDIsIDIsIDEsIDEsIDF9OworICAg
IEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoNlUsIHYucmVtb3ZlQWxs
KDEpKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09
IFZlY3RvcjxpbnQ+KHsyLCAyLCAyLCAyfSkpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZCgxKSA9
PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX0VRKDRVLCB2LnJlbW92ZUFsbCgyKSk7CisgICAgRVhQ
RUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHszLCAxLCAyLCAxLCAyLCAxLCAyLCAy
LCAxLCAxLCAxLCAzfTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKDZVLCB2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQRUNUX0VRKDZVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5maW5kKDEpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2
ID09IFZlY3RvcjxpbnQ+KHszLCAyLCAyLCAyLCAyLCAzfSkpOworCisgICAgRVhQRUNUX0VRKDRV
LCB2LnJlbW92ZUFsbCgyKSk7CisgICAgRVhQRUNUX0VRKDJVLCB2LnNpemUoKSk7CisgICAgRVhQ
RUNUX1RSVUUodi5maW5kKDIpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZl
Y3RvcjxpbnQ+KHszLCAzfSkpOworCisgICAgRVhQRUNUX0VRKDJVLCB2LnJlbW92ZUFsbCgzKSk7
CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHsxLCAxLCAxLCAzLCAy
LCA0LCAyLCAyLCAyLCA0LCA0LCAzfTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDNVLCB2LnJlbW92ZUFsbCgxKSk7CisgICAgRVhQRUNUX0VRKDlVLCB2LnNp
emUoKSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kKDEpID09IG5vdEZvdW5kKTsKKyAgICBFWFBF
Q1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHszLCAyLCA0LCAyLCAyLCAyLCA0LCA0LCAzfSkpOwor
CisgICAgLy8gVXNpbmcgYSBub24gbWVtY3B5LWFibGUgdHlwZS4KKyAgICBzdGF0aWNfYXNzZXJ0
KCFWZWN0b3JUcmFpdHM8Q1N0cmluZz46OmNhbk1vdmVXaXRoTWVtY3B5LCAiU2hvdWxkIHVzZSBh
IG5vbiBtZW1jcHktYWJsZSB0eXBlIik7CisgICAgVmVjdG9yPENTdHJpbmc+IHZFeHBlY3RlZDsK
KyAgICBWZWN0b3I8Q1N0cmluZz4gdjI7CisgICAgRVhQRUNUX1RSVUUodjIuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UodjIucmVtb3ZlQWxsKCIxIikpOworICAgIEVYUEVDVF9UUlVFKHYy
LmlzRW1wdHkoKSk7CisKKyAgICB2Mi5maWxsKCIxIiwgMTApOworICAgIEVYUEVDVF9FUSgxMFUs
IHYyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDEwVSwgdjIucmVtb3ZlQWxsKCIxIikpOworICAg
IEVYUEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7CisKKyAgICB2Mi5maWxsKCIyIiwgMTApOworICAg
IEVYUEVDVF9FUSgxMFUsIHYyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDBVLCB2Mi5yZW1vdmVB
bGwoIjEiKSk7CisgICAgRVhQRUNUX0VRKDEwVSwgdjIuc2l6ZSgpKTsKKworICAgIHYyID0geyIx
IiwgIjIiLCAiMSIsICIyIiwgIjEiLCAiMiIsICIyIiwgIjEiLCAiMSIsICIxIn07CisgICAgRVhQ
RUNUX0VRKDEwVSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoNlUsIHYyLnJlbW92ZUFsbCgi
MSIpKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYyLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodjIu
ZmluZCgiMSIpID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYyLnJlbW92ZUFsbCgi
MiIpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pc0VtcHR5KCkpOworCisgICAgdjIgPSB7IjMiLCAi
MSIsICIyIiwgIjEiLCAiMiIsICIxIiwgIjIiLCAiMiIsICIxIiwgIjEiLCAiMSIsICIzIn07Cisg
ICAgRVhQRUNUX0VRKDEyVSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoNlUsIHYyLnJlbW92
ZUFsbCgiMSIpKTsKKyAgICBFWFBFQ1RfRVEoNlUsIHYyLnNpemUoKSk7CisgICAgRVhQRUNUX1RS
VUUodjIuZmluZCgiMSIpID09IG5vdEZvdW5kKTsKKyAgICB2RXhwZWN0ZWQgPSB7IjMiLCAiMiIs
ICIyIiwgIjIiLCAiMiIsICIzIn07CisgICAgRVhQRUNUX1RSVUUodjIgPT0gdkV4cGVjdGVkKTsK
KworICAgIEVYUEVDVF9FUSg0VSwgdjIucmVtb3ZlQWxsKCIyIikpOworICAgIEVYUEVDVF9FUSgy
VSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5maW5kKCIyIikgPT0gbm90Rm91bmQp
OworICAgIHZFeHBlY3RlZCA9IHsiMyIsICIzIn07CisgICAgRVhQRUNUX1RSVUUodjIgPT0gdkV4
cGVjdGVkKTsKKworICAgIEVYUEVDVF9FUSgyVSwgdjIucmVtb3ZlQWxsKCIzIikpOworICAgIEVY
UEVDVF9UUlVFKHYyLmlzRW1wdHkoKSk7CisKKyAgICB2MiA9IHsiMSIsICIxIiwgIjEiLCAiMyIs
ICIyIiwgIjQiLCAiMiIsICIyIiwgIjIiLCAiNCIsICI0IiwgIjMifTsKKyAgICBFWFBFQ1RfRVEo
MTJVLCB2Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgzVSwgdjIucmVtb3ZlQWxsKCIxIikpOwor
ICAgIEVYUEVDVF9FUSg5VSwgdjIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5maW5kKCIx
IikgPT0gbm90Rm91bmQpOworICAgIHZFeHBlY3RlZCA9IHsiMyIsICIyIiwgIjQiLCAiMiIsICIy
IiwgIjIiLCAiNCIsICI0IiwgIjMifTsKKyAgICBFWFBFQ1RfVFJVRSh2MiA9PSB2RXhwZWN0ZWQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>