<?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>177732</bug_id>
          
          <creation_ts>2017-10-01 20:11:10 -0700</creation_ts>
          <short_desc>There should be a version of copyToVector that returns a Vector, rather than using an out parameter</short_desc>
          <delta_ts>2017-10-08 20:43:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1355116</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-01 20:11:10 -0700</bug_when>
    <thetext>As Darin noted in 177728, it is quite lame that copyToVector (and its ilk) uses an out parameter and doesn&apos;t just return a Vector. I think we can leverage the WTF::map to make this rather simple. Perhaps add to Vector.h something like:

template&lt;typename T&gt;
static T mapIdentity(const T&amp; value)
{
    return WTFMove(value);
}

template&lt;typename C&gt;
inline auto copyToVector(const C&amp; collection) -&gt; decltype(map(collection, mapIdentity))
{
    return map(collection, mapIdentity);
}

It would also be nice to make things like copyToVector(hashmap.keys()) work, rather than having separate copyKeysToVector/copyValuesToVector functions. I think that could be done by adding a new SizedIteratorRange class that keys() and values() return (rather than the IteratorRange they currently return) so they can work with WTF::map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355138</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 23:36:36 -0700</bug_when>
    <thetext>Or Vector::from to match Array.from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355139</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 23:40:20 -0700</bug_when>
    <thetext>Yet another option is to make Vector constructor work with whatever iterable type with size() so that we can just do Vector&lt;&gt;(collection).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355252</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 09:32:38 -0700</bug_when>
    <thetext>Another option would be to make WTF::map default to the identity function for its mapping, so that we can write copyToVector as just WTF::map(collection). Thought that may be a bit strange to read at call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355279</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-10-02 10:19:47 -0700</bug_when>
    <thetext>The templated out parameter is convenient for when you want to copy to a vector that contains items of another type, which happens fairly commonly.

E.g. you have a HashSet&lt;Node*&gt; and want to copy to a Vector&lt;RefPtr&lt;Node&gt;&gt;.

Not sure how we can make this work:

HashSet&lt;Node*&gt; nodes;
Vector&lt;RefPtr&lt;Node&gt;&gt; nodesCopy = copyToVector(nodes);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355318</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-02 10:59:34 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; The templated out parameter is convenient for when you want to copy to a
&gt; vector that contains items of another type, which happens fairly commonly.
&gt; 
&gt; E.g. you have a HashSet&lt;Node*&gt; and want to copy to a Vector&lt;RefPtr&lt;Node&gt;&gt;.
&gt; 
&gt; Not sure how we can make this work:
&gt; 
&gt; HashSet&lt;Node*&gt; nodes;
&gt; Vector&lt;RefPtr&lt;Node&gt;&gt; nodesCopy = copyToVector(nodes);

Using your suggested function name, copyToVector, the syntax I would suggest would be:

    auto nodesCopy = copyToVector&lt;RefPtr&lt;Node&gt;&gt;(nodes);

Should not be too hard to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355326</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-10-02 11:01:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; The templated out parameter is convenient for when you want to copy to a
&gt; &gt; vector that contains items of another type, which happens fairly commonly.
&gt; &gt; 
&gt; &gt; E.g. you have a HashSet&lt;Node*&gt; and want to copy to a Vector&lt;RefPtr&lt;Node&gt;&gt;.
&gt; &gt; 
&gt; &gt; Not sure how we can make this work:
&gt; &gt; 
&gt; &gt; HashSet&lt;Node*&gt; nodes;
&gt; &gt; Vector&lt;RefPtr&lt;Node&gt;&gt; nodesCopy = copyToVector(nodes);
&gt; 
&gt; Using your suggested function name, copyToVector, the syntax I would suggest
&gt; would be:
&gt; 
&gt;     auto nodesCopy = copyToVector&lt;RefPtr&lt;Node&gt;&gt;(nodes);
&gt; 
&gt; Should not be too hard to implement.

Sure, if you add another template parameter then we can make it work. It is more verbose though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355409</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-02 12:44:47 -0700</bug_when>
    <thetext>Maybe we can build this with std::size?

http://en.cppreference.com/w/cpp/iterator/size
http://en.cppreference.com/w/cpp/iterator/begin
http://en.cppreference.com/w/cpp/iterator/end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355475</commentid>
    <comment_count>8</comment_count>
      <attachid>322431</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 13:56:14 -0700</bug_when>
    <thetext>Created attachment 322431
Patch to test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355479</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 13:59:01 -0700</bug_when>
    <thetext>Added a version that supports both

1) 
  HashSet&lt;int&gt; intSet { 1, 2, 3 };
  auto intVector = copyToVector(intSet);

2)
  HashSet&lt;int&gt; intSet { 1, 2, 3 };
  auto floatVector = copyToVector&lt;float&gt;(intSet);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355480</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-02 13:59:08 -0700</bug_when>
    <thetext>Attachment 322431 did not pass style-queue:


ERROR: Source/WTF/wtf/Vector.h:1613:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Vector.h:1618:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WTF/wtf/Vector.h:1620:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WTF/wtf/Vector.h:1625:  is_iterable_impl is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Vector.h:1645:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Vector.h:1646:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 6 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355683</commentid>
    <comment_count>11</comment_count>
      <attachid>322488</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 20:39:19 -0700</bug_when>
    <thetext>Created attachment 322488
Another version

Here is another version that doesn&apos;t require the gross is_iterable stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355684</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-02 20:40:27 -0700</bug_when>
    <thetext>Attachment 322488 did not pass style-queue:


ERROR: Source/WTF/wtf/Vector.h:1611:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Vector.h:1635:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/Vector.h:1636:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Vector.h:1637:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1642:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355702</commentid>
    <comment_count>13</comment_count>
      <attachid>322488</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-02 22:03:14 -0700</bug_when>
    <thetext>Comment on attachment 322488
Another version

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

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:782
&gt; +    auto vector = copyToVector(intSet);

Maybe we should call this makeVector since we&apos;re not really coping to some existing vector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357950</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-07 13:04:33 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; Created attachment 322488 [details]
&gt; Another version
&gt; 
&gt; Here is another version that doesn&apos;t require the gross is_iterable stuff.

Try as I may, I can&apos;t get the overloads to work in all compilers right now. So it may have to be:

template&lt;typename C&gt;
inline auto copyToVector(const C&amp; collection) -&gt; decltype(map(collection, mapIdentity))
{
    return map(collection, mapIdentity);

template&lt;typename ResultType, typename C&gt;
inline auto copyTo(const C&amp; collection) -&gt; ResultType
{
    return map(collection, mapIdentity);
}

or maybe

template&lt;typename ResultItem, typename C&gt;
inline auto copyToVectorOf(const C&amp; collection) -&gt; Vector&lt;ResultType&gt;
{
    return map(collection, mapIdentity);
}


which would give use the normal kind,

    auto nodesCopy = copyToVector(nodes);

and two options for the other one, either:

    auto nodesCopy = copyTo&lt;Vector&lt;RefPtr&lt;Node&gt;&gt;&gt;(nodes);

or:

    auto nodesCopy = copyToVectorOf&lt;RefPtr&lt;Node&gt;&gt;(nodes);


(In reply to Ryosuke Niwa from comment #13)
&gt; Comment on attachment 322488 [details]
&gt;
&gt; Maybe we should call this makeVector since we&apos;re not really coping to some
&gt; existing vector?

I like having the word copy in it since this is not going to attempt to move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358093</commentid>
    <comment_count>15</comment_count>
      <attachid>323134</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-08 11:03:24 -0700</bug_when>
    <thetext>Created attachment 323134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358094</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-08 11:05:50 -0700</bug_when>
    <thetext>Attachment 323134 did not pass style-queue:


ERROR: Source/WTF/wtf/Vector.h:1612:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Vector.h:1613:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1619:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358148</commentid>
    <comment_count>17</comment_count>
      <attachid>323134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-08 17:34:40 -0700</bug_when>
    <thetext>Comment on attachment 323134
Patch

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

r=me

&gt; Source/WTF/wtf/Vector.h:1614
&gt; +template&lt;typename Collection&gt;
&gt; +inline auto copyToVector(const Collection&amp; collection) -&gt; Vector&lt;typename MapFunctionInspector&lt;Collection&gt;::SourceItemType&gt;
&gt; +{
&gt; +    return WTF::map(collection, [](const auto&amp; v) { return v; });
&gt; +}

I think you could also write this as calling copyToVectorOf, maybe that&apos;s a bit cleaner?

&gt; Source/WTF/wtf/Vector.h:1619
&gt; +    return WTF::map(collection, [](const auto&amp; v) -&gt; DestinationItemType { return v; });

I never know what official WebKit style is, but I know in JSC we tend to put a space between &quot;]&quot; and &quot;(&quot; for lambdas.

&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:792
&gt; +TEST(WTF_Vector, CopyToVectorOf)

Is it worth adding a test where we do side effects in the copy constructor?

I think it&apos;s worth having a test where the input is a vector, and then we can ensure the resulting vector has the correct order, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358151</commentid>
    <comment_count>18</comment_count>
      <attachid>323134</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-08 17:41:12 -0700</bug_when>
    <thetext>Comment on attachment 323134
Patch

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

&gt;&gt; Source/WTF/wtf/Vector.h:1619
&gt;&gt; +    return WTF::map(collection, [](const auto&amp; v) -&gt; DestinationItemType { return v; });
&gt; 
&gt; I never know what official WebKit style is, but I know in JSC we tend to put a space between &quot;]&quot; and &quot;(&quot; for lambdas.

The only thing that makes WebKit style “official” is when we discuss it together. I am pretty sure we do put spaces after the &quot;]&quot; in lambdas. Someone can add it to the style guide document so we don’t forget or get confused.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:792
&gt;&gt; +TEST(WTF_Vector, CopyToVectorOf)
&gt; 
&gt; Is it worth adding a test where we do side effects in the copy constructor?
&gt; 
&gt; I think it&apos;s worth having a test where the input is a vector, and then we can ensure the resulting vector has the correct order, etc.

Could do that with ListHashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358162</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-08 18:55:18 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #17)
&gt; Comment on attachment 323134 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323134&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:1614
&gt; &gt; +template&lt;typename Collection&gt;
&gt; &gt; +inline auto copyToVector(const Collection&amp; collection) -&gt; Vector&lt;typename MapFunctionInspector&lt;Collection&gt;::SourceItemType&gt;
&gt; &gt; +{
&gt; &gt; +    return WTF::map(collection, [](const auto&amp; v) { return v; });
&gt; &gt; +}
&gt; 
&gt; I think you could also write this as calling copyToVectorOf, maybe that&apos;s a
&gt; bit cleaner?

I tried that, but it ends up being quite a bit longer and harder to read, due to repeating the MapFunctionInspector stuff to get the item type.

&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:1619
&gt; &gt; +    return WTF::map(collection, [](const auto&amp; v) -&gt; DestinationItemType { return v; });
&gt; 
&gt; I never know what official WebKit style is, but I know in JSC we tend to put
&gt; a space between &quot;]&quot; and &quot;(&quot; for lambdas.

Will update.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:792
&gt; &gt; +TEST(WTF_Vector, CopyToVectorOf)
&gt; 
&gt; Is it worth adding a test where we do side effects in the copy constructor?
&gt; 
&gt; I think it&apos;s worth having a test where the input is a vector, and then we
&gt; can ensure the resulting vector has the correct order, etc.

Sure. I like Darin&apos;s suggestion of ListHashSet since that is more realistic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358163</commentid>
    <comment_count>20</comment_count>
      <attachid>323150</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-08 19:24:07 -0700</bug_when>
    <thetext>Created attachment 323150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358164</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-08 19:25:30 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #20)
&gt; Created attachment 323150 [details]
&gt; Patch

I re-uploaded it for review, since I made some substantial changes to get ListHashSet to work (apparently it&apos;s iterator is a bit more const-y than HashSet). I ended up using Saam&apos;s suggestion of basing copyToVector on copyToVectorOf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358165</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-08 19:26:22 -0700</bug_when>
    <thetext>Attachment 323150 did not pass style-queue:


ERROR: Source/WTF/wtf/Vector.h:1613:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1623:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358169</commentid>
    <comment_count>23</comment_count>
      <attachid>323150</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-08 19:47:14 -0700</bug_when>
    <thetext>Comment on attachment 323150
Patch

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

Are you going to make this work for map keys and values?

&gt; Source/WTF/wtf/Vector.h:1633
&gt;  using WTF::removeRepeatedElements;
&gt; +using WTF::copyToVector;
&gt; +using WTF::copyToVectorOf;

We usually sort these alphabetically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358176</commentid>
    <comment_count>24</comment_count>
      <attachid>323150</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-08 20:08:17 -0700</bug_when>
    <thetext>Comment on attachment 323150
Patch

Clearing flags on attachment: 323150

Committed r223039: &lt;http://trac.webkit.org/changeset/223039&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358177</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-08 20:08:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358178</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-08 20:08:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/34878508&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358179</commentid>
    <comment_count>27</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-08 20:43:35 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #23)
&gt; Comment on attachment 323150 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323150&amp;action=review
&gt; 
&gt; Are you going to make this work for map keys and values?
&gt; 
&gt; &gt; Source/WTF/wtf/Vector.h:1633
&gt; &gt;  using WTF::removeRepeatedElements;
&gt; &gt; +using WTF::copyToVector;
&gt; &gt; +using WTF::copyToVectorOf;
&gt; 
&gt; We usually sort these alphabetically.

Addressed in r223040.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322431</attachid>
            <date>2017-10-02 13:56:14 -0700</date>
            <delta_ts>2017-10-08 11:03:22 -0700</delta_ts>
            <desc>Patch to test</desc>
            <filename>wtfChange.diff</filename>
            <type>text/plain</type>
            <size>4888</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgc2l6ZV90IHJlbW92ZVJlcGVh
dGVkRWxlbWVudHMoVmVjdG9yPFQsIAogICAgIHJldHVybiByZW1vdmVSZXBlYXRlZEVsZW1lbnRz
KHZlY3RvciwgW10gKFQmIGEsIFQmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE1hcEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgordGVtcGxhdGU8
dHlwZW5hbWUgU291cmNlVHlwZT4KIHN0cnVjdCBNYXBGdW5jdGlvbkluc3BlY3RvciB7CiAgICAg
dXNpbmcgUmVhbFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8U291
cmNlVHlwZT46OnR5cGU7CiAgICAgdXNpbmcgSXRlcmF0b3JUeXBlID0gZGVjbHR5cGUoc3RkOjpi
ZWdpbihzdGQ6OmRlY2x2YWw8UmVhbFNvdXJjZVR5cGU+KCkpKTsKQEAgLTE1NzEsNyArMTU3MSw3
IEBAIHN0cnVjdCBNYXBGdW5jdGlvbkluc3BlY3RvciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgog
c3RydWN0IE1hcHBlciB7Ci0gICAgdXNpbmcgU291cmNlSXRlbVR5cGUgPSB0eXBlbmFtZSBNYXBG
dW5jdGlvbkluc3BlY3RvcjxNYXBGdW5jdGlvbiwgU291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBl
OworICAgIHVzaW5nIFNvdXJjZUl0ZW1UeXBlID0gdHlwZW5hbWUgTWFwRnVuY3Rpb25JbnNwZWN0
b3I8U291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBlOwogICAgIHVzaW5nIERlc3RpbmF0aW9uSXRl
bVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBGdW5jdGlvbihTb3VyY2VJdGVtVHlw
ZSYpPjo6dHlwZTsKIAogICAgIHN0YXRpYyBWZWN0b3I8RGVzdGluYXRpb25JdGVtVHlwZT4gbWFw
KFNvdXJjZVR5cGUgc291cmNlLCBjb25zdCBNYXBGdW5jdGlvbiYgbWFwRnVuY3Rpb24pCkBAIC0x
NTg3LDcgKzE1ODcsNyBAQCBzdHJ1Y3QgTWFwcGVyIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFw
RnVuY3Rpb24sIHR5cGVuYW1lIFNvdXJjZVR5cGU+CiBzdHJ1Y3QgTWFwcGVyPE1hcEZ1bmN0aW9u
LCBTb3VyY2VUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3J2YWx1ZV9yZWZl
cmVuY2U8U291cmNlVHlwZSYmPjo6dmFsdWU+Ojp0eXBlPiB7Ci0gICAgdXNpbmcgU291cmNlSXRl
bVR5cGUgPSB0eXBlbmFtZSBNYXBGdW5jdGlvbkluc3BlY3RvcjxNYXBGdW5jdGlvbiwgU291cmNl
VHlwZT46OlNvdXJjZUl0ZW1UeXBlOworICAgIHVzaW5nIFNvdXJjZUl0ZW1UeXBlID0gdHlwZW5h
bWUgTWFwRnVuY3Rpb25JbnNwZWN0b3I8U291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBlOwogICAg
IHVzaW5nIERlc3RpbmF0aW9uSXRlbVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBG
dW5jdGlvbihTb3VyY2VJdGVtVHlwZSYmKT46OnR5cGU7CiAKICAgICBzdGF0aWMgVmVjdG9yPERl
c3RpbmF0aW9uSXRlbVR5cGU+IG1hcChTb3VyY2VUeXBlJiYgc291cmNlLCBjb25zdCBNYXBGdW5j
dGlvbiYgbWFwRnVuY3Rpb24pCkBAIC0xNjA3LDEwICsxNjA3LDYwIEBAIFZlY3Rvcjx0eXBlbmFt
ZSBNYXBwZXI8TWFwRnVuY3Rpb24sIFNvdXIKICAgICByZXR1cm4gTWFwcGVyPE1hcEZ1bmN0aW9u
LCBTb3VyY2VUeXBlPjo6bWFwKHN0ZDo6Zm9yd2FyZDxTb3VyY2VUeXBlPihzb3VyY2UpLCBzdGQ6
OmZvcndhcmQ8TWFwRnVuY3Rpb24+KG1hcEZ1bmN0aW9uKSk7CiB9CiAKKworbmFtZXNwYWNlIGRl
dGFpbCB7CisgICAgLy8gVG8gYWxsb3cgQURMIHdpdGggY3VzdG9tIGJlZ2luL2VuZAorICAgIHVz
aW5nIHN0ZDo6YmVnaW47CisgICAgdXNpbmcgc3RkOjplbmQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBhdXRvIGlzX2l0ZXJhYmxlX2ltcGwoaW50KSAtPiBkZWNsdHlwZSgKKyAg
ICAgICAgYmVnaW4oc3RkOjpkZWNsdmFsPFQmPigpKSAhPSBlbmQoc3RkOjpkZWNsdmFsPFQmPigp
KSwgICAvLyBiZWdpbi9lbmQgYW5kIG9wZXJhdG9yICE9CisgICAgICAgICsrc3RkOjpkZWNsdmFs
PGRlY2x0eXBlKGJlZ2luKHN0ZDo6ZGVjbHZhbDxUJj4oKSkpJj4oKSwgLy8gb3BlcmF0b3IgKysK
KyAgICAgICAgdm9pZCgqYmVnaW4oc3RkOjpkZWNsdmFsPFQmPigpKSksICAgICAgICAgICAgICAg
ICAgICAgICAvLyBvcGVyYXRvcioKKyAgICAgICAgc3RkOjp0cnVlX3R5cGUgeyB9CisgICAgKTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0ZDo6ZmFsc2VfdHlwZSBpc19pdGVy
YWJsZV9pbXBsKC4uLik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgaXNfaXRl
cmFibGUgPSBkZWNsdHlwZShkZXRhaWw6OmlzX2l0ZXJhYmxlX2ltcGw8VD4oMCkpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uLCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29weVRvVmVj
dG9yUmV0dXJuVmFsdWU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+CitzdHJ1Y3Qg
Q29weVRvVmVjdG9yUmV0dXJuVmFsdWU8Q29sbGVjdGlvbiwgdHJ1ZT4geworICAgIHVzaW5nIHR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgTWFwRnVuY3Rpb25JbnNwZWN0b3I8Q29sbGVjdGlvbj46OlNv
dXJjZUl0ZW1UeXBlPjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+CitzdHJ1
Y3QgQ29weVRvVmVjdG9yUmV0dXJuVmFsdWU8Q29sbGVjdGlvbiwgZmFsc2U+IHsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+CitpbmxpbmUgYXV0byBjb3B5VG9WZWN0b3IoY29u
c3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikgLT4gdHlwZW5hbWUgQ29weVRvVmVjdG9yUmV0dXJu
VmFsdWU8Q29sbGVjdGlvbiwgaXNfaXRlcmFibGU8Q29sbGVjdGlvbj46OnZhbHVlPjo6dHlwZQor
eworICAgIHJldHVybiBXVEY6Om1hcChjb2xsZWN0aW9uLCBbXShjb25zdCBhdXRvJiB2KSB7IHJl
dHVybiB2OyB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sbGVjdGlv
bj4KK2lubGluZSBhdXRvIGNvcHlUb1ZlY3Rvcihjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9u
KSAtPiBWZWN0b3I8VD4KK3sKKyAgICBWZWN0b3I8VD4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGNvbGxlY3Rpb24uc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBjb2xsZWN0aW9uKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGl0ZW0pOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
OlZlY3RvcjsKIHVzaW5nIFdURjo6VW5zYWZlVmVjdG9yT3ZlcmZsb3c7CiB1c2luZyBXVEY6OnJl
bW92ZVJlcGVhdGVkRWxlbWVudHM7Cit1c2luZyBXVEY6OmNvcHlUb1ZlY3RvcjsKIAogI2VuZGlm
IC8vIFdURl9WZWN0b3JfaApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0
b3IuY3BwCShyZXZpc2lvbiAyMjI3MTApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9WZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJNb3ZlT25seS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzcyLDcgKzc3
MywzMiBAQCBURVNUKFdURl9WZWN0b3IsIE1hcEZyb21IYXNoTWFwKQogICAgIEVYUEVDVF9UUlVF
KG1hcC5nZXQoImsxIikuaXNOdWxsKCkpOwogICAgIEVYUEVDVF9UUlVFKG1hcC5nZXQoImsyIiku
aXNOdWxsKCkpOwogICAgIEVYUEVDVF9UUlVFKG1hcC5nZXQoImszIikuaXNOdWxsKCkpOworfQor
CitURVNUKFdURl9WZWN0b3IsIENvcHlUb1ZlY3RvcikKK3sKKyAgICBIYXNoU2V0PGludD4gaW50
U2V0IHsgMSwgMiwgMyB9OworCisgICAgYXV0byB2ZWN0b3IgPSBjb3B5VG9WZWN0b3IoaW50U2V0
KTsKKyAgICBFWFBFQ1RfRVEoM1UsIHZlY3Rvci5zaXplKCkpOworCisgICAgc3RkOjpzb3J0KHZl
Y3Rvci5iZWdpbigpLCB2ZWN0b3IuZW5kKCkpOworICAgIEVYUEVDVF9FUSgxLCB2ZWN0b3JbMF0p
OworICAgIEVYUEVDVF9FUSgyLCB2ZWN0b3JbMV0pOworICAgIEVYUEVDVF9FUSgzLCB2ZWN0b3Jb
Ml0pOworfQorCitURVNUKFdURl9WZWN0b3IsIENvcHlUb1ZlY3RvcldpdGhEaWZmZXJlbnRUeXBl
KQoreworICAgIEhhc2hTZXQ8aW50PiBpbnRTZXQgeyAxLCAyLCAzIH07CisKKyAgICBWZWN0b3I8
ZmxvYXQ+IHZlY3RvciA9IGNvcHlUb1ZlY3RvcjxmbG9hdD4oaW50U2V0KTsKKyAgICBFWFBFQ1Rf
RVEoM1UsIHZlY3Rvci5zaXplKCkpOwogCisgICAgc3RkOjpzb3J0KHZlY3Rvci5iZWdpbigpLCB2
ZWN0b3IuZW5kKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCB2ZWN0b3JbMF0pOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCB2ZWN0b3JbMV0pOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCB2ZWN0
b3JbMl0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322488</attachid>
            <date>2017-10-02 20:39:19 -0700</date>
            <delta_ts>2017-10-08 11:03:23 -0700</delta_ts>
            <desc>Another version</desc>
            <filename>copyToVector.diff</filename>
            <type>text/plain</type>
            <size>4698</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgc2l6ZV90IHJlbW92ZVJlcGVh
dGVkRWxlbWVudHMoVmVjdG9yPFQsIAogICAgIHJldHVybiByZW1vdmVSZXBlYXRlZEVsZW1lbnRz
KHZlY3RvciwgW10gKFQmIGEsIFQmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE1hcEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgordGVtcGxhdGU8
dHlwZW5hbWUgU291cmNlVHlwZT4KIHN0cnVjdCBNYXBGdW5jdGlvbkluc3BlY3RvciB7CiAgICAg
dXNpbmcgUmVhbFNvdXJjZVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8U291
cmNlVHlwZT46OnR5cGU7CiAgICAgdXNpbmcgSXRlcmF0b3JUeXBlID0gZGVjbHR5cGUoc3RkOjpi
ZWdpbihzdGQ6OmRlY2x2YWw8UmVhbFNvdXJjZVR5cGU+KCkpKTsKQEAgLTE1NzEsNyArMTU3MSw3
IEBAIHN0cnVjdCBNYXBGdW5jdGlvbkluc3BlY3RvciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgog
c3RydWN0IE1hcHBlciB7Ci0gICAgdXNpbmcgU291cmNlSXRlbVR5cGUgPSB0eXBlbmFtZSBNYXBG
dW5jdGlvbkluc3BlY3RvcjxNYXBGdW5jdGlvbiwgU291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBl
OworICAgIHVzaW5nIFNvdXJjZUl0ZW1UeXBlID0gdHlwZW5hbWUgTWFwRnVuY3Rpb25JbnNwZWN0
b3I8U291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBlOwogICAgIHVzaW5nIERlc3RpbmF0aW9uSXRl
bVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBGdW5jdGlvbihTb3VyY2VJdGVtVHlw
ZSYpPjo6dHlwZTsKIAogICAgIHN0YXRpYyBWZWN0b3I8RGVzdGluYXRpb25JdGVtVHlwZT4gbWFw
KFNvdXJjZVR5cGUgc291cmNlLCBjb25zdCBNYXBGdW5jdGlvbiYgbWFwRnVuY3Rpb24pCkBAIC0x
NTg3LDcgKzE1ODcsNyBAQCBzdHJ1Y3QgTWFwcGVyIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFw
RnVuY3Rpb24sIHR5cGVuYW1lIFNvdXJjZVR5cGU+CiBzdHJ1Y3QgTWFwcGVyPE1hcEZ1bmN0aW9u
LCBTb3VyY2VUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3J2YWx1ZV9yZWZl
cmVuY2U8U291cmNlVHlwZSYmPjo6dmFsdWU+Ojp0eXBlPiB7Ci0gICAgdXNpbmcgU291cmNlSXRl
bVR5cGUgPSB0eXBlbmFtZSBNYXBGdW5jdGlvbkluc3BlY3RvcjxNYXBGdW5jdGlvbiwgU291cmNl
VHlwZT46OlNvdXJjZUl0ZW1UeXBlOworICAgIHVzaW5nIFNvdXJjZUl0ZW1UeXBlID0gdHlwZW5h
bWUgTWFwRnVuY3Rpb25JbnNwZWN0b3I8U291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBlOwogICAg
IHVzaW5nIERlc3RpbmF0aW9uSXRlbVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBG
dW5jdGlvbihTb3VyY2VJdGVtVHlwZSYmKT46OnR5cGU7CiAKICAgICBzdGF0aWMgVmVjdG9yPERl
c3RpbmF0aW9uSXRlbVR5cGU+IG1hcChTb3VyY2VUeXBlJiYgc291cmNlLCBjb25zdCBNYXBGdW5j
dGlvbiYgbWFwRnVuY3Rpb24pCkBAIC0xNjA3LDEwICsxNjA3LDQ3IEBAIFZlY3Rvcjx0eXBlbmFt
ZSBNYXBwZXI8TWFwRnVuY3Rpb24sIFNvdXIKICAgICByZXR1cm4gTWFwcGVyPE1hcEZ1bmN0aW9u
LCBTb3VyY2VUeXBlPjo6bWFwKHN0ZDo6Zm9yd2FyZDxTb3VyY2VUeXBlPihzb3VyY2UpLCBzdGQ6
OmZvcndhcmQ8TWFwRnVuY3Rpb24+KG1hcEZ1bmN0aW9uKSk7CiB9CiAKK25hbWVzcGFjZSBEZXRh
aWxzIHsKKyAgICB0ZW1wbGF0ZTxib29sIGVuYWJsZWQsIHR5cGVuYW1lIENvbGxlY3Rpb24+Cisg
ICAgc3RydWN0IENvcHlUb1ZlY3RvclJldHVyblZhbHVlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvbj4KKyAgICBzdHJ1Y3QgQ29weVRvVmVjdG9yUmV0dXJuVmFsdWU8dHJ1ZSwg
Q29sbGVjdGlvbj4geworICAgICAgICB1c2luZyB0eXBlID0gVmVjdG9yPHR5cGVuYW1lIE1hcEZ1
bmN0aW9uSW5zcGVjdG9yPENvbGxlY3Rpb24+OjpTb3VyY2VJdGVtVHlwZT47CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+CisgICAgc3RydWN0IENvcHlUb1ZlY3Rv
clJldHVyblZhbHVlPGZhbHNlLCBDb2xsZWN0aW9uPiB7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE92ZXJyaWRlUGFyYW1ldGVyLCB0eXBlbmFtZSBDb2xsZWN0aW9uPgorICAgIGlu
bGluZSBhdXRvIGNvcHlUb1ZlY3RvcldpdGhPdmVycmlkZShjb25zdCBDb2xsZWN0aW9uJiBjb2xs
ZWN0aW9uKSAtPiBWZWN0b3I8T3ZlcnJpZGVQYXJhbWV0ZXI+CisgICAgeworICAgICAgICBWZWN0
b3I8T3ZlcnJpZGVQYXJhbWV0ZXI+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoY29sbGVjdGlvbi5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBjb2xsZWN0aW9uKQorICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpdGVtKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIC4uLkFyZ3M+CitpbmxpbmUgYXV0byBjb3B5VG9WZWN0b3IoY29uc3QgVCYgY29s
bGVjdGlvbikgLT4gc3RkOjplbmFibGVfaWZfdDwwID09IHNpemVvZi4uLihBcmdzKSwgdHlwZW5h
bWUgRGV0YWlsczo6Q29weVRvVmVjdG9yUmV0dXJuVmFsdWU8MCA9PSBzaXplb2YuLi4oQXJncyks
IFQ+Ojp0eXBlPgoreworICAgIHJldHVybiBXVEY6Om1hcChjb2xsZWN0aW9uLCBbXSAoY29uc3Qg
YXV0byYgdikgeyByZXR1cm4gdjsgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92ZXJyaWRl
UGFyYW1ldGVyLCB0eXBlbmFtZSAuLi5BcmdzPgoraW5saW5lIGF1dG8gY29weVRvVmVjdG9yKEFy
Z3MgLi4uY29sbGVjdGlvbikgLT4gc3RkOjplbmFibGVfaWZfdDwxID09IHNpemVvZi4uLihBcmdz
KSwgVmVjdG9yPE92ZXJyaWRlUGFyYW1ldGVyPj4KK3sKKyAgICByZXR1cm4gRGV0YWlsczo6Y29w
eVRvVmVjdG9yV2l0aE92ZXJyaWRlPE92ZXJyaWRlUGFyYW1ldGVyPihjb2xsZWN0aW9uLi4uKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VmVjdG9yOwogdXNpbmcgV1RG
OjpVbnNhZmVWZWN0b3JPdmVyZmxvdzsKIHVzaW5nIFdURjo6cmVtb3ZlUmVwZWF0ZWRFbGVtZW50
czsKK3VzaW5nIFdURjo6Y29weVRvVmVjdG9yOwogCiAjZW5kaWYgLy8gV1RGX1ZlY3Rvcl9oCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAJKHJldmlzaW9uIDIy
MjcxMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1vdmVPbmx5LmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03NzIsNyArNzczLDMyIEBAIFRFU1QoV1RGX1Zl
Y3RvciwgTWFwRnJvbUhhc2hNYXApCiAgICAgRVhQRUNUX1RSVUUobWFwLmdldCgiazEiKS5pc051
bGwoKSk7CiAgICAgRVhQRUNUX1RSVUUobWFwLmdldCgiazIiKS5pc051bGwoKSk7CiAgICAgRVhQ
RUNUX1RSVUUobWFwLmdldCgiazMiKS5pc051bGwoKSk7Cit9CisKK1RFU1QoV1RGX1ZlY3Rvciwg
Q29weVRvVmVjdG9yKQoreworICAgIEhhc2hTZXQ8aW50PiBpbnRTZXQgeyAxLCAyLCAzIH07CisK
KyAgICBhdXRvIHZlY3RvciA9IGNvcHlUb1ZlY3RvcihpbnRTZXQpOworICAgIEVYUEVDVF9FUSgz
VSwgdmVjdG9yLnNpemUoKSk7CisKKyAgICBzdGQ6OnNvcnQodmVjdG9yLmJlZ2luKCksIHZlY3Rv
ci5lbmQoKSk7CisgICAgRVhQRUNUX0VRKDEsIHZlY3RvclswXSk7CisgICAgRVhQRUNUX0VRKDIs
IHZlY3RvclsxXSk7CisgICAgRVhQRUNUX0VRKDMsIHZlY3RvclsyXSk7Cit9CisKK1RFU1QoV1RG
X1ZlY3RvciwgQ29weVRvVmVjdG9yV2l0aERpZmZlcmVudFR5cGUpCit7CisgICAgSGFzaFNldDxp
bnQ+IGludFNldCB7IDEsIDIsIDMgfTsKKworICAgIFZlY3RvcjxmbG9hdD4gdmVjdG9yID0gY29w
eVRvVmVjdG9yPGZsb2F0PihpbnRTZXQpOworICAgIEVYUEVDVF9FUSgzVSwgdmVjdG9yLnNpemUo
KSk7CiAKKyAgICBzdGQ6OnNvcnQodmVjdG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEsIHZlY3RvclswXSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIHZl
Y3RvclsxXSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIHZlY3RvclsyXSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323134</attachid>
            <date>2017-10-08 11:03:24 -0700</date>
            <delta_ts>2017-10-08 19:24:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177732-20171008110323.patch</filename>
            <type>text/plain</type>
            <size>5657</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjMwMTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgdmVyc2lvbiBvZiBjb3B5VG9W
ZWN0b3IgdGhhdCByZXR1cm5zIGEgVmVjdG9yLCByYXRoZXIgdGhhbiB1c2luZyBhbiBvdXQgcGFy
YW1ldGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdHdvIG5ldyBoZWxwZXIgZnVuY3Rpb25zLCBjb3B5VG9WZWN0b3IgYW5kIGNvcHlUb1ZlY3Rv
ck9mLCB3aGljaCB3aWxsIGJlIGFibGUgdG8KKyAgICAgICAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcg
b3V0IHBhcmFtZXRlciB0YWtpbmcgY29weVRvVmVjdG9yLiBMaWtlIGl0J3MgYW5jZXN0cmFsIG5h
bWVzYWtlLAorICAgICAgICBjb3B5VG9WZWN0b3IgdGFrZXMgYW4gb2JqZWN0IHRoYXQgaXMgYm90
aCBpdGVyYWJsZSAoc3VwcG9ydHMgYmVnaW4oKSBhbmQgZW5kKCkpIGFuZAorICAgICAgICBoYXMg
YSBzaXplLCBhbmQgcmV0dXJucyBhIFZlY3RvciB3aXRoIGEgY29weSBvZiBhbGwgdGhlIGl0ZW1z
IGl0ZXJhdGVkLiBUaGUgY29weVRvVmVjdG9yT2YKKyAgICAgICAgdmFyaWFudCBhbGxvdyB0aGUg
dXNlciB0byBzcGVjaWZ5IGEgdHlwZSB0byBjb252ZXJ0IHRvLCBzbyBpZiB5b3UgaGF2ZSBhIEhh
c2hTZXQ8aW50PgorICAgICAgICBidXQgd2FudCB0aG9zZSBhcyBmbG9hdHMgaW4gYSBWZWN0b3Is
IHlvdSBjYW4gZG86CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBmbG9hdFZlY3RvciA9IGNv
cHlUb1ZlY3Rvck9mPGZsb2F0PihpbnRTZXQpOworCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgor
ICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3IpOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3JP
Zik6CisKIDIwMTctMTAtMDYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjI3OTEgYW5kIHIyMjI4NzMu
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjIzMDE0KQorKysgU291cmNlL1dURi93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NjIsNyArMTU2Miw3IEBAIHNpemVfdCByZW1vdmVSZXBl
YXRlZEVsZW1lbnRzKFZlY3RvcjxULCAKICAgICByZXR1cm4gcmVtb3ZlUmVwZWF0ZWRFbGVtZW50
cyh2ZWN0b3IsIFtdIChUJiBhLCBUJiBiKSB7IHJldHVybiBhID09IGI7IH0pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgU291cmNlVHlwZT4KK3RlbXBsYXRl
PHR5cGVuYW1lIFNvdXJjZVR5cGU+CiBzdHJ1Y3QgTWFwRnVuY3Rpb25JbnNwZWN0b3IgewogICAg
IHVzaW5nIFJlYWxTb3VyY2VUeXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFNv
dXJjZVR5cGU+Ojp0eXBlOwogICAgIHVzaW5nIEl0ZXJhdG9yVHlwZSA9IGRlY2x0eXBlKHN0ZDo6
YmVnaW4oc3RkOjpkZWNsdmFsPFJlYWxTb3VyY2VUeXBlPigpKSk7CkBAIC0xNTcxLDcgKzE1NzEs
NyBAQCBzdHJ1Y3QgTWFwRnVuY3Rpb25JbnNwZWN0b3IgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBGdW5jdGlvbiwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K
IHN0cnVjdCBNYXBwZXIgewotICAgIHVzaW5nIFNvdXJjZUl0ZW1UeXBlID0gdHlwZW5hbWUgTWFw
RnVuY3Rpb25JbnNwZWN0b3I8TWFwRnVuY3Rpb24sIFNvdXJjZVR5cGU+OjpTb3VyY2VJdGVtVHlw
ZTsKKyAgICB1c2luZyBTb3VyY2VJdGVtVHlwZSA9IHR5cGVuYW1lIE1hcEZ1bmN0aW9uSW5zcGVj
dG9yPFNvdXJjZVR5cGU+OjpTb3VyY2VJdGVtVHlwZTsKICAgICB1c2luZyBEZXN0aW5hdGlvbkl0
ZW1UeXBlID0gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8TWFwRnVuY3Rpb24oU291cmNlSXRlbVR5
cGUmKT46OnR5cGU7CiAKICAgICBzdGF0aWMgVmVjdG9yPERlc3RpbmF0aW9uSXRlbVR5cGU+IG1h
cChTb3VyY2VUeXBlIHNvdXJjZSwgY29uc3QgTWFwRnVuY3Rpb24mIG1hcEZ1bmN0aW9uKQpAQCAt
MTU4Nyw3ICsxNTg3LDcgQEAgc3RydWN0IE1hcHBlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgogc3RydWN0IE1hcHBlcjxNYXBGdW5jdGlv
biwgU291cmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19ydmFsdWVfcmVm
ZXJlbmNlPFNvdXJjZVR5cGUmJj46OnZhbHVlPjo6dHlwZT4gewotICAgIHVzaW5nIFNvdXJjZUl0
ZW1UeXBlID0gdHlwZW5hbWUgTWFwRnVuY3Rpb25JbnNwZWN0b3I8TWFwRnVuY3Rpb24sIFNvdXJj
ZVR5cGU+OjpTb3VyY2VJdGVtVHlwZTsKKyAgICB1c2luZyBTb3VyY2VJdGVtVHlwZSA9IHR5cGVu
YW1lIE1hcEZ1bmN0aW9uSW5zcGVjdG9yPFNvdXJjZVR5cGU+OjpTb3VyY2VJdGVtVHlwZTsKICAg
ICB1c2luZyBEZXN0aW5hdGlvbkl0ZW1UeXBlID0gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8TWFw
RnVuY3Rpb24oU291cmNlSXRlbVR5cGUmJik+Ojp0eXBlOwogCiAgICAgc3RhdGljIFZlY3RvcjxE
ZXN0aW5hdGlvbkl0ZW1UeXBlPiBtYXAoU291cmNlVHlwZSYmIHNvdXJjZSwgY29uc3QgTWFwRnVu
Y3Rpb24mIG1hcEZ1bmN0aW9uKQpAQCAtMTYwNywxMCArMTYwNywyNCBAQCBWZWN0b3I8dHlwZW5h
bWUgTWFwcGVyPE1hcEZ1bmN0aW9uLCBTb3VyCiAgICAgcmV0dXJuIE1hcHBlcjxNYXBGdW5jdGlv
biwgU291cmNlVHlwZT46Om1hcChzdGQ6OmZvcndhcmQ8U291cmNlVHlwZT4oc291cmNlKSwgc3Rk
Ojpmb3J3YXJkPE1hcEZ1bmN0aW9uPihtYXBGdW5jdGlvbikpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uPgoraW5saW5lIGF1dG8gY29weVRvVmVjdG9yKGNvbnN0IENvbGxlY3Rp
b24mIGNvbGxlY3Rpb24pIC0+IFZlY3Rvcjx0eXBlbmFtZSBNYXBGdW5jdGlvbkluc3BlY3RvcjxD
b2xsZWN0aW9uPjo6U291cmNlSXRlbVR5cGU+Cit7CisgICAgcmV0dXJuIFdURjo6bWFwKGNvbGxl
Y3Rpb24sIFtdKGNvbnN0IGF1dG8mIHYpIHsgcmV0dXJuIHY7IH0pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBEZXN0aW5hdGlvbkl0ZW1UeXBlLCB0eXBlbmFtZSBDb2xsZWN0aW9uPgoraW5saW5l
IGF1dG8gY29weVRvVmVjdG9yT2YoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikgLT4gVmVj
dG9yPERlc3RpbmF0aW9uSXRlbVR5cGU+Cit7CisgICAgcmV0dXJuIFdURjo6bWFwKGNvbGxlY3Rp
b24sIFtdKGNvbnN0IGF1dG8mIHYpIC0+IERlc3RpbmF0aW9uSXRlbVR5cGUgeyByZXR1cm4gdjsg
fSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlZlY3RvcjsKIHVzaW5n
IFdURjo6VW5zYWZlVmVjdG9yT3ZlcmZsb3c7CiB1c2luZyBXVEY6OnJlbW92ZVJlcGVhdGVkRWxl
bWVudHM7Cit1c2luZyBXVEY6OmNvcHlUb1ZlY3RvcjsKK3VzaW5nIFdURjo6Y29weVRvVmVjdG9y
T2Y7CiAKICNlbmRpZiAvLyBXVEZfVmVjdG9yX2gKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzAzMikKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTEwLTA4ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgdmVy
c2lvbiBvZiBjb3B5VG9WZWN0b3IgdGhhdCByZXR1cm5zIGEgVmVjdG9yLCByYXRoZXIgdGhhbiB1
c2luZyBhbiBvdXQgcGFyYW1ldGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzc3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgQWRkIHRlc3RzIGZvciB0aGUgbmV3
IGNvcHlUb1ZlY3RvciBhbmQgY29weVRvVmVjdG9yT2YgZnVuY3Rpb25zLgorCiAyMDE3LTA5LTI5
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIGdpZ2Fj
YWdlIG9uIGlPUwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3Bw
CShyZXZpc2lvbiAyMjMwMTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJNb3Zl
T25seS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzc1LDQgKzc3NiwzMCBA
QCBURVNUKFdURl9WZWN0b3IsIE1hcEZyb21IYXNoTWFwKQogCiB9CiAKK1RFU1QoV1RGX1ZlY3Rv
ciwgQ29weVRvVmVjdG9yKQoreworICAgIEhhc2hTZXQ8aW50PiBpbnRTZXQgeyAxLCAyLCAzIH07
CisKKyAgICBhdXRvIHZlY3RvciA9IGNvcHlUb1ZlY3RvcihpbnRTZXQpOworICAgIEVYUEVDVF9F
USgzVSwgdmVjdG9yLnNpemUoKSk7CisKKyAgICBzdGQ6OnNvcnQodmVjdG9yLmJlZ2luKCksIHZl
Y3Rvci5lbmQoKSk7CisgICAgRVhQRUNUX0VRKDEsIHZlY3RvclswXSk7CisgICAgRVhQRUNUX0VR
KDIsIHZlY3RvclsxXSk7CisgICAgRVhQRUNUX0VRKDMsIHZlY3RvclsyXSk7Cit9CisKK1RFU1Qo
V1RGX1ZlY3RvciwgQ29weVRvVmVjdG9yT2YpCit7CisgICAgSGFzaFNldDxpbnQ+IGludFNldCB7
IDEsIDIsIDMgfTsKKworICAgIFZlY3RvcjxmbG9hdD4gdmVjdG9yID0gY29weVRvVmVjdG9yT2Y8
ZmxvYXQ+KGludFNldCk7CisgICAgRVhQRUNUX0VRKDNVLCB2ZWN0b3Iuc2l6ZSgpKTsKKworICAg
IHN0ZDo6c29ydCh2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMSwgdmVjdG9yWzBdKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgdmVjdG9yWzFdKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgdmVjdG9yWzJdKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323150</attachid>
            <date>2017-10-08 19:24:07 -0700</date>
            <delta_ts>2017-10-08 20:08:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177732-20171008192406.patch</filename>
            <type>text/plain</type>
            <size>6332</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjMwMTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIGEgdmVyc2lvbiBvZiBjb3B5VG9W
ZWN0b3IgdGhhdCByZXR1cm5zIGEgVmVjdG9yLCByYXRoZXIgdGhhbiB1c2luZyBhbiBvdXQgcGFy
YW1ldGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdHdvIG5ldyBoZWxwZXIgZnVuY3Rpb25zLCBjb3B5VG9WZWN0b3IgYW5kIGNvcHlUb1ZlY3Rv
ck9mLCB3aGljaCB3aWxsIGJlIGFibGUgdG8KKyAgICAgICAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcg
b3V0IHBhcmFtZXRlciB0YWtpbmcgY29weVRvVmVjdG9yLiBMaWtlIGl0J3MgYW5jZXN0cmFsIG5h
bWVzYWtlLAorICAgICAgICBjb3B5VG9WZWN0b3IgdGFrZXMgYW4gb2JqZWN0IHRoYXQgaXMgYm90
aCBpdGVyYWJsZSAoc3VwcG9ydHMgYmVnaW4oKSBhbmQgZW5kKCkpIGFuZAorICAgICAgICBoYXMg
YSBzaXplLCBhbmQgcmV0dXJucyBhIFZlY3RvciB3aXRoIGEgY29weSBvZiBhbGwgdGhlIGl0ZW1z
IGl0ZXJhdGVkLiBUaGUgY29weVRvVmVjdG9yT2YKKyAgICAgICAgdmFyaWFudCBhbGxvdyB0aGUg
dXNlciB0byBzcGVjaWZ5IGEgdHlwZSB0byBjb252ZXJ0IHRvLCBzbyBpZiB5b3UgaGF2ZSBhIEhh
c2hTZXQ8aW50PgorICAgICAgICBidXQgd2FudCB0aG9zZSBhcyBmbG9hdHMgaW4gYSBWZWN0b3Is
IHlvdSBjYW4gZG86CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBmbG9hdFZlY3RvciA9IGNv
cHlUb1ZlY3Rvck9mPGZsb2F0PihpbnRTZXQpOworCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgor
ICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3IpOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3JP
Zik6CisKIDIwMTctMTAtMDYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjI3OTEgYW5kIHIyMjI4NzMu
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjIzMDE0KQorKysgU291cmNlL1dURi93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NjIsOCArMTU2Miw4IEBAIHNpemVfdCByZW1vdmVSZXBl
YXRlZEVsZW1lbnRzKFZlY3RvcjxULCAKICAgICByZXR1cm4gcmVtb3ZlUmVwZWF0ZWRFbGVtZW50
cyh2ZWN0b3IsIFtdIChUJiBhLCBUJiBiKSB7IHJldHVybiBhID09IGI7IH0pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgU291cmNlVHlwZT4KLXN0cnVjdCBN
YXBGdW5jdGlvbkluc3BlY3RvciB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VUeXBlPgorc3Ry
dWN0IENvbGxlY3Rpb25JbnNwZWN0b3IgewogICAgIHVzaW5nIFJlYWxTb3VyY2VUeXBlID0gdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFNvdXJjZVR5cGU+Ojp0eXBlOwogICAgIHVzaW5n
IEl0ZXJhdG9yVHlwZSA9IGRlY2x0eXBlKHN0ZDo6YmVnaW4oc3RkOjpkZWNsdmFsPFJlYWxTb3Vy
Y2VUeXBlPigpKSk7CiAgICAgdXNpbmcgU291cmNlSXRlbVR5cGUgPSB0eXBlbmFtZSBzdGQ6Oml0
ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90eXBlOwpAQCAtMTU3MSw3ICsxNTcx
LDcgQEAgc3RydWN0IE1hcEZ1bmN0aW9uSW5zcGVjdG9yIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
TWFwRnVuY3Rpb24sIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+
CiBzdHJ1Y3QgTWFwcGVyIHsKLSAgICB1c2luZyBTb3VyY2VJdGVtVHlwZSA9IHR5cGVuYW1lIE1h
cEZ1bmN0aW9uSW5zcGVjdG9yPE1hcEZ1bmN0aW9uLCBTb3VyY2VUeXBlPjo6U291cmNlSXRlbVR5
cGU7CisgICAgdXNpbmcgU291cmNlSXRlbVR5cGUgPSB0eXBlbmFtZSBDb2xsZWN0aW9uSW5zcGVj
dG9yPFNvdXJjZVR5cGU+OjpTb3VyY2VJdGVtVHlwZTsKICAgICB1c2luZyBEZXN0aW5hdGlvbkl0
ZW1UeXBlID0gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8TWFwRnVuY3Rpb24oU291cmNlSXRlbVR5
cGUmKT46OnR5cGU7CiAKICAgICBzdGF0aWMgVmVjdG9yPERlc3RpbmF0aW9uSXRlbVR5cGU+IG1h
cChTb3VyY2VUeXBlIHNvdXJjZSwgY29uc3QgTWFwRnVuY3Rpb24mIG1hcEZ1bmN0aW9uKQpAQCAt
MTU4Nyw3ICsxNTg3LDcgQEAgc3RydWN0IE1hcHBlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cEZ1bmN0aW9uLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgogc3RydWN0IE1hcHBlcjxNYXBGdW5jdGlv
biwgU291cmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19ydmFsdWVfcmVm
ZXJlbmNlPFNvdXJjZVR5cGUmJj46OnZhbHVlPjo6dHlwZT4gewotICAgIHVzaW5nIFNvdXJjZUl0
ZW1UeXBlID0gdHlwZW5hbWUgTWFwRnVuY3Rpb25JbnNwZWN0b3I8TWFwRnVuY3Rpb24sIFNvdXJj
ZVR5cGU+OjpTb3VyY2VJdGVtVHlwZTsKKyAgICB1c2luZyBTb3VyY2VJdGVtVHlwZSA9IHR5cGVu
YW1lIENvbGxlY3Rpb25JbnNwZWN0b3I8U291cmNlVHlwZT46OlNvdXJjZUl0ZW1UeXBlOwogICAg
IHVzaW5nIERlc3RpbmF0aW9uSXRlbVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBG
dW5jdGlvbihTb3VyY2VJdGVtVHlwZSYmKT46OnR5cGU7CiAKICAgICBzdGF0aWMgVmVjdG9yPERl
c3RpbmF0aW9uSXRlbVR5cGU+IG1hcChTb3VyY2VUeXBlJiYgc291cmNlLCBjb25zdCBNYXBGdW5j
dGlvbiYgbWFwRnVuY3Rpb24pCkBAIC0xNjA3LDEwICsxNjA3LDI5IEBAIFZlY3Rvcjx0eXBlbmFt
ZSBNYXBwZXI8TWFwRnVuY3Rpb24sIFNvdXIKICAgICByZXR1cm4gTWFwcGVyPE1hcEZ1bmN0aW9u
LCBTb3VyY2VUeXBlPjo6bWFwKHN0ZDo6Zm9yd2FyZDxTb3VyY2VUeXBlPihzb3VyY2UpLCBzdGQ6
OmZvcndhcmQ8TWFwRnVuY3Rpb24+KG1hcEZ1bmN0aW9uKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIERlc3RpbmF0aW9uSXRlbVR5cGUsIHR5cGVuYW1lIENvbGxlY3Rpb24+CitpbmxpbmUgYXV0
byBjb3B5VG9WZWN0b3JPZihjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKSAtPiBWZWN0b3I8
RGVzdGluYXRpb25JdGVtVHlwZT4KK3sKKyAgICByZXR1cm4gV1RGOjptYXAoY29sbGVjdGlvbiwg
W10gKGNvbnN0IGF1dG8mIHYpIC0+IERlc3RpbmF0aW9uSXRlbVR5cGUgeyByZXR1cm4gdjsgfSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb24+CitzdHJ1Y3QgQ29weVRvVmVjdG9y
UmVzdWx0IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8dHlwZW5h
bWUgQ29sbGVjdGlvbkluc3BlY3RvcjxDb2xsZWN0aW9uPjo6U291cmNlSXRlbVR5cGU+Ojp0eXBl
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvbj4KK2lubGluZSBhdXRvIGNvcHlU
b1ZlY3Rvcihjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKSAtPiBWZWN0b3I8dHlwZW5hbWUg
Q29weVRvVmVjdG9yUmVzdWx0PENvbGxlY3Rpb24+OjpUeXBlPgoreworICAgIHJldHVybiBjb3B5
VG9WZWN0b3JPZjx0eXBlbmFtZSBDb3B5VG9WZWN0b3JSZXN1bHQ8Q29sbGVjdGlvbj46OlR5cGU+
KGNvbGxlY3Rpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpWZWN0
b3I7CiB1c2luZyBXVEY6OlVuc2FmZVZlY3Rvck92ZXJmbG93OwogdXNpbmcgV1RGOjpyZW1vdmVS
ZXBlYXRlZEVsZW1lbnRzOwordXNpbmcgV1RGOjpjb3B5VG9WZWN0b3I7Cit1c2luZyBXVEY6OmNv
cHlUb1ZlY3Rvck9mOwogCiAjZW5kaWYgLy8gV1RGX1ZlY3Rvcl9oCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjMwMzIpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0x
MC0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFRoZXJlIHNob3Vs
ZCBiZSBhIHZlcnNpb24gb2YgY29weVRvVmVjdG9yIHRoYXQgcmV0dXJucyBhIFZlY3RvciwgcmF0
aGVyIHRoYW4gdXNpbmcgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3Iu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkZCB0ZXN0cyBm
b3IgdGhlIG5ldyBjb3B5VG9WZWN0b3IgYW5kIGNvcHlUb1ZlY3Rvck9mIGZ1bmN0aW9ucy4KKwog
MjAxNy0wOS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVu
YWJsZSBnaWdhY2FnZSBvbiBpT1MKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VmVjdG9yLmNwcAkocmV2aXNpb24gMjIzMDE0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5j
bHVkZSAiTW92ZU9ubHkuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTc3NSw0ICs3NzcsNDUgQEAgVEVTVChXVEZfVmVjdG9y
LCBNYXBGcm9tSGFzaE1hcCkKIAogfQogCitURVNUKFdURl9WZWN0b3IsIENvcHlUb1ZlY3RvcikK
K3sKKyAgICBIYXNoU2V0PGludD4gaW50U2V0IHsgMSwgMiwgMyB9OworCisgICAgYXV0byB2ZWN0
b3IgPSBjb3B5VG9WZWN0b3IoaW50U2V0KTsKKyAgICBFWFBFQ1RfRVEoM1UsIHZlY3Rvci5zaXpl
KCkpOworCisgICAgc3RkOjpzb3J0KHZlY3Rvci5iZWdpbigpLCB2ZWN0b3IuZW5kKCkpOworICAg
IEVYUEVDVF9FUSgxLCB2ZWN0b3JbMF0pOworICAgIEVYUEVDVF9FUSgyLCB2ZWN0b3JbMV0pOwor
ICAgIEVYUEVDVF9FUSgzLCB2ZWN0b3JbMl0pOworfQorCitURVNUKFdURl9WZWN0b3IsIENvcHlU
b1ZlY3Rvck9yZGVyUHJlc2VydmluZykKK3sKKyAgICBMaXN0SGFzaFNldDxpbnQ+IG9yZGVyZWRJ
bnRTZXQ7CisgICAgb3JkZXJlZEludFNldC5hZGQoMSk7CisgICAgb3JkZXJlZEludFNldC5hZGQo
Mik7CisgICAgb3JkZXJlZEludFNldC5hZGQoMyk7CisKKyAgICBhdXRvIHZlY3RvciA9IGNvcHlU
b1ZlY3RvcihvcmRlcmVkSW50U2V0KTsKKyAgICBFWFBFQ1RfRVEoM1UsIHZlY3Rvci5zaXplKCkp
OworCisgICAgRVhQRUNUX0VRKDEsIHZlY3RvclswXSk7CisgICAgRVhQRUNUX0VRKDIsIHZlY3Rv
clsxXSk7CisgICAgRVhQRUNUX0VRKDMsIHZlY3RvclsyXSk7Cit9CisKK1RFU1QoV1RGX1ZlY3Rv
ciwgQ29weVRvVmVjdG9yT2YpCit7CisgICAgSGFzaFNldDxpbnQ+IGludFNldCB7IDEsIDIsIDMg
fTsKKworICAgIFZlY3RvcjxmbG9hdD4gdmVjdG9yID0gY29weVRvVmVjdG9yT2Y8ZmxvYXQ+KGlu
dFNldCk7CisgICAgRVhQRUNUX0VRKDNVLCB2ZWN0b3Iuc2l6ZSgpKTsKKworICAgIHN0ZDo6c29y
dCh2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwg
dmVjdG9yWzBdKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgdmVjdG9yWzFdKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMywgdmVjdG9yWzJdKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>