<?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>180318</bug_id>
          
          <creation_ts>2017-12-02 13:20:46 -0800</creation_ts>
          <short_desc>Add WTF::Hasher, an easier to use replacement for WTF::IntegerHasher</short_desc>
          <delta_ts>2017-12-07 10:11:02 -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>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>
          
          <blocked>180363</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>jfbastien</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1377356</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 13:20:46 -0800</bug_when>
    <thetext>Add WTF::Hasher, an easier to use replacement for WTF::IntegerHasher</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377357</commentid>
    <comment_count>1</comment_count>
      <attachid>328251</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 13:31:53 -0800</bug_when>
    <thetext>Created attachment 328251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377358</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 13:33:39 -0800</bug_when>
    <thetext>This is the class I was talking about. I decided to just post the new Hasher itself first, then I can upload patches for starting to use it in various places where we use IntegerHasher and StringHasher now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377362</commentid>
    <comment_count>3</comment_count>
      <attachid>328254</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 14:08:04 -0800</bug_when>
    <thetext>Created attachment 328254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377395</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-02 16:39:57 -0800</bug_when>
    <thetext>OK, everything green on EWS. Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377436</commentid>
    <comment_count>5</comment_count>
      <attachid>328254</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-02 21:17:04 -0800</bug_when>
    <thetext>Comment on attachment 328254
Patch

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

r=me with a few comments, and a design suggestion.

As we discussed in person I think it would be cool to rely on the tuple-like type API (with either member or non-member `get` functions), because once we move to C++17 all functions that implemented that API get structured binding for free (case #2 in [1]).

Looking at your code though I&apos;m not sure how much uglier it would then look, since what you have now is pretty elegant. It can be added later, but once too many classes don&apos;t do something it gets hard to migrate. Your call :-)

  [1]: http://en.cppreference.com/w/cpp/language/structured_binding

&gt; Source/WTF/wtf/Hasher.h:31
&gt; +    void add(unsigned integer)

It&apos;s a bit odd to mix unsigned here and for hash, with uint32_t below. I&apos;d go for uint32_t everywhere.

&gt; Source/WTF/wtf/Hasher.h:65
&gt; +    template&lt;typename UnsignedInteger&gt; friend void add(std::enable_if_t&lt;std::is_unsigned&lt;UnsignedInteger&gt;::value &amp;&amp; sizeof(UnsignedInteger) &lt;= sizeof(uint32_t), Hasher&amp;&gt; hasher, UnsignedInteger integer)

Just personal preference, but I prefer using enable_if for the return type instead of on parameters because I find it easier to read (that is, unless it can be a default template parameter which you can&apos;t do here because you&apos;re overloading `add`).

&gt; Source/WTF/wtf/Hasher.h:68
&gt; +        // We can consider adding a more efficient code path for hashing 16-bit values if needed, perhaps using addCharacter,

FIXME follow-up bugs for those?

&gt; Source/WTF/wtf/Hasher.h:90
&gt; +inline void add(Hasher&amp; hasher, double number)

One question about hashing floating-point values is what happens if you hash -0. / +0. (both compare equal) and NaN values (which never compare equal). Do you think we ever do this, and would it be a bug to do so? Maybe you want to normalize zeros to positive, or keep the distinction so they do hash differently? For NaNs is seems like you&apos;d want to canonicalize them to what JSC calls &quot;pure&quot; NaN?

&gt; Source/WTF/wtf/Hasher.h:92
&gt; +    add(hasher, reinterpret_cast&lt;uint64_t&amp;&gt;(number));

You want bitwise_cast here and below.

&gt; Source/WTF/wtf/Hasher.h:111
&gt; +    for (auto&amp; value : container)

const auto&amp; (I know it already is, I just like to say it explicitly).

&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:49
&gt; +}

?

&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:55
&gt; +    EXPECT_EQ(zero32BitHash, computeHash(static_cast&lt;char&gt;(0)));

Here and below, you should also test signed char and unsigned char since they&apos;re distinct from char.

&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:129
&gt; +    EXPECT_EQ(zero64BitHash, computeHash(0.0));

As discussed above, I&apos;d figure out what we want from -0. and if it&apos;s the same as +0. (won&apos;t be if you just bitwise_cast).

&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:141
&gt; +    EXPECT_EQ(2678086759U, computeHash(std::numeric_limits&lt;double&gt;::quiet_NaN()));

I&apos;d test other NaNs as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377478</commentid>
    <comment_count>6</comment_count>
      <attachid>328254</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 11:41:18 -0800</bug_when>
    <thetext>Comment on attachment 328254
Patch

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

Thanks for the review, and helpful comments.

&gt;&gt; Source/WTF/wtf/Hasher.h:31
&gt;&gt; +    void add(unsigned integer)
&gt; 
&gt; It&apos;s a bit odd to mix unsigned here and for hash, with uint32_t below. I&apos;d go for uint32_t everywhere.

This is IntegerHasher, unmodified, and something I intend to delete soon. I would also have gone with uint32_t if I was changing the class at all.

I can switch to uint32_t but I am not sure I should. Really doesn’t matter since I will delete this soon.

&gt;&gt; Source/WTF/wtf/Hasher.h:65
&gt;&gt; +    template&lt;typename UnsignedInteger&gt; friend void add(std::enable_if_t&lt;std::is_unsigned&lt;UnsignedInteger&gt;::value &amp;&amp; sizeof(UnsignedInteger) &lt;= sizeof(uint32_t), Hasher&amp;&gt; hasher, UnsignedInteger integer)
&gt; 
&gt; Just personal preference, but I prefer using enable_if for the return type instead of on parameters because I find it easier to read (that is, unless it can be a default template parameter which you can&apos;t do here because you&apos;re overloading `add`).

OK. I have never used enable_if at all before, so I have no preference.

&gt;&gt; Source/WTF/wtf/Hasher.h:68
&gt;&gt; +        // We can consider adding a more efficient code path for hashing 16-bit values if needed, perhaps using addCharacter,
&gt; 
&gt; FIXME follow-up bugs for those?

I don’t think of these as necessary projects, just possibilities, which is why I neither used FIXME in the comments nor filed bugs. Maybe you feel differently and think these are necessary?

&gt;&gt; Source/WTF/wtf/Hasher.h:90
&gt;&gt; +inline void add(Hasher&amp; hasher, double number)
&gt; 
&gt; One question about hashing floating-point values is what happens if you hash -0. / +0. (both compare equal) and NaN values (which never compare equal). Do you think we ever do this, and would it be a bug to do so? Maybe you want to normalize zeros to positive, or keep the distinction so they do hash differently? For NaNs is seems like you&apos;d want to canonicalize them to what JSC calls &quot;pure&quot; NaN?

I think the right thing to do is to treat negative zero and NaNs the same way that WTF::FloatHash does, which is to define equality based on bitwise_cast, too. Then negative zero can be a distinct hash key, and different NaN values can be different as well. I agree that the feature of canonicalizing to pure NaN for both hashing and equality comparison could be useful if we really wanted NaN to be good as a key, but I’d hate to pay extra overhead for that behavior, because I am pretty sure the doubles we are using as hash table keys aren’t ever NaN in practice.

What I realize now, though, is that we don’t want people pairing &quot;double == double&quot; with Hasher hashing. Which makes me think I might need to offer something like &quot;equalForHashing&quot; (better name would help) alongside &quot;computeHash&quot; so that programmers can easily get it right when they have a large set of things that they are hashing that include some floating point values. We want them to make use of the bitwise_cast comparison of floating point values rather than floating point equality, otherwise they will run into problems if they have any negative zeros; values that hash differently but are equal which breaks the invariant needed for data structures like HashTable.

&gt;&gt; Source/WTF/wtf/Hasher.h:92
&gt;&gt; +    add(hasher, reinterpret_cast&lt;uint64_t&amp;&gt;(number));
&gt; 
&gt; You want bitwise_cast here and below.

Yes, will fix that! Unfortunately that means I have to add an include of &lt;wtf/StdLibExtras.h&gt;.

That’s funny; I knew bitwise_cast was correct for this, but somehow thought that I had studied the hash functions in HashFunctions.h and exactly imitated them. But I was wrong, they use bitwise_cast as well they should.

&gt;&gt; Source/WTF/wtf/Hasher.h:111
&gt;&gt; +    for (auto&amp; value : container)
&gt; 
&gt; const auto&amp; (I know it already is, I just like to say it explicitly).

My attitude is opposite. I am sort of pretending I have the future version of C++ where I can just say for (value : container) and not have to write auto&amp;&amp;. For me auto&amp; is my attempt to say nothing about the type. And so &quot;const&quot; seems extraneous to me. But I will add &quot;const&quot; since you request it and I don’t feel strongly.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:49
&gt;&gt; +}
&gt; 
&gt; ?

Oops, I think that was supposed to have all the emptyHash cases in it, but they are in addMultiple now.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:55
&gt;&gt; +    EXPECT_EQ(zero32BitHash, computeHash(static_cast&lt;char&gt;(0)));
&gt; 
&gt; Here and below, you should also test signed char and unsigned char since they&apos;re distinct from char.

Sure, I was aware of that. But I do test them, just as int8_t and uint8_t. I could also test them under the names &quot;signed char&quot; and &quot;unsigned char&quot; if you think including both is clearer. But I don’t do that for &quot;signed short&quot; and &quot;unsigned short&quot; either. Or I could move to testing with the names &quot;char&quot; and &quot;short&quot; since for sizes 32  and above I am testing using built-in types, not typedefs.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:129
&gt;&gt; +    EXPECT_EQ(zero64BitHash, computeHash(0.0));
&gt; 
&gt; As discussed above, I&apos;d figure out what we want from -0. and if it&apos;s the same as +0. (won&apos;t be if you just bitwise_cast).

I think we want to stay consistent with WTF::FloatHash and we don’t want it to be the same as +0; I will add a test for it.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:141
&gt;&gt; +    EXPECT_EQ(2678086759U, computeHash(std::numeric_limits&lt;double&gt;::quiet_NaN()));
&gt; 
&gt; I&apos;d test other NaNs as well.

OK, I’ll test at least one other NaN. There are tons of them, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377480</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 11:49:44 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #5)
&gt; As we discussed in person I think it would be cool to rely on the tuple-like
&gt; type API (with either member or non-member `get` functions), because once we
&gt; move to C++17 all functions that implemented that API get structured binding
&gt; for free (case #2 in [1]).
&gt; 
&gt; Looking at your code though I&apos;m not sure how much uglier it would then look,
&gt; since what you have now is pretty elegant. It can be added later, but once
&gt; too many classes don&apos;t do something it gets hard to migrate. Your call :-)
&gt; 
&gt;   [1]: http://en.cppreference.com/w/cpp/language/structured_binding

The one thing I am not clear on about your suggestion is whether you are suggesting I use the tuple-like type API approach *instead* of the &quot;override add for your class&quot; design of if you are suggesting I make the tuple-like support part of the default add function template and still offer &quot;override add&quot; as a hook for more exotic hashing requirements.

Which one did you mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377484</commentid>
    <comment_count>8</comment_count>
      <attachid>328254</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 12:05:27 -0800</bug_when>
    <thetext>Comment on attachment 328254
Patch

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

&gt;&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:141
&gt;&gt;&gt; +    EXPECT_EQ(2678086759U, computeHash(std::numeric_limits&lt;double&gt;::quiet_NaN()));
&gt;&gt; 
&gt;&gt; I&apos;d test other NaNs as well.
&gt; 
&gt; OK, I’ll test at least one other NaN. There are tons of them, of course.

I’m not sure how to do this. How do I make another NaN? I could use signaling_NaN, but that is definitely not what I want to test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377491</commentid>
    <comment_count>9</comment_count>
      <attachid>328300</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 13:18:26 -0800</bug_when>
    <thetext>Created attachment 328300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377496</commentid>
    <comment_count>10</comment_count>
      <attachid>328302</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 13:50:19 -0800</bug_when>
    <thetext>Created attachment 328302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377525</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 14:48:44 -0800</bug_when>
    <thetext>Committed r225463: &lt;https://trac.webkit.org/changeset/225463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377528</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-03 14:50:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/35820506&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377733</commentid>
    <comment_count>13</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-04 10:03:30 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/WTF/wtf/Hasher.h:90
&gt; &gt;&gt; +inline void add(Hasher&amp; hasher, double number)
&gt; &gt; 
&gt; &gt; One question about hashing floating-point values is what happens if you hash -0. / +0. (both compare equal) and NaN values (which never compare equal). Do you think we ever do this, and would it be a bug to do so? Maybe you want to normalize zeros to positive, or keep the distinction so they do hash differently? For NaNs is seems like you&apos;d want to canonicalize them to what JSC calls &quot;pure&quot; NaN?
&gt; 
&gt; I think the right thing to do is to treat negative zero and NaNs the same
&gt; way that WTF::FloatHash does, which is to define equality based on
&gt; bitwise_cast, too. Then negative zero can be a distinct hash key, and
&gt; different NaN values can be different as well. I agree that the feature of
&gt; canonicalizing to pure NaN for both hashing and equality comparison could be
&gt; useful if we really wanted NaN to be good as a key, but I’d hate to pay
&gt; extra overhead for that behavior, because I am pretty sure the doubles we
&gt; are using as hash table keys aren’t ever NaN in practice.
&gt; 
&gt; What I realize now, though, is that we don’t want people pairing &quot;double ==
&gt; double&quot; with Hasher hashing. Which makes me think I might need to offer
&gt; something like &quot;equalForHashing&quot; (better name would help) alongside
&gt; &quot;computeHash&quot; so that programmers can easily get it right when they have a
&gt; large set of things that they are hashing that include some floating point
&gt; values. We want them to make use of the bitwise_cast comparison of floating
&gt; point values rather than floating point equality, otherwise they will run
&gt; into problems if they have any negative zeros; values that hash differently
&gt; but are equal which breaks the invariant needed for data structures like
&gt; HashTable.

I&apos;ve been thinking about this, and I think there are 3 things we could plausibly want:

  1. Deal with bits only, treating -0. != +0. and all NaNs with different payload as different (and same payload as the same).
  2. Deal with IEEE-754 semantics, treating -0. == +0., and all NaNs as different.
  3. Ban -0. and all NaNs from hashing.

I think these all make sense in different context, but choosing 1. and 2. requires knowing what situation we&apos;re in! It seems like 3. is the most conservative thing to do if we don&apos;t know how hashing is used.

Trying it out here:
  https://bugs.webkit.org/show_bug.cgi?id=180363


&gt; &gt;&gt; Source/WTF/wtf/Hasher.h:92
&gt; &gt;&gt; +    add(hasher, reinterpret_cast&lt;uint64_t&amp;&gt;(number));
&gt; &gt; 
&gt; &gt; You want bitwise_cast here and below.
&gt; 
&gt; Yes, will fix that! Unfortunately that means I have to add an include of
&gt; &lt;wtf/StdLibExtras.h&gt;.
&gt; 
&gt; That’s funny; I knew bitwise_cast was correct for this, but somehow thought
&gt; that I had studied the hash functions in HashFunctions.h and exactly
&gt; imitated them. But I was wrong, they use bitwise_cast as well they should.

I could split it into its own header? Looks like I managed to get it into C++20 as `bit_cast` so I could rename as I move it too. What&apos;s neat is the one I got in wg21.link/p0476 is also constexpr, which requires compiler support :-)

WDYT?


(In reply to Darin Adler from comment #7)
&gt; (In reply to JF Bastien from comment #5)
&gt; &gt; As we discussed in person I think it would be cool to rely on the tuple-like
&gt; &gt; type API (with either member or non-member `get` functions), because once we
&gt; &gt; move to C++17 all functions that implemented that API get structured binding
&gt; &gt; for free (case #2 in [1]).
&gt; &gt; 
&gt; &gt; Looking at your code though I&apos;m not sure how much uglier it would then look,
&gt; &gt; since what you have now is pretty elegant. It can be added later, but once
&gt; &gt; too many classes don&apos;t do something it gets hard to migrate. Your call :-)
&gt; &gt; 
&gt; &gt;   [1]: http://en.cppreference.com/w/cpp/language/structured_binding
&gt; 
&gt; The one thing I am not clear on about your suggestion is whether you are
&gt; suggesting I use the tuple-like type API approach *instead* of the &quot;override
&gt; add for your class&quot; design of if you are suggesting I make the tuple-like
&gt; support part of the default add function template and still offer &quot;override
&gt; add&quot; as a hook for more exotic hashing requirements.
&gt; 
&gt; Which one did you mean?

Initially I thought the former, but what you have seems way simpler that implementing `get`, so much so that the code cost of making something washable doesn&apos;t seem worth it. I&apos;m not sure I like my idea anymore!

(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 328254 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=328254&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Hasher.cpp:141
&gt; &gt;&gt;&gt; +    EXPECT_EQ(2678086759U, computeHash(std::numeric_limits&lt;double&gt;::quiet_NaN()));
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;d test other NaNs as well.
&gt; &gt; 
&gt; &gt; OK, I’ll test at least one other NaN. There are tons of them, of course.
&gt; 
&gt; I’m not sure how to do this. How do I make another NaN? I could use
&gt; signaling_NaN, but that is definitely not what I want to test.

Crafting NaNs in C++ isn&apos;t the best thing ever... bitwise_cast basically :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379136</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-07 10:11:02 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #13)
&gt; I&apos;ve been thinking about this, and I think there are 3 things we could
&gt; plausibly want:
&gt; 
&gt;   1. Deal with bits only, treating -0. != +0. and all NaNs with different
&gt; payload as different (and same payload as the same).
&gt;   2. Deal with IEEE-754 semantics, treating -0. == +0., and all NaNs as
&gt; different.
&gt;   3. Ban -0. and all NaNs from hashing.
&gt; 
&gt; I think these all make sense in different context, but choosing 1. and 2.
&gt; requires knowing what situation we&apos;re in! It seems like 3. is the most
&gt; conservative thing to do if we don&apos;t know how hashing is used.

We’ve always done (1) for all our floating point hashing; it has never caused a problem, nor do I think it ever will. I don’t think there is an urgent need to make a change. Just adding assertions won’t actually make (3) happen. We’d also have to do extensive testing to see if the assertions fire.

&gt; I could split it into its own header? Looks like I managed to get it into
&gt; C++20 as `bit_cast` so I could rename as I move it too. What&apos;s neat is the
&gt; one I got in wg21.link/p0476 is also constexpr, which requires compiler
&gt; support :-)

I don’t think it needs to go into a separate header.

I do think it would be good to move it to be more like the future standard one.

&gt; &gt; I’m not sure how to do this. How do I make another NaN? I could use
&gt; &gt; signaling_NaN, but that is definitely not what I want to test.
&gt; 
&gt; Crafting NaNs in C++ isn&apos;t the best thing ever... bitwise_cast basically :-(

OK, maybe I’ll come back eventually and add that. I am not in any hurry to do so.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328251</attachid>
            <date>2017-12-02 13:31:53 -0800</date>
            <delta_ts>2017-12-02 14:08:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180318-20171202133152.patch</filename>
            <type>text/plain</type>
            <size>54500</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA5YmU0YzQ1Y2Q0NmQxODYyOTU2OWI3
YzdhNTBjYWVkZTJhODk3YjAuLmZkMTE4NWQ3NDdiYmIyNzE2Y2YxZTJjMzE1MzlmYWFhNjRiMjNk
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTctMTItMDIgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwgYW4gZWFzaWVyIHRvIHVzZSBy
ZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBBZGRlZCBIYXNoZXIuaC4KKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6IERpdHRvLgor
CisgICAgICAgICogd3RmL0ZvcndhcmQuaDogQWRkZWQgSGFzaGVyIGFuZCBUZXh0U3RyZWFtLgor
CisgICAgICAgICogd3RmL0hhc2hlci5oOiBNb3ZlZCBTdHJpbmdIYXNoZXIgaW50byBhIHNlcGFy
YXRlIGhlYWRlci4gQWRkZWQgSGFzaGVyLgorICAgICAgICBNYXJrZWQgSW50ZWdlckhhc2hlciBk
ZXByZWNhdGVkLgorCisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5jcHA6IEluY2x1ZGUgU3Ry
aW5nSGFzaGVyLmggaW5zdGVhZCBvZiBIYXNoZXIuaC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdIYXNoLmg6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaGVyLmg6IEFk
ZGVkLiBNb3ZlZCBTdHJpbmdIYXNoZXIgaGVyZSBmcm9tIEhhc2hlci5oLgorCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5oOiBJbmNsdWRlIFN0cmluZ0hhc2hlci5oIGluc3RlYWQgb2Yg
SGFzaGVyLmguCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDogQWRkZWQgYSBoYXNo
IGZ1bmN0aW9uLiBUaGlzIHdhcyB1c2VmdWwgaW4gc29tZQorICAgICAgICBhZG9wdGlvbiBJIHdh
cyBkb2luZyBpbiBXZWJDb3JlLCBub3QgaW5jbHVkZWQgaW4gdGhpcyBwYXRjaC4KKworICAgICAg
ICAqIHd0Zi91bmljb2RlL1VURjguY3BwOiBJbmNsdWRlIFN0cmluZ0hhc2hlci5oIGluc3RlYWQg
b2YgSGFzaGVyLmguCisKIDIwMTctMTItMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgdGhlICJkYXRhYmFzZVRhc2tRdWV1ZSIgcGFydHMg
b2YgSURCU2VydmVyIGludG8gc29tZXRoaW5nIHJldXNhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmRjMjQ0OGExYzZlYjY4ZmRiYzEwNGI4ZTE3MTcw
Mzc1YWU5ZmViMS4uZDg5YjJmYjVhODJkNDNhZThjOGQ3NGE5NWI0ZTRhYTQwZDBkMDU4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNzgsNiArMzc4LDcg
QEAKIAkJODNGMkJBREUxQ0Y5NTI0RTAwM0U5OUMzIC8qIEZ1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgzRkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RjQ2RjVGMUEyODQwRUUwMENDQkYyMiAvKiBSZWZDb3VudGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZkNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTMzRDYzMTkxRkNCNkFCOTAwMzJFQ0Q2IC8qIFN0cmluZ0hhc2hlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MzRCRDIxOEExRThDMzAwRDBENkExIC8qIFN0cmlu
Z1ZpZXdPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU3Ry
aW5nVmlld09iakMubW07IHBhdGggPSBtYWMvU3RyaW5nVmlld09iakMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3
Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nVmlld0NG
LmNwcDsgcGF0aCA9IGNmL1N0cmluZ1ZpZXdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQUM5MUE3MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTE0MSw2ICsxMTQyLDcgQEAKIAkJCQlBOEE0NzMyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQ29uY2F0ZW5hdGUuaCAqLywKIAkJCQk3Q0Q0QzI2RjFFMkM4MkI5MDA5Mjk0NzAgLyogU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmggKi8sCiAJCQkJQThBNDczMjcxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0hhc2guaCAqLywKKwkJCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3Ry
aW5nSGFzaGVyLmggKi8sCiAJCQkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0lt
cGwuY3BwICovLAogCQkJCUE4QTQ3MzI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmgg
Ki8sCiAJCQkJMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDZlMGMwZWE5YzM3ZWRiMzI3YjNhZWExMTNkMzYyMjcw
ZjM1MDRmYzQuLjAyZGE3ODJkNmE3ZTgyMTJkY2ZjYzZkMzBjMjgyN2I0OGE1NDQyNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CkBAIC0xODYsNiArMTg2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAg
dGV4dC9TdHJpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5nQ29tbW9uLmgKICAgICB0ZXh0L1N0
cmluZ0hhc2guaAorICAgIHRleHQvU3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwu
aAogICAgIHRleHQvU3RyaW5nTWFsbG9jLmgKICAgICB0ZXh0L1N0cmluZ1ZlY3Rvci5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmgKaW5kZXggZjNkY2NiODY3MGExMmY0ZGM2M2JlZmFlNDVkZTA1Mzk3ZWY1NjhkNy4uMTQ3YTU3
ODM3ZGE1Y2IwNzA1ZDMzZTdiODg3MTA1MWVlOTMyNDBhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsNiAr
MzQsNyBAQCBjbGFzcyBCaW5hcnlTZW1hcGhvcmU7CiBjbGFzcyBDU3RyaW5nOwogY2xhc3MgQ3Jh
c2hPbk92ZXJmbG93OwogY2xhc3MgRnVuY3Rpb25EaXNwYXRjaGVyOworY2xhc3MgSGFzaGVyOwog
Y2xhc3MgT3JkaW5hbE51bWJlcjsKIGNsYXNzIFByaW50U3RyZWFtOwogY2xhc3MgU0hBMTsKQEAg
LTQyLDYgKzQzLDcgQEAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKIGNsYXNzIFN0cmluZ0ltcGw7CiBj
bGFzcyBTdHJpbmdWaWV3OwogY2xhc3MgVGV4dFBvc2l0aW9uOworY2xhc3MgVGV4dFN0cmVhbTsK
IAogc3RydWN0IEZhc3RNYWxsb2M7CiAKQEAgLTY5LDE0ICs3MSwxNSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46
Okhhc2gsIHR5cAogdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CiB1c2luZyBXVEY6OkF0b21pY1N0
cmluZ0ltcGw7CiB1c2luZyBXVEY6OkJpbmFyeVNlbWFwaG9yZTsKLXVzaW5nIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI7CiB1c2luZyBXVEY6OkNTdHJpbmc7Cit1c2luZyBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyOwogdXNpbmcgV1RGOjpFeHBlY3RlZDsKIHVzaW5nIFdURjo6RnVuY3Rpb247CiB1c2lu
ZyBXVEY6OkZ1bmN0aW9uRGlzcGF0Y2hlcjsKIHVzaW5nIFdURjo6SGFzaENvdW50ZWRTZXQ7CiB1
c2luZyBXVEY6Okhhc2hNYXA7CiB1c2luZyBXVEY6Okhhc2hTZXQ7Cit1c2luZyBXVEY6Okhhc2hl
cjsKIHVzaW5nIFdURjo6TGF6eU5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpOZXZlckRlc3Ry
b3llZDsKIHVzaW5nIFdURjo6T3B0aW9uU2V0OwpAQCAtOTEsNSArOTQsNiBAQCB1c2luZyBXVEY6
OlN0cmluZ0J1aWxkZXI7CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7CiB1c2luZyBXVEY6OlN0cmlu
Z1ZpZXc7CiB1c2luZyBXVEY6OlRleHRQb3NpdGlvbjsKK3VzaW5nIFdURjo6VGV4dFN0cmVhbTsK
IHVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdURjo6VmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAppbmRleCBhOGU2
OTBkYWE5MjdiNDIwZTg5Y2U3ZDc5Yzg3NTI3ZmRlMDlmNWNlLi4zNDcyNTA2N2E5YzYxNWQyMTNi
NjNkN2M0ODBkYmQzZmJiZTQ1YWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwz
NzEgKzE4LDE3MiBAQAogICoKICAqLwogCi0jaWZuZGVmIFdURl9IYXNoZXJfaAotI2RlZmluZSBX
VEZfSGFzaGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0v
LyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAotLy8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtl
eXMuY29tL3FlZC9oYXNoLmh0bWwKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJf
dCBjb21wdXRlSGFzaChjb25zdCBUeXBlcyYuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gT3RoZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXpl
cl9saXN0PFQ+LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwogCi0vLyBM
Q2hhciBkYXRhIGlzIGludGVycHJldGVkIGFzIExhdGluLTEtZW5jb2RlZCAoemVybyBleHRlbmRl
ZCB0byAxNiBiaXRzKS4KLQotLy8gTk9URTogVGhlIGhhc2ggY29tcHV0YXRpb24gaGVyZSBtdXN0
IHN0YXkgaW4gc3luYyB3aXRoIHRoZSBjcmVhdGVfaGFzaF90YWJsZSBzY3JpcHQgaW4KLS8vIEph
dmFTY3JpcHRDb3JlIGFuZCB0aGUgQ29kZUdlbmVyYXRvckpTLnBtIHNjcmlwdCBpbiBXZWJDb3Jl
LgotCi0vLyBHb2xkZW4gcmF0aW8uIEFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBw
aW5nIGFsbCB6ZXJvcyB0byBhIGhhc2ggdmFsdWUgb2YgemVyby4KLXN0YXRpYyBjb25zdGV4cHIg
Y29uc3QgdW5zaWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKLQot
Y2xhc3MgU3RyaW5nSGFzaGVyIHsKKy8vIERlcHJlY2F0ZWQuIFVzZSBIYXNoZXIgaW5zdGVhZC4K
K2NsYXNzIEludGVnZXJIYXNoZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwg
dG8gdXNlIGFzIGZsYWdzLgotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgbWFz
a0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4IC0gZmxhZ0NvdW50KSkgLSAxOwot
Ci0gICAgU3RyaW5nSGFzaGVyKCkKLSAgICAgICAgOiBtX2hhc2goc3RyaW5nSGFzaGluZ1N0YXJ0
VmFsdWUpCi0gICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKGZhbHNlKQotICAgICAgICAs
IG1fcGVuZGluZ0NoYXJhY3RlcigwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBUaGUgaGFzaGVy
IGhhc2hlcyB0d28gY2hhcmFjdGVycyBhdCBhIHRpbWUsIGFuZCB0aHVzIGFuICJhbGlnbmVkIiBo
YXNoZXIgaXMgb25lCi0gICAgLy8gd2hlcmUgYW4gZXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycyBo
YXZlIGJlZW4gYWRkZWQuIENhbGxlcnMgdGhhdCBhbHdheXMgYWRkCi0gICAgLy8gY2hhcmFjdGVy
cyB0d28gYXQgYSB0aW1lIGNhbiB1c2UgdGhlICJhc3N1bWluZyBhbGlnbmVkIiBmdW5jdGlvbnMu
Ci0gICAgdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKFVDaGFyIGEsIFVDaGFyIGIp
Ci0gICAgewotICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7Ci0gICAgICAg
IG1faGFzaCArPSBhOwotICAgICAgICBtX2hhc2ggPSAobV9oYXNoIDw8IDE2KSBeICgoYiA8PCAx
MSkgXiBtX2hhc2gpOwotICAgICAgICBtX2hhc2ggKz0gbV9oYXNoID4+IDExOwotICAgIH0KLQot
ICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIGlm
IChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJh
Y3RlciA9IGZhbHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZCht
X3BlbmRpbmdDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7Ci0gICAgICAg
IG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRDaGFy
YWN0ZXJzKFVDaGFyIGEsIFVDaGFyIGIpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQZW5kaW5n
Q2hhcmFjdGVyKSB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgbV9oYXNQZW5k
aW5nQ2hhcmFjdGVyID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNB
c3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBhKTsKLSAgICAgICAgICAgIG1fcGVu
ZGluZ0NoYXJhY3RlciA9IGI7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgbV9o
YXNQZW5kaW5nQ2hhcmFjdGVyID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChhLCBiKTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZv
aWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7Ci0K
LSAgICAgICAgYm9vbCByZW1haW5kZXIgPSBsZW5ndGggJiAxOwotICAgICAgICBsZW5ndGggPj49
IDE7Ci0KLSAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgICAgICAgICBhZGRDaGFyYWN0
ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihkYXRhWzBdKSwgQ29udmVydGVyKGRhdGFbMV0p
KTsKLSAgICAgICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZW1h
aW5kZXIpCi0gICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29udmVydGVyKCpkYXRhKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdB
bGlnbmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGFk
ZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVu
Z3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIo
VCk+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotCi0gICAgICAgIHdo
aWxlIChUIGEgPSAqZGF0YSsrKSB7Ci0gICAgICAgICAgICBUIGIgPSAqZGF0YSsrOwotICAgICAg
ICAgICAgaWYgKCFiKSB7Ci0gICAgICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcihh
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBh
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihhKSwgQ29udmVydGVyKGIpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgYWRk
Q2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQg
YWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAg
ICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1faGFz
UGVuZGluZ0NoYXJhY3RlcikgewotICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0g
ZmFsc2U7Ci0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKG1fcGVuZGlu
Z0NoYXJhY3RlciwgQ29udmVydGVyKCpkYXRhKyspKTsKLSAgICAgICAgICAgIC0tbGVuZ3RoOwot
ICAgICAgICB9Ci0gICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVy
dGVyPihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewot
ICAgICAgICBhZGRDaGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2
b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2hh
c1BlbmRpbmdDaGFyYWN0ZXIgJiYgKmRhdGEpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0No
YXJhY3RlciA9IGZhbHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0YSsrKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25z
dCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgYWRkQ2hhcmFjdGVyczxULCBkZWZhdWx0Q29udmVy
dGVyPihkYXRhKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoV2l0aFRvcDhCaXRzTWFza2Vk
KCkgY29uc3QKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnRlZ2VyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGZpbmFsaXplQW5kTWFza1RvcDhCaXRzKHByb2Nlc3NQZW5kaW5nQ2hhcmFjdGVyKCkp
OworICAgICAgICBtX3VuZGVybHlpbmdIYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChpbnRlZ2VyLCBpbnRlZ2VyID4+IDE2KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBmaW5hbGl6ZShwcm9jZXNzUGVuZGluZ0NoYXJh
Y3RlcigpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0
ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBU
KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBTdHJpbmdIYXNoZXIgaGFz
aGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaFdpdGhUb3A4
Qml0c01hc2tlZCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENv
bnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNv
bnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOwotICAgICAg
ICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEp
OwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hB
bmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRDb252ZXJ0
ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEpCi0g
ICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHM8VCwgZGVmYXVs
dENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNo
YXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsK
LSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVy
PihkYXRhLCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFz
aGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8
VCwgQ29udmVydGVyPihkYXRhKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNo
KGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
b21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25z
dCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoPFQsIGRlZmF1bHRD
b252ZXJ0ZXI+KGRhdGEpOwotICAgIH0KLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoTWVtb3J5
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHNpemVf
dCBsZW5ndGhJblVDaGFyID0gbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgU3RyaW5n
SGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWdu
ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoSW5VQ2hhcik7Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGggJSBzaXplb2YoVUNoYXIpOyArK2kp
Ci0gICAgICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihkYXRhKVtsZW5ndGhJblVDaGFyICogc2l6ZW9mKFVDaGFyKSArIGldKTsKLQotICAgICAgICBy
ZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3Ro
PiBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGhhc2hNZW1vcnkoZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMoaGFzaCkpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxpemVBbmRNYXNrVG9wOEJpdHModW5zaWdu
ZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc2VydmluZyBzcGFjZSBmcm9tIHRoZSBoaWdo
IGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9mIHRoZSBoYXNoJ3MKLSAgICAgICAgLy8g
dmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxseSBtYXNrcyBvdXQgdGhlIGhpZ2ggYml0
cyBhbnl3YXkuCi0gICAgICAgIHJldHVybiBhdm9pZFplcm8oYXZhbGFuY2hlQml0cyhoYXNoKSAm
IFN0cmluZ0hhc2hlcjo6bWFza0hhc2gpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgY29tcHV0ZUxpdGVyYWxIYXNoKGNvbnN0IFQgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3Vu
dF0pCi0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpmaW5hbGl6ZShjb21wdXRl
TGl0ZXJhbEhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlLCAwLCBjaGFyYWN0ZXJzLCBj
aGFyYWN0ZXJDb3VudCAtIDEpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNv
bXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyQ291bnRdKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6ZmluYWxp
emVBbmRNYXNrVG9wOEJpdHMoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5nU3Rh
cnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKSk7CisgICAgICAgIHJl
dHVybiBtX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyOwotICAgIH0KLQotICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0
Q29udmVydGVyKExDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0
ZXI7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGF2YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gaGFz
aCBeIChoYXNoIDw8IDEwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czIodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMyhoYXNoICsgKGhhc2ggPj4gMTUpKTsKLSAgICB9Ci0K
LSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0
czEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMiho
YXNoIF4gKGhhc2ggPDwgMikpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMCh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2ggKyAoaGFzaCA+PiA1KSk7Ci0gICAgfQot
Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJp
dHModW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMCho
YXNoIF4gKGhhc2ggPDwgMykpOwotICAgIH0KLQotICAgIC8vIFRoaXMgYXZvaWRzIGV2ZXIgcmV0
dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bwotICAgIC8vIHNp
Z25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUgaGlnaCBiaXQgbWFpbnRh
aW5zCi0gICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2ggY29kZSBvZiAwIGJlY2F1
c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCi0gICAgLy8gZXhhY3RseSAwIHdoZW4gaGFzaCBsb29r
dXAgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGF2b2lkWmVybyh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGhhc2ggPyBoYXNoIDogKDB4ODAwMDAwMDAgPj4gU3RyaW5nSGFzaGVyOjpmbGFnQ291
bnQpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHByb2Nlc3NQZW5kaW5nQ2hhcmFjdGVyKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1faGFzaDsKLQotICAgICAgICAv
LyBIYW5kbGUgZW5kIGNhc2UuCi0gICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsK
LSAgICAgICAgICAgIHJlc3VsdCArPSBtX3BlbmRpbmdDaGFyYWN0ZXI7Ci0gICAgICAgICAgICBy
ZXN1bHQgXj0gcmVzdWx0IDw8IDExOwotICAgICAgICAgICAgcmVzdWx0ICs9IHJlc3VsdCA+PiAx
NzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgLy8g
RklYTUU6IFRoaXMgY29kZSBsaW1pdHMgaXRzZWxmIHRvIHRoZSBvbGRlciwgbW9yZSBsaW1pdGVk
IEMrKzExIGNvbnN0ZXhwciBjYXBhYmlsaXRpZXMsIHVzaW5nCi0gICAgLy8gcmVjdXJzaW9uIGlu
c3RlYWQgb2YgbG9vcGluZywgZm9yIGV4YW1wbGUuIFdvdWxkIGJlIG5pY2UgdG8gcmV3cml0ZSB0
aGlzIGluIGEgc2ltcGxlciB3YXkKLSAgICAvLyBvbmNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIHN1
cHBvcnQgY29tcGlsZXJzIGxpa2UgR0NDIDQuOSB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydCBpdC4K
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0
Q2hhcmFjdGVyMSh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2ggKyAo
aGFzaCA+PiAxNyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxj
dWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjAodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEoKGhhc2gg
PDwgMTEpIF4gaGFzaCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBj
YWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25l
ZCBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmlu
Z0xhc3RDaGFyYWN0ZXIwKGhhc2ggKyBjaGFyYWN0ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMSh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+PiAxMSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUwKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNlY29uZENo
YXJhY3RlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxjdWxhdGUxKChoYXNoIDw8IDE2KSBe
ICgoc2Vjb25kQ2hhcmFjdGVyIDw8IDExKSBeIGhhc2gpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJz
dENoYXJhY3RlciwgdW5zaWduZWQgc2Vjb25kQ2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNhbGN1bGF0ZTAoaGFzaCArIGZpcnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOwot
ICAgIH0KKyAgICBTdHJpbmdIYXNoZXIgbV91bmRlcmx5aW5nSGFzaGVyOworfTsKIAotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoSW1wbCh1bnNpZ25lZCBo
YXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQorY2xhc3MgSGFzaGVyIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgYWRkIGZ1bmN0aW9uIGlz
IGEgbm9uLW1lbWJlciBzbyBpdCBjYW4gYmUgb3ZlcmxvYWRlZCBmb3IgdmFyaW91cyB0eXBlcy4K
KyAgICBmcmllbmQgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHVpbnQzMl90IGludGVnZXIpCiAg
ICAgewotICAgICAgICByZXR1cm4gKGluZGV4ID09IGxlbmd0aCkKLSAgICAgICAgICAgID8gaGFz
aCA6ICgoaW5kZXggKyAxKSA9PSBsZW5ndGgpCi0gICAgICAgICAgICA/IGNhbGN1bGF0ZVdpdGhS
ZW1haW5pbmdMYXN0Q2hhcmFjdGVyKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhdKQotICAgICAgICAg
ICAgOiBjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0ZXJzW2lu
ZGV4XSwgY2hhcmFjdGVyc1tpbmRleCArIDFdKSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpOworICAgICAgICBoYXNoZXIubV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgbV9oYXNoOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyOwotICAgIFVDaGFyIG1f
cGVuZGluZ0NoYXJhY3RlcjsKLX07Ci0KLWNsYXNzIEludGVnZXJIYXNoZXIgewotcHVibGljOgot
ICAgIHZvaWQgYWRkKHVuc2lnbmVkIGludGVnZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
VHlwZXM+IGZyaWVuZCB1aW50MzJfdCBjb21wdXRlSGFzaChjb25zdCBUeXBlcyYuLi4gdmFsdWVz
KQogICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7CisgICAgICAgIEhhc2hlciBoYXNoZXI7
CisgICAgICAgIGFkZChoYXNoZXIsIHN0ZDo6Zm9yd2FyZF9hc190dXBsZSh2YWx1ZXMuLi4pKTsK
KyAgICAgICAgcmV0dXJuIGhhc2hlci5tX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOwogICAgIH0K
IAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lLi4uIE90aGVyVHlwZXM+IGZyaWVuZCBpbmxpbmUgdWludDMyX3QgY29tcHV0ZUhhc2go
c3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGxpc3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxPdGhl
clR5cGVzPi4uLiBvdGhlckxpc3RzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdW5kZXJseWlu
Z0hhc2hlci5oYXNoKCk7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAgIGFkZChoYXNo
ZXIsIGxpc3QpOworICAgICAgICBhZGQoaGFzaGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUob3Ro
ZXJMaXN0cy4uLikpOworICAgICAgICByZXR1cm4gaGFzaGVyLm1fdW5kZXJseWluZ0hhc2hlci5o
YXNoKCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFN0cmluZ0hhc2hlciBtX3VuZGVybHlpbmdI
YXNoZXI7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHVpbnQ2NF90IGlu
dGVnZXIpCit7CisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIp
KTsKKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW50ZWdlciA+PiAzMikp
OworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHVpbnQxNl90IGludGVnZXIp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGVmZmljaWVudC4gSWYgd2Ugd2VyZSBkb2lu
ZyBhIGxvdCBvZiBoYXNoaW5nIG9mIDE2LWJpdCB2YWx1ZXMsIHRoZW4gbWF5YmUgd2UnZCB3YW50
IHRvIHVzZQorICAgIC8vIGFkZENoYXJhY3RlciBpbnN0ZWFkLiBHZXR0aW5nIHJpZCBvZiAiYXNz
dW1pbmcgYWxpZ25lZCIgd291bGQgbWFrZSBoYXNoaW5nIHRoYXQgaXMgYWxsIDMyLWJpdCBvciBs
YXJnZXIgdmFsdWVzCisgICAgLy8gc2xpZ2h0bHkgc2xvd2VyLCBzbyB3ZSBtaWdodCB3YW50IHRv
IGJyZWFrIHRoaXMgaW50byB0d28gY2xhc3Nlcy4KKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW50ZWdlcikpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNo
ZXIsIHVpbnQ4X3QgaW50ZWdlcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZWZmaWNp
ZW50LiBJZiB3ZSB3ZXJlIGhhc2hpbmcgYSBsb3Qgb2YgaW5kaXZpZHVhbCBieXRlcyB3ZSB3b3Vs
ZCB3YW50IHNvbWV0aGluZyBtb3JlIGNsZXZlci4KKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW50ZWdlcikpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNo
ZXIsIGJvb2wgYm9vbGVhbikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZWZmaWNpZW50
LiBJZiB3ZSB3ZXJlIGhhc2hpbmcgYSBsb3Qgb2YgYm9vbGVhbnMgd2Ugd291bGQgd2FudCBzb21l
dGhpbmcgbW9yZSBjbGV2ZXIuCisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
Ym9vbGVhbikpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHVuc2lnbmVk
IGxvbmcgaW50ZWdlcikKK3sKKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
aW50ZWdlcikpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGRvdWJsZSBu
dW1iZXIpCit7CisgICAgYWRkKGhhc2hlciwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCY+KG51
bWJlcikpOworfQorCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGZsb2F0IG51bWJl
cikKK3sKKyAgICBhZGQoaGFzaGVyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Jj4obnVtYmVy
KSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY2hhciBpbnRlZ2VyKQor
eworICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGludGVnZXIpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU2lnbmVkSW50ZWdlcj4gaW5saW5lIHZvaWQgYWRkKHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zaWduZWQ8U2lnbmVkSW50ZWdlcj46OnZhbHVlLCBIYXNoZXImPiBo
YXNoZXIsIFNpZ25lZEludGVnZXIgaW50ZWdlcikKK3sKKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNf
Y2FzdDxzdGQ6Om1ha2VfdW5zaWduZWRfdDxTaWduZWRJbnRlZ2VyPj4oaW50ZWdlcikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnVtZXJhdGlvbj4gaW5saW5lIHZvaWQgYWRkKHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19lbnVtPEVudW1lcmF0aW9uPjo6dmFsdWUsIEhhc2hlciY+IGhhc2hl
ciwgRW51bWVyYXRpb24gdmFsdWUpCit7CisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8c3Rk
Ojp1bmRlcmx5aW5nX3R5cGVfdDxFbnVtZXJhdGlvbj4+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgVHlwZUNoZWNrSGVscGVyIHsgfTsKK3RlbXBsYXRlPHR5cGVuYW1l
LCB0eXBlbmFtZSA9IHZvaWQ+IHN0cnVjdCBIYXNCZWdpbkZ1bmN0aW9uTWVtYmVyIDogc3RkOjpm
YWxzZV90eXBlIHsgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lcj4gc3RydWN0IEhhc0Jl
Z2luRnVuY3Rpb25NZW1iZXI8Q29udGFpbmVyLCBzdGQ6OmNvbmRpdGlvbmFsX3Q8ZmFsc2UsIFR5
cGVDaGVja0hlbHBlcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Q29udGFpbmVyPigpLmJlZ2luKCkp
Piwgdm9pZD4+IDogc3RkOjp0cnVlX3R5cGUgeyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
YWluZXI+IGlubGluZSB2b2lkIGFkZChzdGQ6OmVuYWJsZV9pZl90PEhhc0JlZ2luRnVuY3Rpb25N
ZW1iZXI8Q29udGFpbmVyPjo6dmFsdWUsIEhhc2hlciY+IGhhc2hlciwgY29uc3QgQ29udGFpbmVy
JiBjb250YWluZXIpCit7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNvbnRhaW5lcikKKyAgICAg
ICAgYWRkKGhhc2hlciwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwgc3Rk
OjpzaXplX3QgLi4uaT4gaW5saW5lIHZvaWQgYWRkVHVwbGVIZWxwZXIoSGFzaGVyJiBoYXNoZXIs
IGNvbnN0IFR1cGxlJiB2YWx1ZXMsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8aS4uLj4pCit7CisgICAg
W10gKC4uLikgeyB9KChhZGQoaGFzaGVyLCBzdGQ6OmdldDxpPih2YWx1ZXMpKSwgMCkuLi4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gaW5saW5lIHZvaWQgYWRkKEhhc2hlciYg
aGFzaGVyLCBjb25zdCBzdGQ6OnR1cGxlPFR5cGVzLi4uPiYgdHVwbGUpCit7CisgICAgYWRkVHVw
bGVIZWxwZXIoaGFzaGVyLCB0dXBsZSwgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVw
bGVfc2l6ZTxzdGQ6OnR1cGxlPFR5cGVzLi4uPj46OnZhbHVlPiB7IH0pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3Qgc3RkOjpwYWlyPFQxLCBUMj4mIHBhaXIpCit7CisgICAgYWRkKGhhc2hlciwgcGFp
ci5maXJzdCk7CisgICAgYWRkKGhhc2hlciwgcGFpci5zZWNvbmQpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8VD4mIG9wdGlvbmFsKQoreworICAgIGFkZChoYXNoZXIsIG9wdGlvbmFsLmhhc192YWx1
ZSgpKTsKKyAgICBpZiAob3B0aW9uYWwuaGFzX3ZhbHVlKCkpCisgICAgICAgIGFkZChoYXNoZXIs
IG9wdGlvbmFsLnZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gaW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBWYXJpYW50PFR5cGVzLi4uPiYgdmFy
aWFudCkKK3sKKyAgICBhZGQoaGFzaGVyLCB2YXJpYW50LmluZGV4KCkpOworICAgIHZpc2l0KFsm
aGFzaGVyXSAoYXV0byYgdmFsdWUpIHsKKyAgICAgICAgYWRkKGhhc2hlciwgdmFsdWUpOworICAg
IH0sIHZhcmlhbnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lLi4uIE90aGVyVHlwZXM+IGlubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgT3RoZXJUeXBlcyYuLi4gb3Ro
ZXJWYWx1ZXMpCit7CisgICAgYWRkKGhhc2hlciwgdmFsdWUxKTsKKyAgICBhZGQoaGFzaGVyLCB2
YWx1ZTIpOworICAgIGFkZChoYXNoZXIsIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShvdGhlclZhbHVl
cy4uLikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpCit7CisgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgYWRkKGhhc2hlciwgdmFsdWUpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcgV1RGOjpjb21wdXRlSGFzaDsKK3VzaW5nIFdURjo6
SGFzaGVyOwogdXNpbmcgV1RGOjpJbnRlZ2VySGFzaGVyOwotdXNpbmcgV1RGOjpTdHJpbmdIYXNo
ZXI7Ci0KLSNlbmRpZiAvLyBXVEZfSGFzaGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmluZGV4
IDczNWNmYzU2MWZiYjY1ZjM3NjRkY2MyZDI4OTM2OGI2N2Q3ZDkyNWUuLjE4MWIxMTA1NjdhYjc1
MWRiYmQ2MDI3YWJhZTkwMDdjZTg1YjRiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQ1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDk1YWMyNGIxZjBkNjdiMDhjMGRhMmYz
Yzc2MWI1YWEyYWE3ZjQzZDQuLjc4YmQ1YWNlODhkNTc4NjQ1ZjQ0NDUxZjY2ZmI0ZTEzZjgzZDQ5
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiw5
IEBACiAjaWZuZGVmIFN0cmluZ0hhc2hfaAogI2RlZmluZSBTdHJpbmdIYXNoX2gKIAotI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTgxNjA3YWRkNTJk
NTVmMmE3ODFkYTc5OTMxNzgzNmQ3Mzc4NzdiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaGVyLmgKQEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvTENoYXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFBhdWwgSHNpZWgncyBT
dXBlckZhc3RIYXNoCisvLyBodHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2gu
aHRtbAorCisvLyBMQ2hhciBkYXRhIGlzIGludGVycHJldGVkIGFzIExhdGluLTEtZW5jb2RlZCAo
emVyby1leHRlbmRlZCB0byAxNiBiaXRzKS4KKworLy8gTk9URTogVGhlIGhhc2ggY29tcHV0YXRp
b24gaGVyZSBtdXN0IHN0YXkgaW4gc3luYyB3aXRoIHRoZSBjcmVhdGVfaGFzaF90YWJsZSBzY3Jp
cHQgaW4KKy8vIEphdmFTY3JpcHRDb3JlIGFuZCB0aGUgQ29kZUdlbmVyYXRvckpTLnBtIHNjcmlw
dCBpbiBXZWJDb3JlLgorCisvLyBHb2xkZW4gcmF0aW8uIEFyYml0cmFyeSBzdGFydCB2YWx1ZSB0
byBhdm9pZCBtYXBwaW5nIGFsbCB6ZXJvcyB0byBhIGhhc2ggdmFsdWUgb2YgemVyby4KK3N0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlF
Mzc3OUI5VTsKKworY2xhc3MgU3RyaW5nSGFzaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZvciBT
dHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVu
c2lnbmVkIG1hc2tIYXNoID0gKDFVIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIGZsYWdDb3Vu
dCkpIC0gMTsKKworICAgIFN0cmluZ0hhc2hlcigpCisgICAgICAgIDogbV9oYXNoKHN0cmluZ0hh
c2hpbmdTdGFydFZhbHVlKQorICAgICAgICAsIG1faGFzUGVuZGluZ0NoYXJhY3RlcihmYWxzZSkK
KyAgICAgICAgLCBtX3BlbmRpbmdDaGFyYWN0ZXIoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
VGhlIGhhc2hlciBoYXNoZXMgdHdvIGNoYXJhY3RlcnMgYXQgYSB0aW1lLCBhbmQgdGh1cyBhbiAi
YWxpZ25lZCIgaGFzaGVyIGlzIG9uZQorICAgIC8vIHdoZXJlIGFuIGV2ZW4gbnVtYmVyIG9mIGNo
YXJhY3RlcnMgaGF2ZSBiZWVuIGFkZGVkLiBDYWxsZXJzIHRoYXQgYWx3YXlzIGFkZAorICAgIC8v
IGNoYXJhY3RlcnMgdHdvIGF0IGEgdGltZSBjYW4gdXNlIHRoZSAiYXNzdW1pbmcgYWxpZ25lZCIg
ZnVuY3Rpb25zLgorICAgIHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChVQ2hhciBh
LCBVQ2hhciBiKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIp
OworICAgICAgICBtX2hhc2ggKz0gYTsKKyAgICAgICAgbV9oYXNoID0gKG1faGFzaCA8PCAxNikg
XiAoKGIgPDwgMTEpIF4gbV9oYXNoKTsKKyAgICAgICAgbV9oYXNoICs9IG1faGFzaCA+PiAxMTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgewor
ICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBtX2hhc1Bl
bmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wZW5kaW5nQ2hhcmFjdGVyID0gY2hhcmFjdGVy
OworICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOworICAgIH0KKworICAgIHZv
aWQgYWRkQ2hhcmFjdGVycyhVQ2hhciBhLCBVQ2hhciBiKQorICAgIHsKKyAgICAgICAgaWYgKG1f
aGFzUGVuZGluZ0NoYXJhY3RlcikgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgYSk7CisgICAgICAg
ICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBiOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWdu
ZWQoYSwgYik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVy
dGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIpOworCisgICAgICAgIGJvb2wgcmVtYWluZGVyID0gbGVuZ3RoICYgMTsKKyAgICAgICAg
bGVuZ3RoID4+PSAxOworCisgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAg
YWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoZGF0YVswXSksIENvbnZlcnRl
cihkYXRhWzFdKSk7CisgICAgICAgICAgICBkYXRhICs9IDI7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAocmVtYWluZGVyKQorICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcigqZGF0
YSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgewor
ICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+
KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIg
Q29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCog
ZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKKwor
ICAgICAgICB3aGlsZSAoVCBhID0gKmRhdGErKykgeworICAgICAgICAgICAgVCBiID0gKmRhdGEr
KzsKKyAgICAgICAgICAgIGlmICghYikgeworICAgICAgICAgICAgICAgIGFkZENoYXJhY3RlcihD
b252ZXJ0ZXIoYSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoYSksIENvbnZl
cnRlcihiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKKyAgICB7Cisg
ICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4o
ZGF0YSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVy
KFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0No
YXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0YSsrKSk7CisgICAgICAgICAgICAt
LWxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVk
PFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFjdGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRh
LCBsZW5ndGgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZl
cnRlcihUKT4gdm9pZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAg
ICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyICYmICpkYXRhKSB7CisgICAgICAgICAgICBtX2hh
c1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBDb252ZXJ0ZXIoKmRhdGErKykpOworICAg
ICAgICB9CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVy
PihkYXRhKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJh
Y3RlcnMoY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVm
YXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaFdpdGhUb3A4
Qml0c01hc2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluYWxpemVBbmRNYXNr
VG9wOEJpdHMocHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmluYWxpemUocHJvY2Vzc1Bl
bmRpbmdDaGFyYWN0ZXIoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNo
YXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJp
dHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgU3RyaW5n
SGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWdu
ZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gaGFzaGVyLmhh
c2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tU
b3A4Qml0cyhjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hl
cjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVy
dGVyPihkYXRhKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2Vk
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZh
dWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBU
KiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRz
PFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNv
bnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFN0cmluZ0hhc2hl
ciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQs
IENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBz
dGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAg
IFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1p
bmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7CisgICAgICAgIHJldHVybiBoYXNoZXIuaGFz
aCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUhhc2goY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxU
LCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAg
ICAgICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7CisgICAg
ICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNo
YXIpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVD
aGFyKTsgKytpKQorICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7CisK
KyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8c2l6
ZV90IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBoYXNoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplQW5kTWFza1RvcDhC
aXRzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJv
bSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCisg
ICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRo
ZSBoaWdoIGJpdHMgYW55d2F5LgorICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJp
dHMoaGFzaCkgJiBTdHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFsSGFzaChjb25zdCBUICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6ZmluYWxp
emUoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hh
cmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCAoJmNoYXJh
Y3RlcnMpW2NoYXJhY3RlckNvdW50XSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRzKGNvbXB1dGVMaXRlcmFsSGFzaEltcGwoc3RyaW5n
SGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gY2hhcmFjdGVyOworICAgIH0KKwor
ICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29udmVydGVyKExDaGFyIGNoYXJhY3RlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCisg
ICAgeworICAgICAgICByZXR1cm4gaGFzaCBeIChoYXNoIDw8IDEwKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czIodW5z
aWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMyhoYXNoICsg
KGhhc2ggPj4gMTUpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czEodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdmFsYW5jaGVCaXRzMihoYXNoIF4gKGhhc2ggPDwgMikpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMCh1
bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2gg
KyAoaGFzaCA+PiA1KSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdmFsYW5jaGVCaXRzMChoYXNoIF4gKGhhc2ggPDwgMykpOworICAgIH0KKworICAg
IC8vIFRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRo
YXQgaXMgdXNlZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0
dGluZyB0aGUgaGlnaCBiaXQgbWFpbnRhaW5zCisgICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0
byBhIGhhc2ggY29kZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCisgICAgLy8g
ZXhhY3RseSAwIHdoZW4gaGFzaCBsb29rdXAgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2b2lkWmVybyh1bnNpZ25l
ZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggPyBoYXNoIDogKDB4ODAwMDAwMDAg
Pj4gU3RyaW5nSGFzaGVyOjpmbGFnQ291bnQpOworICAgIH0KKworICAgIHVuc2lnbmVkIHByb2Nl
c3NQZW5kaW5nQ2hhcmFjdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG1faGFzaDsKKworICAgICAgICAvLyBIYW5kbGUgZW5kIGNhc2UuCisgICAgICAgIGlmICht
X2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBtX3BlbmRpbmdD
aGFyYWN0ZXI7CisgICAgICAgICAgICByZXN1bHQgXj0gcmVzdWx0IDw8IDExOworICAgICAgICAg
ICAgcmVzdWx0ICs9IHJlc3VsdCA+PiAxNzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0
aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBDKysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2lu
ZworICAgIC8vIHJlY3Vyc2lvbiBpbnN0ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3Vs
ZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhpcyBpbiBhIHNpbXBsZXIgd2F5CisgICAgLy8gb25jZSB3
ZSBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBk
byBub3QgeWV0IHN1cHBvcnQgaXQuCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxj
dWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEodW5zaWduZWQgaGFzaCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTcpOworICAgIH0KKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKHVu
c2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmlu
Z0xhc3RDaGFyYWN0ZXIxKChoYXNoIDw8IDExKSBeIGhhc2gpOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIo
dW5zaWduZWQgaGFzaCwgdW5zaWduZWQgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFjdGVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEodW5zaWdu
ZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTEpOworICAg
IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBo
YXNoLCB1bnNpZ25lZCBzZWNvbmRDaGFyYWN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gY2Fs
Y3VsYXRlMSgoaGFzaCA8PCAxNikgXiAoKHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUodW5zaWdu
ZWQgaGFzaCwgdW5zaWduZWQgZmlyc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIHNlY29uZENoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGUwKGhhc2ggKyBmaXJzdENoYXJhY3Rl
ciwgc2Vjb25kQ2hhcmFjdGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNvbXB1dGVMaXRlcmFsSGFzaEltcGwodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgs
IGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAg
IHJldHVybiAoaW5kZXggPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBoYXNoIDogKChpbmRleCAr
IDEpID09IGxlbmd0aCkKKyAgICAgICAgICAgID8gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RD
aGFyYWN0ZXIoaGFzaCwgY2hhcmFjdGVyc1tpbmRleF0pCisgICAgICAgICAgICA6IGNvbXB1dGVM
aXRlcmFsSGFzaEltcGwoY2FsY3VsYXRlKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhdLCBjaGFyYWN0
ZXJzW2luZGV4ICsgMV0pLCBpbmRleCArIDIsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgbV9oYXNoOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyOwor
ICAgIFVDaGFyIG1fcGVuZGluZ0NoYXJhY3RlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6OlN0cmluZ0hhc2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXgg
OTgwOGIxMDYzNzE2ZjlkMzBlYjA1NzI1ZWVkYjExNDg1YTY3MmE3MC4uYzY0ZWM2MzhmZTI1YjE2
N2ExMDYwYWIzNDk4MGE0MTFiNmVmMzQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAg
LTI3LDE1ICsyNywxMyBAQAogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9Db252ZXJzaW9uTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbW1vbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZlY3Rvci5oPgogCiAjaWYgVVNFKENGKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggZDJi
OTliZjI1ZTNjODEwMWQzODM4NTQ4ZTNjZDBiOTlkYWQ5MDk5Ni4uNWFiYTI2OTQyZWEwZWFhYmUw
ZTVhNDY2ZGI3MmUzMWVkODFjYTBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0zNTcs
NiArMzU3LDcgQEAgcHVibGljOgogICAgIFN0cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpIDogbV9pbXBsKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7IH0KIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBpc051bGwoKSA/IDAgOiBpbXBsKCktPmhhc2goKTsgfQogICAgIHVuc2lnbmVkIGV4aXN0aW5n
SGFzaCgpIGNvbnN0IHsgcmV0dXJuIGlzTnVsbCgpID8gMCA6IGltcGwoKS0+ZXhpc3RpbmdIYXNo
KCk7IH0KIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNv
ZGUvVVRGOC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3BwCmluZGV4IGMwYzhk
OGI3ZGUzYjY5OWJkMGE5Mjk2Y2NlMTdhM2MzMzZlNmRkYWIuLmFiOWQ3OTJjODk2NTY2ZjA3NmU0
MjQyNTVkN2IwYzJlZmJhOWI3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUv
VVRGOC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4LmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVy
ZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjgsNyArMjgsNyBA
QAogI2luY2x1ZGUgIlVURjguaCIKIAogI2luY2x1ZGUgIkFTQ0lJQ1R5cGUuaCIKLSNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDFhYWRk
ZTVjNDkxMzYzMGFlYzkwODA0Mzg2NDRjMWVmMjEyOWE2NS4uMTg0MTJlYjZmOTA0MTFmNzQzYmVj
MTA5N2E1YjMxNDk2NmM2ZDczYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE3LTEyLTAyICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgV1RGOjpIYXNoZXIsIGFuIGVhc2llciB0
byB1c2UgcmVwbGFjZW1lbnQgZm9yIFdURjo6SW50ZWdlckhhc2hlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzE4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0OiBBZGRlZCBIYXNoZXIuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHA6IEFkZGVkLiBDb250YWlucyB0ZXN0cyBv
ZiB0aGUgbmV3CisgICAgICAgIFdURjo6SGFzaGVyIGNsYXNzLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcDogSW5jbHVkZSBTdHJpbmdIYXNoZXIu
aCBpbnN0ZWFkIG9mCisgICAgICAgIEhhc2hlci5oLgorCiAyMDE3LTEyLTAxICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJEcml2ZXI6IGF1
dG8taW5zdGFsbCBweXRlc3QgaW5zdGVhZCBvZiBpbXBvcnRpbmcgaXQgZnJvbSB3cHQgdG9vbHMg
ZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZGViMWVhM2ZiNWI4
M2E2MTE1Y2NiNzUxNGY3MDVjMzcyYzA3NzAzLi43ZTMxZjMwOTc4YWU0MjdiMTBhOTFmYjE0ZWZi
OWZlMTM0NDMwMWExIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTEwMyw2ICsx
MDMsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9IYXNoTWFwLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNo
U2V0LmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoZXIuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0ludGVnZXJUb1N0cmluZ0NvbnZlcnNp
b24uY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTEVCRGVjb2Rlci5jcHAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMzUzNzljMTI2ZjIxZDUzZjVkYmExMzUxNDc0YjRhNTRlZTU4
MjUzZC4uODMyOGNlYWE4NzQzNjI3M2Q0NjExMTQ0NTQ0YzlkMWNkYmIyMjBjYiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTUzMiw2ICs1MzIsNyBAQAogCQk5MzEwQ0QzODFFRjcwOEZCMDA1
MEZGRTAgLyogRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsg
fTsKIAkJOTMyOUFBMjkxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMjlBQTI4MURF
M0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi87IH07CiAJCTkzMkFFNTNE
MUQzNzEwNDcwMDVERkZBRiAvKiBmb2N1cy1pbnB1dHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzU3NUM1NTFEMzAzNjZFMDAwRDYw
NEQgLyogZm9jdXMtaW5wdXRzLmh0bWwgKi87IH07CisJCTkzM0Q2MzFEMUZDQjc2MjAwMDMyRUNE
NiAvKiBIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzRDYzMUIxRkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi87IH07CiAJCTkz
NjEwMDI5MTREQzk1QTcwMDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYxMDAyODE0REM5
NTdCMDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgKi87IH07CiAJCTkzNjI1RDI3MUNE
OTc0MUMwMDZEQzFGMSAvKiBsYXJnZS12aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2MjVEMjYxQ0Q5
NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVvLXdpdGhvdXQtYXVkaW8uaHRtbCAqLzsgfTsKIAkJ
OTM2RjcyODAxQ0Q3RDlFQzAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzZG
NzI3RTFDRDdEOUQwMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5odG1sICovOyB9
OwpAQCAtMTQ5NCw2ICsxNDk1LDcgQEAKIAkJOTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMyOUFBMjgxREUzRjgxRTAwM0FC
RDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRCcmVha0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMzMTQwN0IxN0I0NDE5MDAwRjA4M0IxIC8qIERpZE5vdEhhbmRsZUtleURvd24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkTm90SGFuZGxlS2V5RG93
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzM0Q2MzFCMUZDQjc2MTgwMDMy
RUNENiAvKiBIYXNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SGFzaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM1NzVDNTUxRDMwMzY2
RTAwMEQ2MDREIC8qIGZvY3VzLWlucHV0cy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gImZvY3VzLWlucHV0cy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM2
MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2YtaWZyYW1lcy5odG1sIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM2MjVEMjYxQ0Q5NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVvLXdp
dGhvdXQtYXVkaW8uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsYXJnZS12aWRl
by13aXRob3V0LWF1ZGlvLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYw
NCw2ICsyNjA2LDcgQEAKIAkJCQk5MzEwQ0QzNjFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24u
Y3BwICovLAogCQkJCTgzREI3OTY3MUVGNjNCM0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi8s
CiAJCQkJN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLywK
KwkJCQk5MzNENjMxQjFGQ0I3NjE4MDAzMkVDRDYgLyogSGFzaGVyLmNwcCAqLywKIAkJCQkwQkNE
ODMzNDE0ODU3Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJE
RTU5OTAwNEY2OTFEIC8qIEhhc2hTZXQuY3BwICovLAogCQkJCTI2NkZBRkQyMTVFNTc3NTIwMEY2
MUQ1QiAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcCAqLywKQEAgLTMxNjQsNiArMzE2
Nyw3IEBACiAJCQkJQUQ3QzQzNEQxREQyQTU0RTAwMjY4ODhCIC8qIEV4cGVjdGVkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMTBDRDM4MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2QkZEMjk0QzFENUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50
ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTMzRDYzMUQxRkNCNzYyMDAwMzJFQ0Q2IC8q
IEhhc2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVEMjFEMEE1OTBDMDBGRUJDRjMg
LyogSGFzaE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENDFEMEE1OTBDMDBGRUJD
RjMgLyogSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBG
RUJDRjMgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1OGRmNGQx
NDJjZjljYTI2YjFmZTQ2NDdkYTEyYjljN2RiYmQ4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8YXJyYXk+CisjaW5j
bHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKKworLy8gVGVzdCBhZ2FpbnN0IGFjdHVhbCBoYXNoIHZhbHVlcy4KKy8vIFdlIGRvbid0
IHJlYWxseSBkZXBlbmQgb24gc3BlY2lmaWMgdmFsdWVzLCBidXQgaXQgbWFrZXMgdGVzdGluZyBz
aW1wbGVyLgorLy8gQ291bGQgaW5zdGVhZCBjb25zdHJ1Y3QgdGVzdHMgdGhhdCBjaGVjayBoYXNo
ZXMgYWdhaW5zdCBlYWNoIG90aGVyLgorLy8gTm8gYmlnIGRlYWwgdG8gdXBkYXRlIGFsbCBvZiB0
aGVzZSBpZiB3ZSBjaGFuZ2UgdGhlIGhhc2ggYWxnb3JpdGhtLgorCitjb25zdCB1aW50MzJfdCBl
bXB0eUhhc2ggPSA4MjYxMDMzNFU7Citjb25zdCB1aW50MzJfdCB6ZXJvMzJCaXRIYXNoID0gMjQy
MTgzNTA0VTsKK2NvbnN0IHVpbnQzMl90IHplcm82NEJpdEhhc2ggPSA1NzkyMzYyNjBVOworY29u
c3QgdWludDMyX3Qgb25lMzJCaXRIYXNoID0gNjkwMTM4MTkyVTsKK2NvbnN0IHVpbnQzMl90IG9u
ZTY0Qml0SGFzaCA9IDE2MjE0NTQ5MTFVOworCitURVNUKFdURiwgSGFzaGVyKQoreworfQorCitU
RVNUKFdURiwgSGFzaGVyX2FkZEludGVnZXIpCit7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhh
c2gsIGNvbXB1dGVIYXNoKDBVKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1
dGVIYXNoKGZhbHNlKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNo
KHN0YXRpY19jYXN0PGNoYXI+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNv
bXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDhfdD4oMCkpKTsKKyAgICBFWFBFQ1RfRVEoemVybzMy
Qml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oMCkpKTsKKyAgICBFWFBF
Q1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oMCkp
KTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8
dWludDE2X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNo
KDApKTsKKworICAgIEVYUEVDVF9FUSh6ZXJvNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgwVUxMKSk7
CisgICAgRVhQRUNUX0VRKHplcm82NEJpdEhhc2gsIGNvbXB1dGVIYXNoKDBMKSk7CisgICAgRVhQ
RUNUX0VRKHplcm82NEJpdEhhc2gsIGNvbXB1dGVIYXNoKDBVTCkpOworICAgIEVYUEVDVF9FUSh6
ZXJvNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgwTEwpKTsKKworICAgIEVYUEVDVF9FUShvbmUzMkJp
dEhhc2gsIGNvbXB1dGVIYXNoKDFVKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29t
cHV0ZUhhc2godHJ1ZSkpOworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNo
KHN0YXRpY19jYXN0PGNoYXI+KDEpKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29t
cHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50OF90PigxKSkpOworICAgIEVYUEVDVF9FUShvbmUzMkJp
dEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDEpKSk7CisgICAgRVhQRUNU
X0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oMSkpKTsK
KyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDx1aW50
MTZfdD4oMSkpKTsKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgxKSk7
CisKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgxVUxMKSk7CisgICAg
RVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMUwpKTsKKyAgICBFWFBFQ1RfRVEo
b25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgxVUwpKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRI
YXNoLCBjb21wdXRlSGFzaCgxTEwpKTsKKworICAgIEVYUEVDVF9FUSgxNzcyMzgxNjYxVSwgY29t
cHV0ZUhhc2goMHg3RlUpKTsKKyAgICBFWFBFQ1RfRVEoMTc3MjM4MTY2MVUsIGNvbXB1dGVIYXNo
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgz
NzMwODc3MzQwVSwgY29tcHV0ZUhhc2goMHg4MFUpKTsKKyAgICBFWFBFQ1RfRVEoMzczMDg3NzM0
MFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkpKTsKKwor
ICAgIEVYUEVDVF9FUSgzNzY1MTA2MzRVLCBjb21wdXRlSGFzaCgweEZGVSkpOworICAgIEVYUEVD
VF9FUSgzNzY1MTA2MzRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+
OjptYXgoKSkpOworICAgIEVYUEVDVF9FUSgzNzY1MTA2MzRVLCBjb21wdXRlSGFzaChzdGF0aWNf
Y2FzdDxjaGFyPigtMSkpKTsKKyAgICBFWFBFQ1RfRVEoMzc2NTEwNjM0VSwgY29tcHV0ZUhhc2go
c3RhdGljX2Nhc3Q8aW50OF90PigtMSkpKTsKKworICAgIEVYUEVDVF9FUSgyNjI2MzIyNzhVLCBj
b21wdXRlSGFzaCgweDdGRkZVKSk7CisgICAgRVhQRUNUX0VRKDI2MjYzMjI3OFUsIGNvbXB1dGVI
YXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1heCgpKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMjk4MTk3ODY2MVUsIGNvbXB1dGVIYXNoKDB4ODAwMFUpKTsKKyAgICBFWFBFQ1RfRVEoMjk4
MTk3ODY2MVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1pbigp
KSk7CisKKyAgICBFWFBFQ1RfRVEoODk0OTg0MTc5VSwgY29tcHV0ZUhhc2goMHhGRkZGVSkpOwor
ICAgIEVYUEVDVF9FUSg4OTQ5ODQxNzlVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQxNl90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoODk0OTg0MTc5VSwgY29tcHV0ZUhh
c2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oLTEpKSk7CisKKyAgICBFWFBFQ1RfRVEoMzQzMDY3MDMy
OFUsIGNvbXB1dGVIYXNoKDB4N0ZGRkZGRkZVKSk7CisgICAgRVhQRUNUX0VRKDM0MzA2NzAzMjhV
LCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpOworCisg
ICAgRVhQRUNUX0VRKDI0MjU2ODM0MjhVLCBjb21wdXRlSGFzaCgweDgwMDAwMDAwVSkpOworICAg
IEVYUEVDVF9FUSgyNDI1NjgzNDI4VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpKTsKKworICAgIEVYUEVDVF9FUSgxOTU1NTExNDM1VSwgY29tcHV0ZUhh
c2goMHhGRkZGRkZGRlUpKTsKKyAgICBFWFBFQ1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNo
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpOworICAgIEVYUEVDVF9FUSgx
OTU1NTExNDM1VSwgY29tcHV0ZUhhc2goLTEpKTsKKworICAgIEVYUEVDVF9FUSgxMjY0NTMyNjA0
VSwgY29tcHV0ZUhhc2goMHg4MDAwMDAwMDAwMDAwMDAwVUxMKSk7CisgICAgRVhQRUNUX0VRKDEy
NjQ1MzI2MDRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpOworICAgIEVYUEVDVF9FUSgxMjY0NTMyNjA0VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmlj
X2xpbWl0czxsb25nPjo6bWluKCkpKTsKKworICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwgY29t
cHV0ZUhhc2goMHg3RkZGRkZGRkZGRkZGRkZGVUxMKSk7CisgICAgRVhQRUNUX0VRKDI5NjEwNDk4
MzRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOwor
ICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0
czxsb25nPjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhh
c2goMHhGRkZGRkZGRkZGRkZGRkZGVUxMKSk7CisgICAgRVhQRUNUX0VRKDExMDYzMzIwOTFVLCBj
b21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKTsKKyAgICBF
WFBFQ1RfRVEoMTEwNjMzMjA5MVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQgbG9uZz46Om1heCgpKSk7CisgICAgRVhQRUNUX0VRKDExMDYzMzIwOTFVLCBjb21wdXRl
SGFzaCgtMUwpKTsKKyAgICBFWFBFQ1RfRVEoMTEwNjMzMjA5MVUsIGNvbXB1dGVIYXNoKC0xTEwp
KTsKK30KKworVEVTVChXVEYsIEhhc2hlcl9hZGRGbG9hdGluZ1BvaW50KQoreworICAgIEVYUEVD
VF9FUSh6ZXJvNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgwLjApKTsKKyAgICBFWFBFQ1RfRVEob25l
NjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRlbm9y
bV9taW4oKSkpOworCisgICAgRVhQRUNUX0VRKDIyNzgzOTk5ODBVLCBjb21wdXRlSGFzaCgxLjAp
KTsKKyAgICBFWFBFQ1RfRVEoMzg3MDY4OTI5N1UsIGNvbXB1dGVIYXNoKC0xLjApKTsKKworICAg
IEVYUEVDVF9FUSgzMDE2MzQ0NDE0VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjptaW4oKSkpOworICAgIEVYUEVDVF9FUSgxNTk3NjYyOTgyVSwgY29tcHV0ZUhhc2go
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDI1
MDE3MDI1NTZVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omxvd2Vz
dCgpKSk7CisgICAgRVhQRUNUX0VRKDIyMTQ0Mzk4MDJVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkpOworCisgICAgRVhQRUNUX0VRKDI2NzgwODY3
NTlVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
KSk7CisgICAgRVhQRUNUX0VRKDIzMDQ0NDUzOTNVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICBFWFBFQ1RfRVEoMjIzMjU5MzMxMVUs
IGNvbXB1dGVIYXNoKC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsK
KworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgwLjBmKSk7CisgICAg
RVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmRlbm9ybV9taW4oKSkpOworCisgICAgRVhQRUNUX0VRKDEwODE1NzU5NjZVLCBjb21w
dXRlSGFzaCgxLjBmKSk7CisgICAgRVhQRUNUX0VRKDMyNjIwOTMxODhVLCBjb21wdXRlSGFzaCgt
MS4wZikpOworCisgICAgRVhQRUNUX0VRKDMxNzAxODk1MjRVLCBjb21wdXRlSGFzaChzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoMTEwMjEyOTlVLCBj
b21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpKTsKKworICAgIEVY
UEVDVF9FUSgzMjEyMDY5NTA2VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Omxvd2VzdCgpKSk7CisgICAgRVhQRUNUX0VRKDEzMDg3ODQ1MDZVLCBjb21wdXRlSGFzaChz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKSk7CisKKyAgICBFWFBFQ1RfRVEo
Mjc1MTI4ODUxMVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWll
dF9OYU4oKSkpOworICAgIEVYUEVDVF9FUSgzNDU3MDQ5MjU2VSwgY29tcHV0ZUhhc2goc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpKTsKKyAgICBFWFBFQ1RfRVEoNDIwODg3
Mzk3MVUsIGNvbXB1dGVIYXNoKC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkpOworfQorCitURVNUKFdURiwgSGFzaGVyX2FkZE11bHRpcGxlKQoreworICAgIEVYUEVDVF9F
UShlbXB0eUhhc2gsIGNvbXB1dGVIYXNoKCkpOworICAgIEVYUEVDVF9FUShlbXB0eUhhc2gsIGNv
bXB1dGVIYXNoKHN0ZDo6bWFrZV90dXBsZSgpKSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwg
Y29tcHV0ZUhhc2goc3RkOjphcnJheTxpbnQsIDA+IHsgfSkpOworICAgIEVYUEVDVF9FUShlbXB0
eUhhc2gsIGNvbXB1dGVIYXNoKFZlY3RvcjxpbnQ+IHsgfSkpOworICAgIEVYUEVDVF9FUShlbXB0
eUhhc2gsIGNvbXB1dGVIYXNoKFZlY3RvcjxpbnQsIDE+IHsgfSkpOworCisgICAgRVhQRUNUX0VR
KHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6YXJyYXk8aW50LCAxPiB7IHsgMCB9IH0p
KTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4g
eyAwIH0pKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9y
PGludCwgMT4geyAwIH0pKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhh
c2goc3RkOjpvcHRpb25hbDxpbnQ+IHsgc3RkOjpudWxsb3B0IH0pKTsKKworICAgIEVYUEVDVF9F
UShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKDEsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lNjRC
aXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfdHVwbGUoMSwgMCkpKTsKKyAgICBFWFBFQ1Rf
RVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfcGFpcigxLCAwKSkpOworICAg
IEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6YXJyYXk8aW50LCAyPiB7
IHsgMSwgMCB9IH0pKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCh7
IDEsIDAgfSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6
b3B0aW9uYWw8aW50PiB7IDAgfSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1
dGVIYXNoKFZlY3RvcjxpbnQ+IHsgeyAxLCAwIH0gfSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJp
dEhhc2gsIGNvbXB1dGVIYXNoKFZlY3RvcjxpbnQsIDE+IHsgeyAxLCAwIH0gfSkpOworCisgICAg
RVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKDEpLCBz
dGQ6OmFycmF5PGludCwgMT4geyB7IDAgfSB9KSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFz
aCwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKHN0ZDo6bWFrZV90dXBsZSgxKSwgc3RkOjph
cnJheTxpbnQsIDE+IHsgeyAwIH0gfSkpKTsKKworICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwg
Y29tcHV0ZUhhc2goMSwgMiwgMywgNCkpOworICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29t
cHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKDEsIDIsIDMsIDQpKSk7CisgICAgRVhQRUNUX0VRKDE2
NTIzNTIzMjFVLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfcGFpcihzdGQ6Om1ha2VfcGFpcigxLCAy
KSwgc3RkOjptYWtlX3BhaXIoMywgNCkpKSk7Cit9CisKK3N0cnVjdCBIYXNoZXJBZGRDdXN0b20x
IHsgfTsKKwordm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEhhc2hlckFkZEN1c3RvbTEm
KQoreworICAgIGFkZChoYXNoZXIsIDEsIDIsIDMsIDQpOworfQorCitzdHJ1Y3QgSGFzaGVyQWRk
Q3VzdG9tMiB7IH07CisKK3ZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBIYXNoZXJBZGRD
dXN0b20yJikKK3sKKyAgICBhZGQoaGFzaGVyLCB7IDEsIDIsIDMsIDQgfSk7Cit9CisKK1RFU1Qo
V1RGLCBIYXNoZXJfYWRkQ3VzdG9tKQoreworICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29t
cHV0ZUhhc2goSGFzaGVyQWRkQ3VzdG9tMSB7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTY1MjM1MjMy
MVUsIGNvbXB1dGVIYXNoKEhhc2hlckFkZEN1c3RvbTIgeyB9KSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N0cmluZ0hhc2hlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJp
bmdIYXNoZXIuY3BwCmluZGV4IDU5ODViMDI2YTgxMWQ0YjJlNTlkNGMwMDYwNDI0NmRkNTQwZDky
NTIuLmEwOWY0MWEzODQ5MDhkOTNiOTdiNDRlMmRjMjlhZjkwZDljN2ZiNDIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcApAQCAtMjUsNyArMjUs
NyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328254</attachid>
            <date>2017-12-02 14:08:04 -0800</date>
            <delta_ts>2017-12-02 21:17:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180318-20171202140803.patch</filename>
            <type>text/plain</type>
            <size>54017</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA5YmU0YzQ1Y2Q0NmQxODYyOTU2OWI3
YzdhNTBjYWVkZTJhODk3YjAuLmZkMTE4NWQ3NDdiYmIyNzE2Y2YxZTJjMzE1MzlmYWFhNjRiMjNk
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTctMTItMDIgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwgYW4gZWFzaWVyIHRvIHVzZSBy
ZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBBZGRlZCBIYXNoZXIuaC4KKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6IERpdHRvLgor
CisgICAgICAgICogd3RmL0ZvcndhcmQuaDogQWRkZWQgSGFzaGVyIGFuZCBUZXh0U3RyZWFtLgor
CisgICAgICAgICogd3RmL0hhc2hlci5oOiBNb3ZlZCBTdHJpbmdIYXNoZXIgaW50byBhIHNlcGFy
YXRlIGhlYWRlci4gQWRkZWQgSGFzaGVyLgorICAgICAgICBNYXJrZWQgSW50ZWdlckhhc2hlciBk
ZXByZWNhdGVkLgorCisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5jcHA6IEluY2x1ZGUgU3Ry
aW5nSGFzaGVyLmggaW5zdGVhZCBvZiBIYXNoZXIuaC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdIYXNoLmg6IERpdHRvLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaGVyLmg6IEFk
ZGVkLiBNb3ZlZCBTdHJpbmdIYXNoZXIgaGVyZSBmcm9tIEhhc2hlci5oLgorCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5oOiBJbmNsdWRlIFN0cmluZ0hhc2hlci5oIGluc3RlYWQgb2Yg
SGFzaGVyLmguCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDogQWRkZWQgYSBoYXNo
IGZ1bmN0aW9uLiBUaGlzIHdhcyB1c2VmdWwgaW4gc29tZQorICAgICAgICBhZG9wdGlvbiBJIHdh
cyBkb2luZyBpbiBXZWJDb3JlLCBub3QgaW5jbHVkZWQgaW4gdGhpcyBwYXRjaC4KKworICAgICAg
ICAqIHd0Zi91bmljb2RlL1VURjguY3BwOiBJbmNsdWRlIFN0cmluZ0hhc2hlci5oIGluc3RlYWQg
b2YgSGFzaGVyLmguCisKIDIwMTctMTItMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgdGhlICJkYXRhYmFzZVRhc2tRdWV1ZSIgcGFydHMg
b2YgSURCU2VydmVyIGludG8gc29tZXRoaW5nIHJldXNhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmRjMjQ0OGExYzZlYjY4ZmRiYzEwNGI4ZTE3MTcw
Mzc1YWU5ZmViMS4uZDg5YjJmYjVhODJkNDNhZThjOGQ3NGE5NWI0ZTRhYTQwZDBkMDU4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNzgsNiArMzc4LDcg
QEAKIAkJODNGMkJBREUxQ0Y5NTI0RTAwM0U5OUMzIC8qIEZ1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgzRkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RjQ2RjVGMUEyODQwRUUwMENDQkYyMiAvKiBSZWZDb3VudGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZkNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTMzRDYzMTkxRkNCNkFCOTAwMzJFQ0Q2IC8qIFN0cmluZ0hhc2hlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdIYXNoZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MzRCRDIxOEExRThDMzAwRDBENkExIC8qIFN0cmlu
Z1ZpZXdPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU3Ry
aW5nVmlld09iakMubW07IHBhdGggPSBtYWMvU3RyaW5nVmlld09iakMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzOTM0QkQ0MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3
Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nVmlld0NG
LmNwcDsgcGF0aCA9IGNmL1N0cmluZ1ZpZXdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQUM5MUE3MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMQ2hhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTE0MSw2ICsxMTQyLDcgQEAKIAkJCQlBOEE0NzMyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQ29uY2F0ZW5hdGUuaCAqLywKIAkJCQk3Q0Q0QzI2RjFFMkM4MkI5MDA5Mjk0NzAgLyogU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmggKi8sCiAJCQkJQThBNDczMjcxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0hhc2guaCAqLywKKwkJCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3Ry
aW5nSGFzaGVyLmggKi8sCiAJCQkJQThBNDczMjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0lt
cGwuY3BwICovLAogCQkJCUE4QTQ3MzI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmgg
Ki8sCiAJCQkJMEYwRjUyNjkxRjQyMUZGODAwNEE0NTJDIC8qIFN0cmluZ01hbGxvYy5jcHAgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDZlMGMwZWE5YzM3ZWRiMzI3YjNhZWExMTNkMzYyMjcw
ZjM1MDRmYzQuLjAyZGE3ODJkNmE3ZTgyMTJkY2ZjYzZkMzBjMjgyN2I0OGE1NDQyNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CkBAIC0xODYsNiArMTg2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAg
dGV4dC9TdHJpbmdCdWZmZXIuaAogICAgIHRleHQvU3RyaW5nQ29tbW9uLmgKICAgICB0ZXh0L1N0
cmluZ0hhc2guaAorICAgIHRleHQvU3RyaW5nSGFzaGVyLmgKICAgICB0ZXh0L1N0cmluZ0ltcGwu
aAogICAgIHRleHQvU3RyaW5nTWFsbG9jLmgKICAgICB0ZXh0L1N0cmluZ1ZlY3Rvci5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmgKaW5kZXggZjNkY2NiODY3MGExMmY0ZGM2M2JlZmFlNDVkZTA1Mzk3ZWY1NjhkNy4uMTQ3YTU3
ODM3ZGE1Y2IwNzA1ZDMzZTdiODg3MTA1MWVlOTMyNDBhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsNiAr
MzQsNyBAQCBjbGFzcyBCaW5hcnlTZW1hcGhvcmU7CiBjbGFzcyBDU3RyaW5nOwogY2xhc3MgQ3Jh
c2hPbk92ZXJmbG93OwogY2xhc3MgRnVuY3Rpb25EaXNwYXRjaGVyOworY2xhc3MgSGFzaGVyOwog
Y2xhc3MgT3JkaW5hbE51bWJlcjsKIGNsYXNzIFByaW50U3RyZWFtOwogY2xhc3MgU0hBMTsKQEAg
LTQyLDYgKzQzLDcgQEAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKIGNsYXNzIFN0cmluZ0ltcGw7CiBj
bGFzcyBTdHJpbmdWaWV3OwogY2xhc3MgVGV4dFBvc2l0aW9uOworY2xhc3MgVGV4dFN0cmVhbTsK
IAogc3RydWN0IEZhc3RNYWxsb2M7CiAKQEAgLTY5LDE0ICs3MSwxNSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46
Okhhc2gsIHR5cAogdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CiB1c2luZyBXVEY6OkF0b21pY1N0
cmluZ0ltcGw7CiB1c2luZyBXVEY6OkJpbmFyeVNlbWFwaG9yZTsKLXVzaW5nIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI7CiB1c2luZyBXVEY6OkNTdHJpbmc7Cit1c2luZyBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyOwogdXNpbmcgV1RGOjpFeHBlY3RlZDsKIHVzaW5nIFdURjo6RnVuY3Rpb247CiB1c2lu
ZyBXVEY6OkZ1bmN0aW9uRGlzcGF0Y2hlcjsKIHVzaW5nIFdURjo6SGFzaENvdW50ZWRTZXQ7CiB1
c2luZyBXVEY6Okhhc2hNYXA7CiB1c2luZyBXVEY6Okhhc2hTZXQ7Cit1c2luZyBXVEY6Okhhc2hl
cjsKIHVzaW5nIFdURjo6TGF6eU5ldmVyRGVzdHJveWVkOwogdXNpbmcgV1RGOjpOZXZlckRlc3Ry
b3llZDsKIHVzaW5nIFdURjo6T3B0aW9uU2V0OwpAQCAtOTEsNSArOTQsNiBAQCB1c2luZyBXVEY6
OlN0cmluZ0J1aWxkZXI7CiB1c2luZyBXVEY6OlN0cmluZ0ltcGw7CiB1c2luZyBXVEY6OlN0cmlu
Z1ZpZXc7CiB1c2luZyBXVEY6OlRleHRQb3NpdGlvbjsKK3VzaW5nIFdURjo6VGV4dFN0cmVhbTsK
IHVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdURjo6VmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAppbmRleCBhOGU2
OTBkYWE5MjdiNDIwZTg5Y2U3ZDc5Yzg3NTI3ZmRlMDlmNWNlLi41OTk0MjAzMjc1NjczODEwZDE5
NzUzMTVhMGVjNTVhZjJkOGQxYTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwz
NzEgKzE4LDE0NiBAQAogICoKICAqLwogCi0jaWZuZGVmIFdURl9IYXNoZXJfaAotI2RlZmluZSBX
VEZfSGFzaGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0v
LyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAotLy8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtl
eXMuY29tL3FlZC9oYXNoLmh0bWwKLQotLy8gTENoYXIgZGF0YSBpcyBpbnRlcnByZXRlZCBhcyBM
YXRpbi0xLWVuY29kZWQgKHplcm8gZXh0ZW5kZWQgdG8gMTYgYml0cykuCi0KLS8vIE5PVEU6IFRo
ZSBoYXNoIGNvbXB1dGF0aW9uIGhlcmUgbXVzdCBzdGF5IGluIHN5bmMgd2l0aCB0aGUgY3JlYXRl
X2hhc2hfdGFibGUgc2NyaXB0IGluCi0vLyBKYXZhU2NyaXB0Q29yZSBhbmQgdGhlIENvZGVHZW5l
cmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29yZS4KLQotLy8gR29sZGVuIHJhdGlvLiBBcmJpdHJh
cnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGluZyBhbGwgemVyb3MgdG8gYSBoYXNoIHZhbHVl
IG9mIHplcm8uCi1zdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHN0cmluZ0hhc2hpbmdT
dGFydFZhbHVlID0gMHg5RTM3NzlCOVU7Ci0KLWNsYXNzIFN0cmluZ0hhc2hlciB7CisvLyBEZXBy
ZWNhdGVkLiBVc2UgSGFzaGVyIGluc3RlYWQuCitjbGFzcyBJbnRlZ2VySGFzaGVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8v
IFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KLSAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IHVuc2lnbmVkIG1hc2tIYXNoID0gKDFVIDw8IChzaXplb2YodW5zaWdu
ZWQpICogOCAtIGZsYWdDb3VudCkpIC0gMTsKLQotICAgIFN0cmluZ0hhc2hlcigpCi0gICAgICAg
IDogbV9oYXNoKHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlKQotICAgICAgICAsIG1faGFzUGVuZGlu
Z0NoYXJhY3RlcihmYWxzZSkKLSAgICAgICAgLCBtX3BlbmRpbmdDaGFyYWN0ZXIoMCkKLSAgICB7
Ci0gICAgfQotCi0gICAgLy8gVGhlIGhhc2hlciBoYXNoZXMgdHdvIGNoYXJhY3RlcnMgYXQgYSB0
aW1lLCBhbmQgdGh1cyBhbiAiYWxpZ25lZCIgaGFzaGVyIGlzIG9uZQotICAgIC8vIHdoZXJlIGFu
IGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGFkZGVkLiBDYWxsZXJzIHRoYXQg
YWx3YXlzIGFkZAotICAgIC8vIGNoYXJhY3RlcnMgdHdvIGF0IGEgdGltZSBjYW4gdXNlIHRoZSAi
YXNzdW1pbmcgYWxpZ25lZCIgZnVuY3Rpb25zLgotICAgIHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3Vt
aW5nQWxpZ25lZChVQ2hhciBhLCBVQ2hhciBiKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2hh
c1BlbmRpbmdDaGFyYWN0ZXIpOwotICAgICAgICBtX2hhc2ggKz0gYTsKLSAgICAgICAgbV9oYXNo
ID0gKG1faGFzaCA8PCAxNikgXiAoKGIgPDwgMTEpIF4gbV9oYXNoKTsKLSAgICAgICAgbV9oYXNo
ICs9IG1faGFzaCA+PiAxMTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0g
ICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFk
ZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBjaGFyYWN0ZXIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wZW5kaW5nQ2hh
cmFjdGVyID0gY2hhcmFjdGVyOwotICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVl
OwotICAgIH0KLQotICAgIHZvaWQgYWRkQ2hhcmFjdGVycyhVQ2hhciBhLCBVQ2hhciBiKQotICAg
IHsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgewotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJh
Y3RlciwgYSk7Ci0gICAgICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBiOwotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQoYSwgYik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWdu
ZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotCi0gICAgICAgIGJvb2wgcmVtYWluZGVyID0gbGVu
Z3RoICYgMTsKLSAgICAgICAgbGVuZ3RoID4+PSAxOwotCi0gICAgICAgIHdoaWxlIChsZW5ndGgt
LSkgewotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIo
ZGF0YVswXSksIENvbnZlcnRlcihkYXRhWzFdKSk7Ci0gICAgICAgICAgICBkYXRhICs9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAgYWRkQ2hhcmFj
dGVyKENvbnZlcnRlcigqZGF0YSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCi0gICAgewotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQs
IGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQoY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5k
aW5nQ2hhcmFjdGVyKTsKLQotICAgICAgICB3aGlsZSAoVCBhID0gKmRhdGErKykgewotICAgICAg
ICAgICAgVCBiID0gKmRhdGErKzsKLSAgICAgICAgICAgIGlmICghYikgewotICAgICAgICAgICAg
ICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoYSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChD
b252ZXJ0ZXIoYSksIENvbnZlcnRlcihiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3Qg
VCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwg
ZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAg
ICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0YSsr
KSk7Ci0gICAgICAgICAgICAtLWxlbmd0aDsKLSAgICAgICAgfQotICAgICAgICBhZGRDaGFyYWN0
ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgYWRkQ2hhcmFjdGVyczxULCBkZWZh
dWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9pZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRh
dGEpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyICYmICpkYXRhKSB7
Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAg
IGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBDb252ZXJ0
ZXIoKmRhdGErKykpOwotICAgICAgICB9Ci0gICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFk
ZENoYXJhY3RlcnM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpIGNvbnN0CisgICAgdm9pZCBhZGQodW5zaWdu
ZWQgaW50ZWdlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0
cyhwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsKKyAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVy
LmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAxNik7CiAg
ICAgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
ZmluYWxpemUocHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAg
IHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOwotICAgICAg
ICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAg
U3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNo
V2l0aFRvcDhCaXRzTWFza2VkKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1h
c2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1h
c2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVI
YXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJz
QXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNo
YXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0
YSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5h
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgICAg
IHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRl
cj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNp
emVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hl
ci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4o
ZGF0YSksIGxlbmd0aEluVUNoYXIpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoICUgc2l6ZW9mKFVDaGFyKTsgKytpKQotICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJh
Y3RlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVv
ZihVQ2hhcikgKyBpXSk7Ci0KLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnko
Y29uc3Qgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEs
IGxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6
ZSh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5j
aGVCaXRzKGhhc2gpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZp
bmFsaXplQW5kTWFza1RvcDhCaXRzKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICAvLyBS
ZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9z
dCBvZiB0aGUgaGFzaCdzCi0gICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBp
Y2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMgYW55d2F5LgotICAgICAgICByZXR1cm4gYXZv
aWRaZXJvKGF2YWxhbmNoZUJpdHMoaGFzaCkgJiBTdHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4K
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFsSGFzaChjb25zdCBU
ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6ZmluYWxpemUoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5n
U3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJp
dHMoY29uc3QgVCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRzKGNvbXB1dGVMaXRl
cmFsSGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNoYXJh
Y3RlckNvdW50IC0gMSkpOworICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIo
VUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihMQ2hhciBjaGFyYWN0ZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gY2hhcmFjdGVyOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMyh1bnNpZ25lZCBoYXNo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2ggXiAoaGFzaCA8PCAxMCk7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMy
KHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czMoaGFz
aCArIChoYXNoID4+IDE1KSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMxKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gYXZhbGFuY2hlQml0czIoaGFzaCBeIChoYXNoIDw8IDIpKTsKLSAgICB9Ci0K
LSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0
czAodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMSho
YXNoICsgKGhhc2ggPj4gNSkpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gYXZhbGFuY2hlQml0czAoaGFzaCBeIChoYXNoIDw8IDMpKTsKLSAgICB9Ci0K
LSAgICAvLyBUaGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5j
ZSB0aGF0IGlzIHVzZWQgdG8KLSAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIu
IFNldHRpbmcgdGhlIGhpZ2ggYml0IG1haW50YWlucwotICAgIC8vIHJlYXNvbmFibGUgZmlkZWxp
dHkgdG8gYSBoYXNoIGNvZGUgb2YgMCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0byB5aWVsZAotICAg
IC8vIGV4YWN0bHkgMCB3aGVuIGhhc2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgot
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5z
aWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAw
MDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBw
cm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2hhc2g7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGVuZCBjYXNlLgotICAgICAgICBp
ZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gbV9wZW5k
aW5nQ2hhcmFjdGVyOwotICAgICAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAxMTsKLSAgICAg
ICAgICAgIHJlc3VsdCArPSByZXN1bHQgPj4gMTc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2Vs
ZiB0byB0aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBDKysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVz
LCB1c2luZwotICAgIC8vIHJlY3Vyc2lvbiBpbnN0ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxl
LiBXb3VsZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhpcyBpbiBhIHNpbXBsZXIgd2F5Ci0gICAgLy8g
b25jZSB3ZSBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0Ljkg
dGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEodW5zaWduZWQgaGFzaCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTcpOwotICAgIH0KLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0
ZXIwKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJl
bWFpbmluZ0xhc3RDaGFyYWN0ZXIxKChoYXNoIDw8IDExKSBeIGhhc2gpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFy
YWN0ZXIodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFj
dGVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEo
dW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTEp
OwotICAgIH0KKyAgICBTdHJpbmdIYXNoZXIgbV91bmRlcmx5aW5nSGFzaGVyOworfTsKIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1bnNp
Z25lZCBzZWNvbmRDaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlMSgo
aGFzaCA8PCAxNikgXiAoKHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7Ci0gICAgfQor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+IHVpbnQzMl90IGNvbXB1dGVIYXNoKGNvbnN0IFR5
cGVzJi4uLik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiB1
aW50MzJfdCBjb21wdXRlSGFzaChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4sIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxPdGhlclR5cGVzPi4uLik7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNhbGN1bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJhY3RlciwgdW5z
aWduZWQgc2Vjb25kQ2hhcmFjdGVyKQorY2xhc3MgSGFzaGVyIHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gZnJpZW5kIHVpbnQzMl90IGNvbXB1dGVIYXNoKGNvbnN0
IFR5cGVzJi4uLiB2YWx1ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlMChoYXNo
ICsgZmlyc3RDaGFyYWN0ZXIsIHNlY29uZENoYXJhY3Rlcik7CisgICAgICAgIEhhc2hlciBoYXNo
ZXI7CisgICAgICAgIGFkZChoYXNoZXIsIHN0ZDo6Zm9yd2FyZF9hc190dXBsZSh2YWx1ZXMuLi4p
KTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5tX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOwogICAg
IH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoSW1w
bCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIE90
aGVyVHlwZXM+IGZyaWVuZCB1aW50MzJfdCBjb21wdXRlSGFzaChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VD4gbGlzdCwgc3RkOjppbml0aWFsaXplcl9saXN0PE90aGVyVHlwZXM+Li4uIG90aGVyTGlz
dHMpCiAgICAgewotICAgICAgICByZXR1cm4gKGluZGV4ID09IGxlbmd0aCkKLSAgICAgICAgICAg
ID8gaGFzaCA6ICgoaW5kZXggKyAxKSA9PSBsZW5ndGgpCi0gICAgICAgICAgICA/IGNhbGN1bGF0
ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhdKQotICAg
ICAgICAgICAgOiBjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0
ZXJzW2luZGV4XSwgY2hhcmFjdGVyc1tpbmRleCArIDFdKSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOworICAgICAgICBIYXNoZXIgaGFzaGVyOworICAgICAgICBhZGQoaGFzaGVyLCBs
aXN0KTsKKyAgICAgICAgYWRkKGhhc2hlciwgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKG90aGVyTGlz
dHMuLi4pKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5tX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgp
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIG1faGFzaDsKLSAgICBib29sIG1faGFzUGVuZGluZ0No
YXJhY3RlcjsKLSAgICBVQ2hhciBtX3BlbmRpbmdDaGFyYWN0ZXI7Ci19OwotCi1jbGFzcyBJbnRl
Z2VySGFzaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnRlZ2VyKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlcj4gZnJpZW5kIHZvaWQgYWRkKHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc191bnNpZ25lZDxVbnNpZ25lZEludGVnZXI+Ojp2YWx1ZSAmJiBz
aXplb2YoVW5zaWduZWRJbnRlZ2VyKSA8PSBzaXplb2YodWludDMyX3QpLCBIYXNoZXImPiBoYXNo
ZXIsIFVuc2lnbmVkSW50ZWdlciBpbnRlZ2VyKQogICAgIHsKLSAgICAgICAgbV91bmRlcmx5aW5n
SGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+PiAx
Nik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKKyAgICAgICAgLy8gV2UgY2FuIGNvbnNp
ZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNvZGUgcGF0aCBmb3IgaGFzaGluZyBib29sZWFu
cyBvciBpbmRpdmlkdWFsIGJ5dGVzIGlmIG5lZWRlZC4KKyAgICAgICAgLy8gV2UgY2FuIGNvbnNp
ZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNvZGUgcGF0aCBmb3IgaGFzaGluZyAxNi1iaXQg
dmFsdWVzIGlmIG5lZWRlZCwgcGVyaGFwcyB1c2luZyBhZGRDaGFyYWN0ZXIsCisgICAgICAgIC8v
IGJ1dCBnZXR0aW5nIHJpZCBvZiAiYXNzdW1pbmcgYWxpZ25lZCIgd291bGQgbWFrZSBoYXNoaW5n
IHZhbHVlcyAzMi1iaXQgb3IgbGFyZ2VyIHNsb3dlci4KKyAgICAgICAgdWludDMyX3Qgc2l6ZWRJ
bnRlZ2VyID0gaW50ZWdlcjsKKyAgICAgICAgaGFzaGVyLm1fdW5kZXJseWluZ0hhc2hlci5hZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHNpemVkSW50ZWdlciwgc2l6ZWRJbnRlZ2VyID4+IDE2
KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hl
cjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlcj4gdm9pZCBhZGQoc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVkSW50ZWdlcj46OnZhbHVlICYm
IHNpemVvZihVbnNpZ25lZEludGVnZXIpID09IDgsIEhhc2hlciY+IGhhc2hlciwgVW5zaWduZWRJ
bnRlZ2VyIGludGVnZXIpCit7CisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGludGVnZXIpKTsKKyAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW50ZWdl
ciA+PiAzMikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRBcml0aG1ldGljPiB2b2lk
IGFkZChzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2lnbmVkPFNpZ25lZEFyaXRobWV0aWM+Ojp2
YWx1ZSwgSGFzaGVyJj4gaGFzaGVyLCBTaWduZWRBcml0aG1ldGljIG51bWJlcikKK3sKKyAgICAv
LyBXZSBvdmVybG9hZGVkIGZvciBkb3VibGUgYW5kIGZsb2F0IGJlbG93LCBqdXN0IGRlYWwgd2l0
aCBpbnRlZ2VycyBoZXJlLgorICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0PHN0ZDo6bWFrZV91
bnNpZ25lZF90PFNpZ25lZEFyaXRobWV0aWM+PihudW1iZXIpKTsKK30KKworaW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBkb3VibGUgbnVtYmVyKQoreworICAgIGFkZChoYXNoZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QmPihudW1iZXIpKTsKK30KKworaW5saW5lIHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBmbG9hdCBudW1iZXIpCit7CisgICAgYWRkKGhhc2hlciwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCY+KG51bWJlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bnVtZXJhdGlvbj4gdm9pZCBhZGQoc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RW51bWVy
YXRpb24+Ojp2YWx1ZSwgSGFzaGVyJj4gaGFzaGVyLCBFbnVtZXJhdGlvbiB2YWx1ZSkKK3sKKyAg
ICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEVudW1lcmF0
aW9uPj4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBUeXBlQ2hlY2tI
ZWxwZXIgeyB9OwordGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gc3RydWN0IEhh
c0JlZ2luRnVuY3Rpb25NZW1iZXIgOiBzdGQ6OmZhbHNlX3R5cGUgeyB9OwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyPiBzdHJ1Y3QgSGFzQmVnaW5GdW5jdGlvbk1lbWJlcjxDb250YWluZXIs
IHN0ZDo6Y29uZGl0aW9uYWxfdDxmYWxzZSwgVHlwZUNoZWNrSGVscGVyPGRlY2x0eXBlKHN0ZDo6
ZGVjbHZhbDxDb250YWluZXI+KCkuYmVnaW4oKSk+LCB2b2lkPj4gOiBzdGQ6OnRydWVfdHlwZSB7
IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lcj4gdm9pZCBhZGQoc3RkOjplbmFibGVf
aWZfdDxIYXNCZWdpbkZ1bmN0aW9uTWVtYmVyPENvbnRhaW5lcj46OnZhbHVlLCBIYXNoZXImPiBo
YXNoZXIsIGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVyKQoreworICAgIGZvciAoYXV0byYgdmFs
dWUgOiBjb250YWluZXIpCisgICAgICAgIGFkZChoYXNoZXIsIHZhbHVlKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVHVwbGUsIHN0ZDo6c2l6ZV90IC4uLmk+IHZvaWQgYWRkVHVwbGVIZWxwZXIo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IFR1cGxlJiB2YWx1ZXMsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8
aS4uLj4pCit7CisgICAgW10gKC4uLikgeyB9KChhZGQoaGFzaGVyLCBzdGQ6OmdldDxpPih2YWx1
ZXMpKSwgMCkuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6dHVwbGU8VHlwZXMuLi4+JiB0dXBsZSkKK3sKKyAg
ICBhZGRUdXBsZUhlbHBlcihoYXNoZXIsIHR1cGxlLCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8
c3RkOjp0dXBsZV9zaXplPHN0ZDo6dHVwbGU8VHlwZXMuLi4+Pjo6dmFsdWU+IHsgfSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gdm9pZCBhZGQoSGFzaGVyJiBoYXNo
ZXIsIGNvbnN0IHN0ZDo6cGFpcjxUMSwgVDI+JiBwYWlyKQoreworICAgIGFkZChoYXNoZXIsIHBh
aXIuZmlyc3QpOworICAgIGFkZChoYXNoZXIsIHBhaXIuc2Vjb25kKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
VD4mIG9wdGlvbmFsKQoreworICAgIGFkZChoYXNoZXIsIG9wdGlvbmFsLmhhc192YWx1ZSgpKTsK
KyAgICBpZiAob3B0aW9uYWwuaGFzX3ZhbHVlKCkpCisgICAgICAgIGFkZChoYXNoZXIsIG9wdGlv
bmFsLnZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IFZhcmlhbnQ8VHlwZXMuLi4+JiB2YXJpYW50KQoreworICAg
IGFkZChoYXNoZXIsIHZhcmlhbnQuaW5kZXgoKSk7CisgICAgdmlzaXQoWyZoYXNoZXJdIChhdXRv
JiB2YWx1ZSkgeworICAgICAgICBhZGQoaGFzaGVyLCB2YWx1ZSk7CisgICAgfSwgdmFyaWFudCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUuLi4gT3Ro
ZXJUeXBlcz4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0
IFQyJiB2YWx1ZTIsIGNvbnN0IE90aGVyVHlwZXMmLi4uIG90aGVyVmFsdWVzKQoreworICAgIGFk
ZChoYXNoZXIsIHZhbHVlMSk7CisgICAgYWRkKGhhc2hlciwgdmFsdWUyKTsKKyAgICBhZGQoaGFz
aGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUob3RoZXJWYWx1ZXMuLi4pKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxUPiB2YWx1ZXMpCit7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykKKyAgICAg
ICAgYWRkKGhhc2hlciwgdmFsdWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcg
V1RGOjpjb21wdXRlSGFzaDsKK3VzaW5nIFdURjo6SGFzaGVyOwogdXNpbmcgV1RGOjpJbnRlZ2Vy
SGFzaGVyOwotdXNpbmcgV1RGOjpTdHJpbmdIYXNoZXI7Ci0KLSNlbmRpZiAvLyBXVEZfSGFzaGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmluZGV4IDczNWNmYzU2MWZiYjY1ZjM3NjRkY2MyZDI4
OTM2OGI2N2Q3ZDkyNWUuLjE4MWIxMTA1NjdhYjc1MWRiYmQ2MDI3YWJhZTkwMDdjZTg1YjRiYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNT
dHJpbmcuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5o
CmluZGV4IDk1YWMyNGIxZjBkNjdiMDhjMGRhMmYzYzc2MWI1YWEyYWE3ZjQzZDQuLjc4YmQ1YWNl
ODhkNTc4NjQ1ZjQ0NDUxZjY2ZmI0ZTEzZjgzZDQ5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDEy
LTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiw5IEBACiAjaWZuZGVmIFN0cmluZ0hhc2hfaAog
I2RlZmluZSBTdHJpbmdIYXNoX2gKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2hlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTgxNjA3YWRkNTJkNTVmMmE3ODFkYTc5OTMxNzgzNmQ3Mzc4Nzdi
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaGVyLmgK
QEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBH
YW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHVuaWNvZGUvdXR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKKy8vIFBhdWwgSHNpZWgncyBTdXBlckZhc3RIYXNoCisvLyBodHRwOi8vd3d3
LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAorCisvLyBMQ2hhciBkYXRhIGlzIGlu
dGVycHJldGVkIGFzIExhdGluLTEtZW5jb2RlZCAoemVyby1leHRlbmRlZCB0byAxNiBiaXRzKS4K
KworLy8gTk9URTogVGhlIGhhc2ggY29tcHV0YXRpb24gaGVyZSBtdXN0IHN0YXkgaW4gc3luYyB3
aXRoIHRoZSBjcmVhdGVfaGFzaF90YWJsZSBzY3JpcHQgaW4KKy8vIEphdmFTY3JpcHRDb3JlIGFu
ZCB0aGUgQ29kZUdlbmVyYXRvckpTLnBtIHNjcmlwdCBpbiBXZWJDb3JlLgorCisvLyBHb2xkZW4g
cmF0aW8uIEFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCB6ZXJvcyB0
byBhIGhhc2ggdmFsdWUgb2YgemVyby4KK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQg
c3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKKworY2xhc3MgU3RyaW5nSGFz
aGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIGZsYWdD
b3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4K
KyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIG1hc2tIYXNoID0gKDFVIDw8IChz
aXplb2YodW5zaWduZWQpICogOCAtIGZsYWdDb3VudCkpIC0gMTsKKworICAgIFN0cmluZ0hhc2hl
cigpCisgICAgICAgIDogbV9oYXNoKHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlKQorICAgICAgICAs
IG1faGFzUGVuZGluZ0NoYXJhY3RlcihmYWxzZSkKKyAgICAgICAgLCBtX3BlbmRpbmdDaGFyYWN0
ZXIoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhlIGhhc2hlciBoYXNoZXMgdHdvIGNoYXJh
Y3RlcnMgYXQgYSB0aW1lLCBhbmQgdGh1cyBhbiAiYWxpZ25lZCIgaGFzaGVyIGlzIG9uZQorICAg
IC8vIHdoZXJlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGFkZGVkLiBD
YWxsZXJzIHRoYXQgYWx3YXlzIGFkZAorICAgIC8vIGNoYXJhY3RlcnMgdHdvIGF0IGEgdGltZSBj
YW4gdXNlIHRoZSAiYXNzdW1pbmcgYWxpZ25lZCIgZnVuY3Rpb25zLgorICAgIHZvaWQgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChVQ2hhciBhLCBVQ2hhciBiKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOworICAgICAgICBtX2hhc2ggKz0gYTsKKyAg
ICAgICAgbV9oYXNoID0gKG1faGFzaCA8PCAxNikgXiAoKGIgPDwgMTEpIF4gbV9oYXNoKTsKKyAg
ICAgICAgbV9oYXNoICs9IG1faGFzaCA+PiAxMTsKKyAgICB9CisKKyAgICB2b2lkIGFkZENoYXJh
Y3RlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hh
cmFjdGVyKSB7CisgICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVy
LCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bV9wZW5kaW5nQ2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgICAgICBtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgYWRkQ2hhcmFjdGVycyhVQ2hhciBhLCBV
Q2hhciBiKQorICAgIHsKKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgeworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZh
bHNlOworI2VuZGlmCisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKG1f
cGVuZGluZ0NoYXJhY3RlciwgYSk7CisgICAgICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBi
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3Rl
ciA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoYSwgYik7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnNB
c3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOworCisgICAgICAgIGJvb2wgcmVt
YWluZGVyID0gbGVuZ3RoICYgMTsKKyAgICAgICAgbGVuZ3RoID4+PSAxOworCisgICAgICAgIHdo
aWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChDb252ZXJ0ZXIoZGF0YVswXSksIENvbnZlcnRlcihkYXRhWzFdKSk7CisgICAgICAgICAgICBk
YXRhICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVtYWluZGVyKQorICAgICAgICAg
ICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcigqZGF0YSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1p
bmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKKworICAgICAgICB3aGlsZSAoVCBhID0gKmRhdGEr
KykgeworICAgICAgICAgICAgVCBiID0gKmRhdGErKzsKKyAgICAgICAgICAgIGlmICghYikgewor
ICAgICAgICAgICAgICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoYSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3Vt
aW5nQWxpZ25lZChDb252ZXJ0ZXIoYSksIENvbnZlcnRlcihiKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoY29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29u
c3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKCFsZW5ndGgp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIp
IHsKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAg
ICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZl
cnRlcigqZGF0YSsrKSk7CisgICAgICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgfQorICAgICAg
ICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMo
Y29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFj
dGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9pZCBhZGRDaGFyYWN0ZXJz
KGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVy
ICYmICpkYXRhKSB7CisgICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBmYWxzZTsK
KyAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFj
dGVyLCBDb252ZXJ0ZXIoKmRhdGErKykpOworICAgICAgICB9CisgICAgICAgIGFkZENoYXJhY3Rl
cnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKKyAgICB7
CisgICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZmluYWxpemVBbmRNYXNrVG9wOEJpdHMocHJvY2Vzc1BlbmRpbmdDaGFy
YWN0ZXIoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZmluYWxpemUocHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5z
aWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFz
aGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5n
dGgpOworICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQorICAg
IHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKKyAgICAgICAgcmV0dXJu
IGhhc2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2VkKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNv
bnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21w
dXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21w
dXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4g
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICB7CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5h
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2go
Y29uc3QgVCogZGF0YSkKKyAgICB7CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAg
ICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0
YSk7CisgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVm
YXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9
IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Cisg
ICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHN0YXRpY19jYXN0PGNv
bnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIpOworCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFyKTsgKytpKQorICAgICAgICAgICAgaGFz
aGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSlbbGVuZ3RoSW5V
Q2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7CisKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNo
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gc3RhdGljIHVuc2lnbmVk
IGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNo
TWVtb3J5KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2b2lk
WmVybyhhdmFsYW5jaGVCaXRzKGhhc2gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGZpbmFsaXplQW5kTWFza1RvcDhCaXRzKHVuc2lnbmVkIGhhc2gpCisgICAgewor
ICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBw
cmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCisgICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNo
IGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMgYW55d2F5LgorICAgICAg
ICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMoaGFzaCkgJiBTdHJpbmdIYXNoZXI6Om1h
c2tIYXNoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFy
YWN0ZXJDb3VudD4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFs
SGFzaChjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6ZmluYWxpemUoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChz
dHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAx
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVy
Q291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlTGl0ZXJhbEhhc2hB
bmRNYXNrVG9wOEJpdHMoY29uc3QgVCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRz
KGNvbXB1dGVMaXRlcmFsSGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJh
Y3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyOworICAgIH0KKworICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29u
dmVydGVyKExDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2
YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCBe
IChoYXNoIDw8IDEwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czIodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdmFsYW5jaGVCaXRzMyhoYXNoICsgKGhhc2ggPj4gMTUpKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czEo
dW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMihoYXNo
IF4gKGhhc2ggPDwgMikpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMCh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2ggKyAoaGFzaCA+PiA1KSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMo
dW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMChoYXNo
IF4gKGhhc2ggPDwgMykpOworICAgIH0KKworICAgIC8vIFRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJu
aW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAgIC8vIHNpZ25h
bCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUgaGlnaCBiaXQgbWFpbnRhaW5z
CisgICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2ggY29kZSBvZiAwIGJlY2F1c2Ug
aXQgaXMgbGlrZWx5IHRvIHlpZWxkCisgICAgLy8gZXhhY3RseSAwIHdoZW4gaGFzaCBsb29rdXAg
bWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGF2b2lkWmVybyh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGhhc2ggPyBoYXNoIDogKDB4ODAwMDAwMDAgPj4gU3RyaW5nSGFzaGVyOjpmbGFnQ291bnQp
OworICAgIH0KKworICAgIHVuc2lnbmVkIHByb2Nlc3NQZW5kaW5nQ2hhcmFjdGVyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1faGFzaDsKKworICAgICAgICAvLyBI
YW5kbGUgZW5kIGNhc2UuCisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBtX3BlbmRpbmdDaGFyYWN0ZXI7CisgICAgICAgICAgICByZXN1
bHQgXj0gcmVzdWx0IDw8IDExOworICAgICAgICAgICAgcmVzdWx0ICs9IHJlc3VsdCA+PiAxNzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBDKysx
MSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2luZworICAgIC8vIHJlY3Vyc2lvbiBpbnN0ZWFk
IG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3VsZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhpcyBp
biBhIHNpbXBsZXIgd2F5CisgICAgLy8gb25jZSB3ZSBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0
IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJh
Y3RlcjEodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICsgKGhhc2gg
Pj4gMTcpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRl
V2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAg
ICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIxKChoYXNoIDw8IDEx
KSBeIGhhc2gpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgY2hh
cmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0
Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFjdGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBoYXNoICsgKGhhc2ggPj4gMTEpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzZWNvbmRDaGFyYWN0
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gY2FsY3VsYXRlMSgoaGFzaCA8PCAxNikgXiAoKHNl
Y29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgZmlyc3RDaGFy
YWN0ZXIsIHVuc2lnbmVkIHNlY29uZENoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBj
YWxjdWxhdGUwKGhhc2ggKyBmaXJzdENoYXJhY3Rlciwgc2Vjb25kQ2hhcmFjdGVyKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFsSGFzaEltcGwo
dW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggPT0gbGVuZ3RoKQor
ICAgICAgICAgICAgPyBoYXNoIDogKChpbmRleCArIDEpID09IGxlbmd0aCkKKyAgICAgICAgICAg
ID8gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIoaGFzaCwgY2hhcmFjdGVyc1tp
bmRleF0pCisgICAgICAgICAgICA6IGNvbXB1dGVMaXRlcmFsSGFzaEltcGwoY2FsY3VsYXRlKGhh
c2gsIGNoYXJhY3RlcnNbaW5kZXhdLCBjaGFyYWN0ZXJzW2luZGV4ICsgMV0pLCBpbmRleCArIDIs
IGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9oYXNoOworICAg
IGJvb2wgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyOworICAgIFVDaGFyIG1fcGVuZGluZ0NoYXJhY3Rl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ0hhc2hlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggOTgwOGIxMDYzNzE2ZjlkMzBlYjA1NzI1ZWVk
YjExNDg1YTY3MmE3MC4uYzY0ZWM2MzhmZTI1YjE2N2ExMDYwYWIzNDk4MGE0MTFiNmVmMzQ5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTI3LDE1ICsyNywxMyBAQAogI2luY2x1ZGUg
PHVuaWNvZGUvdXN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9Db252ZXJz
aW9uTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZlY3Rvci5oPgogCiAjaWYgVVNFKENGKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggZDJiOTliZjI1ZTNjODEwMWQzODM4NTQ4ZTNjZDBi
OTlkYWQ5MDk5Ni4uNWFiYTI2OTQyZWEwZWFhYmUwZTVhNDY2ZGI3MmUzMWVkODFjYTBjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0zNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIFN0
cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9pbXBsKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIAorICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBpc051bGwoKSA/IDAgOiBpbXBsKCktPmhh
c2goKTsgfQogICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0dXJuIGlzTnVs
bCgpID8gMCA6IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0KIAogI2lmbmRlZiBOREVCVUcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL1VURjguY3BwCmluZGV4IGMwYzhkOGI3ZGUzYjY5OWJkMGE5Mjk2Y2NlMTdhM2Mz
MzZlNmRkYWIuLmFiOWQ3OTJjODk2NTY2ZjA3NmU0MjQyNTVkN2IwYzJlZmJhOWI3YjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdW5pY29kZS9VVEY4LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlVURjguaCIKIAogI2lu
Y2x1ZGUgIkFTQ0lJQ1R5cGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDFhYWRkZTVjNDkxMzYzMGFlYzkwODA0Mzg2NDRjMWVm
MjEyOWE2NS4uMTg0MTJlYjZmOTA0MTFmNzQzYmVjMTA5N2E1YjMxNDk2NmM2ZDczYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDE3LTEyLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgV1RGOjpIYXNoZXIsIGFuIGVhc2llciB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIFdURjo6
SW50ZWdlckhhc2hlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwMzE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OiBBZGRlZCBIYXNoZXIuY3BwLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBEaXR0by4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hl
ci5jcHA6IEFkZGVkLiBDb250YWlucyB0ZXN0cyBvZiB0aGUgbmV3CisgICAgICAgIFdURjo6SGFz
aGVyIGNsYXNzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFz
aGVyLmNwcDogSW5jbHVkZSBTdHJpbmdIYXNoZXIuaCBpbnN0ZWFkIG9mCisgICAgICAgIEhhc2hl
ci5oLgorCiAyMDE3LTEyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBXZWJEcml2ZXI6IGF1dG8taW5zdGFsbCBweXRlc3QgaW5zdGVhZCBv
ZiBpbXBvcnRpbmcgaXQgZnJvbSB3cHQgdG9vbHMgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAppbmRleCAyZGViMWVhM2ZiNWI4M2E2MTE1Y2NiNzUxNGY3MDVjMzcyYzA3NzAz
Li43ZTMxZjMwOTc4YWU0MjdiMTBhOTFmYjE0ZWZiOWZlMTM0NDMwMWExIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQKQEAgLTEwMyw2ICsxMDMsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VT
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoTWFwLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAorICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9IYXNoZXIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvTEVCRGVjb2Rlci5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzUzNzlj
MTI2ZjIxZDUzZjVkYmExMzUxNDc0YjRhNTRlZTU4MjUzZC4uODMyOGNlYWE4NzQzNjI3M2Q0NjEx
MTQ0NTQ0YzlkMWNkYmIyMjBjYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUzMiw2ICs1
MzIsNyBAQAogCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMENEMzYxRUY3MDhG
QjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJOTMyOUFBMjkxREUzRjgxRTAwM0FC
RDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJ
dGVyYXRvci5jcHAgKi87IH07CiAJCTkzMkFFNTNEMUQzNzEwNDcwMDVERkZBRiAvKiBmb2N1cy1p
bnB1dHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzU3NUM1NTFEMzAzNjZFMDAwRDYwNEQgLyogZm9jdXMtaW5wdXRzLmh0bWwgKi87
IH07CisJCTkzM0Q2MzFEMUZDQjc2MjAwMDMyRUNENiAvKiBIYXNoZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzRDYzMUIxRkNCNzYxODAwMzJF
Q0Q2IC8qIEhhc2hlci5jcHAgKi87IH07CiAJCTkzNjEwMDI5MTREQzk1QTcwMDYxMzc5RCAvKiBs
b3RzLW9mLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzYxMDAyODE0REM5NTdCMDA2MTM3OUQgLyogbG90cy1vZi1pZnJh
bWVzLmh0bWwgKi87IH07CiAJCTkzNjI1RDI3MUNEOTc0MUMwMDZEQzFGMSAvKiBsYXJnZS12aWRl
by13aXRob3V0LWF1ZGlvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM2MjVEMjYxQ0Q5NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVv
LXdpdGhvdXQtYXVkaW8uaHRtbCAqLzsgfTsKIAkJOTM2RjcyODAxQ0Q3RDlFQzAwNjhBMEZCIC8q
IGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzZGNzI3RTFDRDdEOUQwMDA2OEEwRkIgLyogbGFy
Z2UtdmlkZW8td2l0aC1hdWRpby5odG1sICovOyB9OwpAQCAtMTQ5NCw2ICsxNDk1LDcgQEAKIAkJ
OTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMyOUFBMjgxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCcmVha0l0ZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMTQwN0IxN0I0NDE5MDAwRjA4
M0IxIC8qIERpZE5vdEhhbmRsZUtleURvd24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlkTm90SGFuZGxlS2V5RG93bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzM0Q2MzFCMUZDQjc2MTgwMDMyRUNENiAvKiBIYXNoZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM1NzVDNTUxRDMwMzY2RTAwMEQ2MDREIC8qIGZvY3VzLWlucHV0cy5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImZvY3VzLWlucHV0cy5odG1sIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM2MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8qIGxv
dHMtb2YtaWZyYW1lcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2Yt
aWZyYW1lcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM2MjVEMjYxQ0Q5
NzNBRjAwNkRDMUYxIC8qIGxhcmdlLXZpZGVvLXdpdGhvdXQtYXVkaW8uaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9ICJsYXJnZS12aWRlby13aXRob3V0LWF1ZGlvLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYwNCw2ICsyNjA2LDcgQEAKIAkJCQk5MzEwQ0Qz
NjFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24uY3BwICovLAogCQkJCTgzREI3OTY3MUVGNjNC
M0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi8sCiAJCQkJN0EzOEQ3RTUxQzc1MkQ1RjAwNEYx
NTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLywKKwkJCQk5MzNENjMxQjFGQ0I3NjE4MDAzMkVD
RDYgLyogSGFzaGVyLmNwcCAqLywKIAkJCQkwQkNEODMzNDE0ODU3Q0U0MDBFQTIwMDMgLyogSGFz
aE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJERTU5OTAwNEY2OTFEIC8qIEhhc2hTZXQuY3Bw
ICovLAogCQkJCTI2NkZBRkQyMTVFNTc3NTIwMEY2MUQ1QiAvKiBJbnRlZ2VyVG9TdHJpbmdDb252
ZXJzaW9uLmNwcCAqLywKQEAgLTMxNjQsNiArMzE2Nyw3IEBACiAJCQkJQUQ3QzQzNEQxREQyQTU0
RTAwMjY4ODhCIC8qIEV4cGVjdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMTBDRDM4MUVG
NzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2QkZEMjk0
QzFENUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJOTMzRDYzMUQxRkNCNzYyMDAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzgzREVEMjFEMEE1OTBDMDBGRUJDRjMgLyogSGFzaE1hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3QzgzREVENDFEMEE1OTBDMDBGRUJDRjMgLyogSGFzaFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMgLyogSW50ZWdlclRvU3RyaW5nQ29u
dmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0hhc2hlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9I
YXNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1OGRmNGQxNDJjZjljYTI2YjFmZTQ2NDdkYTEyYjljN2Ri
YmQ4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9I
YXNoZXIuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworLy8gVGVzdCBhZ2FpbnN0IGFj
dHVhbCBoYXNoIHZhbHVlcy4KKy8vIFdlIGRvbid0IHJlYWxseSBkZXBlbmQgb24gc3BlY2lmaWMg
dmFsdWVzLCBidXQgaXQgbWFrZXMgdGVzdGluZyBzaW1wbGVyLgorLy8gQ291bGQgaW5zdGVhZCBj
b25zdHJ1Y3QgdGVzdHMgdGhhdCBjaGVjayBoYXNoZXMgYWdhaW5zdCBlYWNoIG90aGVyLgorLy8g
Tm8gYmlnIGRlYWwgdG8gdXBkYXRlIGFsbCBvZiB0aGVzZSBpZiB3ZSBjaGFuZ2UgdGhlIGhhc2gg
YWxnb3JpdGhtLgorCitjb25zdCB1aW50MzJfdCBlbXB0eUhhc2ggPSA4MjYxMDMzNFU7Citjb25z
dCB1aW50MzJfdCB6ZXJvMzJCaXRIYXNoID0gMjQyMTgzNTA0VTsKK2NvbnN0IHVpbnQzMl90IHpl
cm82NEJpdEhhc2ggPSA1NzkyMzYyNjBVOworY29uc3QgdWludDMyX3Qgb25lMzJCaXRIYXNoID0g
NjkwMTM4MTkyVTsKK2NvbnN0IHVpbnQzMl90IG9uZTY0Qml0SGFzaCA9IDE2MjE0NTQ5MTFVOwor
CitURVNUKFdURiwgSGFzaGVyKQoreworfQorCitURVNUKFdURiwgSGFzaGVyX2FkZEludGVnZXIp
Cit7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKDBVKSk7CisgICAg
RVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKGZhbHNlKSk7CisgICAgRVhQRUNU
X0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGNoYXI+KDApKSk7Cisg
ICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDhf
dD4oMCkpKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGlj
X2Nhc3Q8dWludDhfdD4oMCkpKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0
ZUhhc2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oMCkpKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0
SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8dWludDE2X3Q+KDApKSk7CisgICAgRVhQRUNU
X0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKDApKTsKKworICAgIEVYUEVDVF9FUSh6ZXJv
NjRCaXRIYXNoLCBjb21wdXRlSGFzaCgwVUxMKSk7CisgICAgRVhQRUNUX0VRKHplcm82NEJpdEhh
c2gsIGNvbXB1dGVIYXNoKDBMKSk7CisgICAgRVhQRUNUX0VRKHplcm82NEJpdEhhc2gsIGNvbXB1
dGVIYXNoKDBVTCkpOworICAgIEVYUEVDVF9FUSh6ZXJvNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgw
TEwpKTsKKworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKDFVKSk7Cisg
ICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2godHJ1ZSkpOworICAgIEVYUEVD
VF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGNoYXI+KDEpKSk7Cisg
ICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50OF90
PigxKSkpOworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDEpKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhh
c2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oMSkpKTsKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNo
LCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDx1aW50MTZfdD4oMSkpKTsKKyAgICBFWFBFQ1RfRVEo
b25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgxKSk7CisKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRI
YXNoLCBjb21wdXRlSGFzaCgxVUxMKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29t
cHV0ZUhhc2goMUwpKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgx
VUwpKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCgxTEwpKTsKKwor
ICAgIEVYUEVDVF9FUSgxNzcyMzgxNjYxVSwgY29tcHV0ZUhhc2goMHg3RlUpKTsKKyAgICBFWFBF
Q1RfRVEoMTc3MjM4MTY2MVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90
Pjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgzNzMwODc3MzQwVSwgY29tcHV0ZUhhc2goMHg4
MFUpKTsKKyAgICBFWFBFQ1RfRVEoMzczMDg3NzM0MFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50OF90Pjo6bWluKCkpKTsKKworICAgIEVYUEVDVF9FUSgzNzY1MTA2MzRVLCBj
b21wdXRlSGFzaCgweEZGVSkpOworICAgIEVYUEVDVF9FUSgzNzY1MTA2MzRVLCBjb21wdXRlSGFz
aChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkpOworICAgIEVYUEVDVF9FUSgz
NzY1MTA2MzRVLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxjaGFyPigtMSkpKTsKKyAgICBFWFBF
Q1RfRVEoMzc2NTEwNjM0VSwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50OF90PigtMSkpKTsK
KworICAgIEVYUEVDVF9FUSgyNjI2MzIyNzhVLCBjb21wdXRlSGFzaCgweDdGRkZVKSk7CisgICAg
RVhQRUNUX0VRKDI2MjYzMjI3OFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MTZfdD46Om1heCgpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjk4MTk3ODY2MVUsIGNvbXB1dGVIYXNo
KDB4ODAwMFUpKTsKKyAgICBFWFBFQ1RfRVEoMjk4MTk3ODY2MVUsIGNvbXB1dGVIYXNoKHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1pbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoODk0OTg0
MTc5VSwgY29tcHV0ZUhhc2goMHhGRkZGVSkpOworICAgIEVYUEVDVF9FUSg4OTQ5ODQxNzlVLCBj
b21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpKTsKKyAgICBF
WFBFQ1RfRVEoODk0OTg0MTc5VSwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8aW50MTZfdD4oLTEp
KSk7CisKKyAgICBFWFBFQ1RfRVEoMzQzMDY3MDMyOFUsIGNvbXB1dGVIYXNoKDB4N0ZGRkZGRkZV
KSk7CisgICAgRVhQRUNUX0VRKDM0MzA2NzAzMjhVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDI0MjU2ODM0MjhVLCBj
b21wdXRlSGFzaCgweDgwMDAwMDAwVSkpOworICAgIEVYUEVDVF9FUSgyNDI1NjgzNDI4VSwgY29t
cHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKTsKKworICAgIEVY
UEVDVF9FUSgxOTU1NTExNDM1VSwgY29tcHV0ZUhhc2goMHhGRkZGRkZGRlUpKTsKKyAgICBFWFBF
Q1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSkpOworICAgIEVYUEVDVF9FUSgxOTU1NTExNDM1VSwgY29tcHV0ZUhhc2goLTEp
KTsKKworICAgIEVYUEVDVF9FUSgxMjY0NTMyNjA0VSwgY29tcHV0ZUhhc2goMHg4MDAwMDAwMDAw
MDAwMDAwVUxMKSk7CisgICAgRVhQRUNUX0VRKDEyNjQ1MzI2MDRVLCBjb21wdXRlSGFzaChzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOworICAgIEVYUEVDVF9FUSgxMjY0NTMy
NjA0VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxsb25nPjo6bWluKCkpKTsKKwor
ICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwgY29tcHV0ZUhhc2goMHg3RkZGRkZGRkZGRkZGRkZG
VUxMKSk7CisgICAgRVhQRUNUX0VRKDI5NjEwNDk4MzRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwg
Y29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxsb25nPjo6bWF4KCkpKTsKKworICAgIEVY
UEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhhc2goMHhGRkZGRkZGRkZGRkZGRkZGVUxMKSk7
CisgICAgRVhQRUNUX0VRKDExMDYzMzIwOTFVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQ2NF90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoMTEwNjMzMjA5MVUsIGNvbXB1
dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpKSk7CisgICAg
RVhQRUNUX0VRKDExMDYzMzIwOTFVLCBjb21wdXRlSGFzaCgtMUwpKTsKKyAgICBFWFBFQ1RfRVEo
MTEwNjMzMjA5MVUsIGNvbXB1dGVIYXNoKC0xTEwpKTsKK30KKworVEVTVChXVEYsIEhhc2hlcl9h
ZGRGbG9hdGluZ1BvaW50KQoreworICAgIEVYUEVDVF9FUSh6ZXJvNjRCaXRIYXNoLCBjb21wdXRl
SGFzaCgwLjApKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRlbm9ybV9taW4oKSkpOworCisgICAgRVhQRUNUX0VR
KDIyNzgzOTk5ODBVLCBjb21wdXRlSGFzaCgxLjApKTsKKyAgICBFWFBFQ1RfRVEoMzg3MDY4OTI5
N1UsIGNvbXB1dGVIYXNoKC0xLjApKTsKKworICAgIEVYUEVDVF9FUSgzMDE2MzQ0NDE0VSwgY29t
cHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptaW4oKSkpOworICAgIEVYUEVD
VF9FUSgxNTk3NjYyOTgyVSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDI1MDE3MDI1NTZVLCBjb21wdXRlSGFzaChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omxvd2VzdCgpKSk7CisgICAgRVhQRUNUX0VRKDIyMTQ0
Mzk4MDJVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24o
KSkpOworCisgICAgRVhQRUNUX0VRKDI2NzgwODY3NTlVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKSk7CisgICAgRVhQRUNUX0VRKDIzMDQ0NDUz
OTNVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkp
KTsKKyAgICBFWFBFQ1RfRVEoMjIzMjU5MzMxMVUsIGNvbXB1dGVIYXNoKC1zdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRI
YXNoLCBjb21wdXRlSGFzaCgwLjBmKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0SGFzaCwgY29t
cHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmRlbm9ybV9taW4oKSkpOworCisg
ICAgRVhQRUNUX0VRKDEwODE1NzU5NjZVLCBjb21wdXRlSGFzaCgxLjBmKSk7CisgICAgRVhQRUNU
X0VRKDMyNjIwOTMxODhVLCBjb21wdXRlSGFzaCgtMS4wZikpOworCisgICAgRVhQRUNUX0VRKDMx
NzAxODk1MjRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkp
KTsKKyAgICBFWFBFQ1RfRVEoMTEwMjEyOTlVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgzMjEyMDY5NTA2VSwgY29tcHV0
ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omxvd2VzdCgpKSk7CisgICAgRVhQRUNU
X0VRKDEzMDg3ODQ1MDZVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
ZXBzaWxvbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjc1MTI4ODUxMVUsIGNvbXB1dGVIYXNoKHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSkpOworICAgIEVYUEVDVF9FUSgz
NDU3MDQ5MjU2VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmlu
aXR5KCkpKTsKKyAgICBFWFBFQ1RfRVEoNDIwODg3Mzk3MVUsIGNvbXB1dGVIYXNoKC1zdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkpOworfQorCitURVNUKFdURiwgSGFzaGVy
X2FkZE11bHRpcGxlKQoreworICAgIEVYUEVDVF9FUShlbXB0eUhhc2gsIGNvbXB1dGVIYXNoKCkp
OworICAgIEVYUEVDVF9FUShlbXB0eUhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6bWFrZV90dXBsZSgp
KSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goc3RkOjphcnJheTxpbnQs
IDA+IHsgfSkpOworICAgIEVYUEVDVF9FUShlbXB0eUhhc2gsIGNvbXB1dGVIYXNoKFZlY3Rvcjxp
bnQ+IHsgfSkpOworICAgIEVYUEVDVF9FUShlbXB0eUhhc2gsIGNvbXB1dGVIYXNoKFZlY3Rvcjxp
bnQsIDE+IHsgfSkpOworCisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNo
KHN0ZDo6YXJyYXk8aW50LCAxPiB7IHsgMCB9IH0pKTsKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0
SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4geyAwIH0pKTsKKyAgICBFWFBFQ1RfRVEoemVy
bzMyQml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludCwgMT4geyAwIH0pKTsKKyAgICBFWFBF
Q1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjpvcHRpb25hbDxpbnQ+IHsgc3Rk
OjpudWxsb3B0IH0pKTsKKworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNo
KDEsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om1h
a2VfdHVwbGUoMSwgMCkpKTsKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFz
aChzdGQ6Om1ha2VfcGFpcigxLCAwKSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNv
bXB1dGVIYXNoKHN0ZDo6YXJyYXk8aW50LCAyPiB7IHsgMSwgMCB9IH0pKTsKKyAgICBFWFBFQ1Rf
RVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaCh7IDEsIDAgfSkpOworICAgIEVYUEVDVF9FUShv
bmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6b3B0aW9uYWw8aW50PiB7IDAgfSkpOworICAg
IEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKFZlY3RvcjxpbnQ+IHsgeyAxLCAw
IH0gfSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKFZlY3Rvcjxp
bnQsIDE+IHsgeyAxLCAwIH0gfSkpOworCisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29t
cHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKDEpLCBzdGQ6OmFycmF5PGludCwgMT4geyB7IDAgfSB9
KSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1
cGxlKHN0ZDo6bWFrZV90dXBsZSgxKSwgc3RkOjphcnJheTxpbnQsIDE+IHsgeyAwIH0gfSkpKTsK
KworICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goMSwgMiwgMywgNCkpOwor
ICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKDEs
IDIsIDMsIDQpKSk7CisgICAgRVhQRUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChzdGQ6
Om1ha2VfcGFpcihzdGQ6Om1ha2VfcGFpcigxLCAyKSwgc3RkOjptYWtlX3BhaXIoMywgNCkpKSk7
Cit9CisKK3N0cnVjdCBIYXNoZXJBZGRDdXN0b20xIHsgfTsKKwordm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IEhhc2hlckFkZEN1c3RvbTEmKQoreworICAgIGFkZChoYXNoZXIsIDEsIDIs
IDMsIDQpOworfQorCitzdHJ1Y3QgSGFzaGVyQWRkQ3VzdG9tMiB7IH07CisKK3ZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBIYXNoZXJBZGRDdXN0b20yJikKK3sKKyAgICBhZGQoaGFzaGVy
LCB7IDEsIDIsIDMsIDQgfSk7Cit9CisKK1RFU1QoV1RGLCBIYXNoZXJfYWRkQ3VzdG9tKQorewor
ICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goSGFzaGVyQWRkQ3VzdG9tMSB7
IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTY1MjM1MjMyMVUsIGNvbXB1dGVIYXNoKEhhc2hlckFkZEN1
c3RvbTIgeyB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwCmluZGV4IDU5ODViMDI2
YTgxMWQ0YjJlNTlkNGMwMDYwNDI0NmRkNTQwZDkyNTIuLmEwOWY0MWEzODQ5MDhkOTNiOTdiNDRl
MmRjMjlhZjkwZDljN2ZiNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N0cmluZ0hhc2hlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3RyaW5nSGFzaGVyLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aGVyLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAo=
</data>
<flag name="review"
          id="347445"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328300</attachid>
            <date>2017-12-03 13:18:26 -0800</date>
            <delta_ts>2017-12-03 13:50:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180318-20171203131825.patch</filename>
            <type>text/plain</type>
            <size>55820</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA5YmU0YzQ1Y2Q0NmQxODYyOTU2OWI3
YzdhNTBjYWVkZTJhODk3YjAuLmNmNmM0ZGMyNThhYWJkOTFkOWQ3ODBmMmJkYWI5NTJiNTU5Y2Fi
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTctMTItMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwgYW4gZWFzaWVyIHRvIHVzZSBy
ZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBK
RiBCYXN0aWVuLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFk
ZGVkIEhhc2hlci5oLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDogRGl0dG8uCisKKyAg
ICAgICAgKiB3dGYvRm9yd2FyZC5oOiBBZGRlZCBIYXNoZXIgYW5kIFRleHRTdHJlYW0uCisKKyAg
ICAgICAgKiB3dGYvSGFzaGVyLmg6IE1vdmVkIFN0cmluZ0hhc2hlciBpbnRvIGEgc2VwYXJhdGUg
aGVhZGVyLiBBZGRlZCBIYXNoZXIuCisgICAgICAgIE1hcmtlZCBJbnRlZ2VySGFzaGVyIGRlcHJl
Y2F0ZWQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDogSW5jbHVkZSBTdHJpbmdI
YXNoZXIuaCBpbnN0ZWFkIG9mIEhhc2hlci5oLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hh
c2guaDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaDogQWRkZWQu
IE1vdmVkIFN0cmluZ0hhc2hlciBoZXJlIGZyb20gSGFzaGVyLmguCisKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdJbXBsLmg6IEluY2x1ZGUgU3RyaW5nSGFzaGVyLmggaW5zdGVhZCBvZiBIYXNo
ZXIuaC4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOiBBZGRlZCBhIGhhc2ggZnVu
Y3Rpb24uIFRoaXMgd2FzIHVzZWZ1bCBpbiBzb21lCisgICAgICAgIGFkb3B0aW9uIEkgd2FzIGRv
aW5nIGluIFdlYkNvcmUsIG5vdCBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICog
d3RmL3VuaWNvZGUvVVRGOC5jcHA6IEluY2x1ZGUgU3RyaW5nSGFzaGVyLmggaW5zdGVhZCBvZiBI
YXNoZXIuaC4KKwogMjAxNy0xMi0wMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRmFjdG9yIG91dCB0aGUgImRhdGFiYXNlVGFza1F1ZXVlIiBwYXJ0cyBvZiBJ
REJTZXJ2ZXIgaW50byBzb21ldGhpbmcgcmV1c2FibGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyZGMyNDQ4YTFjNmViNjhmZGJjMTA0YjhlMTcxNzAzNzVh
ZTlmZWIxLi5kODliMmZiNWE4MmQ0M2FlOGM4ZDc0YTk1YjRlNGFhNDBkMGQwNThiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3OCw2ICszNzgsNyBAQAog
CQk4M0YyQkFERTFDRjk1MjRFMDAzRTk5QzMgLyogRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODNGQkE5MzExOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlQ2FzdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZGNDZGNUYxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmll
d09iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTdHJpbmdW
aWV3T2JqQy5tbTsgcGF0aCA9IG1hYy9TdHJpbmdWaWV3T2JqQy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM5MzRCRDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdWaWV3Q0YuY3Bw
OyBwYXRoID0gY2YvU3RyaW5nVmlld0NGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTQxLDYgKzExNDIsNyBAQAogCQkJCUE4QTQ3MzI2MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdD
b25jYXRlbmF0ZS5oICovLAogCQkJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaCAqLywKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIzRkYgLyog
U3RyaW5nSGFzaC5oICovLAorCQkJCTkzM0Q2MzE5MUZDQjZBQjkwMDMyRUNENiAvKiBTdHJpbmdI
YXNoZXIuaCAqLywKIAkJCQlBOEE0NzMyODE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5j
cHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywK
IAkJCQkwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKaW5kZXggNmUwYzBlYTljMzdlZGIzMjdiM2FlYTExM2QzNjIyNzBmMzUw
NGZjNC4uMDJkYTc4MmQ2YTdlODIxMmRjZmNjNmQzMGMyODI3YjQ4YTU0NDI1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTE4Niw2ICsxODYsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICB0ZXh0
L1N0cmluZ0J1ZmZlci5oCiAgICAgdGV4dC9TdHJpbmdDb21tb24uaAogICAgIHRleHQvU3RyaW5n
SGFzaC5oCisgICAgdGV4dC9TdHJpbmdIYXNoZXIuaAogICAgIHRleHQvU3RyaW5nSW1wbC5oCiAg
ICAgdGV4dC9TdHJpbmdNYWxsb2MuaAogICAgIHRleHQvU3RyaW5nVmVjdG9yLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApp
bmRleCBmM2RjY2I4NjcwYTEyZjRkYzYzYmVmYWU0NWRlMDUzOTdlZjU2OGQ3Li4xNDdhNTc4Mzdk
YTVjYjA3MDVkMzNlN2I4ODcxMDUxZWU5MzI0MGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCw2ICszNCw3
IEBAIGNsYXNzIEJpbmFyeVNlbWFwaG9yZTsKIGNsYXNzIENTdHJpbmc7CiBjbGFzcyBDcmFzaE9u
T3ZlcmZsb3c7CiBjbGFzcyBGdW5jdGlvbkRpc3BhdGNoZXI7CitjbGFzcyBIYXNoZXI7CiBjbGFz
cyBPcmRpbmFsTnVtYmVyOwogY2xhc3MgUHJpbnRTdHJlYW07CiBjbGFzcyBTSEExOwpAQCAtNDIs
NiArNDMsNyBAQCBjbGFzcyBTdHJpbmdCdWlsZGVyOwogY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNz
IFN0cmluZ1ZpZXc7CiBjbGFzcyBUZXh0UG9zaXRpb247CitjbGFzcyBUZXh0U3RyZWFtOwogCiBz
dHJ1Y3QgRmFzdE1hbGxvYzsKIApAQCAtNjksMTQgKzcxLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlQXJnPjo6SGFz
aCwgdHlwCiB1c2luZyBXVEY6OkF0b21pY1N0cmluZzsKIHVzaW5nIFdURjo6QXRvbWljU3RyaW5n
SW1wbDsKIHVzaW5nIFdURjo6QmluYXJ5U2VtYXBob3JlOwotdXNpbmcgV1RGOjpDb21wbGV0aW9u
SGFuZGxlcjsKIHVzaW5nIFdURjo6Q1N0cmluZzsKK3VzaW5nIFdURjo6Q29tcGxldGlvbkhhbmRs
ZXI7CiB1c2luZyBXVEY6OkV4cGVjdGVkOwogdXNpbmcgV1RGOjpGdW5jdGlvbjsKIHVzaW5nIFdU
Rjo6RnVuY3Rpb25EaXNwYXRjaGVyOwogdXNpbmcgV1RGOjpIYXNoQ291bnRlZFNldDsKIHVzaW5n
IFdURjo6SGFzaE1hcDsKIHVzaW5nIFdURjo6SGFzaFNldDsKK3VzaW5nIFdURjo6SGFzaGVyOwog
dXNpbmcgV1RGOjpMYXp5TmV2ZXJEZXN0cm95ZWQ7CiB1c2luZyBXVEY6Ok5ldmVyRGVzdHJveWVk
OwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7CkBAIC05MSw1ICs5NCw2IEBAIHVzaW5nIFdURjo6U3Ry
aW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKIHVzaW5nIFdURjo6U3RyaW5nVmll
dzsKIHVzaW5nIFdURjo6VGV4dFBvc2l0aW9uOwordXNpbmcgV1RGOjpUZXh0U3RyZWFtOwogdXNp
bmcgV1RGOjpWYXJpYW50OwogdXNpbmcgV1RGOjpWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCmluZGV4IGE4ZTY5MGRh
YTkyN2I0MjBlODljZTdkNzljODc1MjdmZGUwOWY1Y2UuLjhhMDk0M2VlY2NhZDQyY2ZiZGE2Njkx
NDc2OWM3YmUxYzZhZTBkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNS0yMDA2LCAyMDA4LCAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDM3MSAr
MTgsMTQ3IEBACiAgKgogICovCiAKLSNpZm5kZWYgV1RGX0hhc2hlcl9oCi0jZGVmaW5lIFdURl9I
YXNoZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVy
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAot
Ly8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKLQotLy8gTENo
YXIgZGF0YSBpcyBpbnRlcnByZXRlZCBhcyBMYXRpbi0xLWVuY29kZWQgKHplcm8gZXh0ZW5kZWQg
dG8gMTYgYml0cykuCi0KLS8vIE5PVEU6IFRoZSBoYXNoIGNvbXB1dGF0aW9uIGhlcmUgbXVzdCBz
dGF5IGluIHN5bmMgd2l0aCB0aGUgY3JlYXRlX2hhc2hfdGFibGUgc2NyaXB0IGluCi0vLyBKYXZh
U2NyaXB0Q29yZSBhbmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29yZS4K
LQotLy8gR29sZGVuIHJhdGlvLiBBcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGlu
ZyBhbGwgemVyb3MgdG8gYSBoYXNoIHZhbHVlIG9mIHplcm8uCi1zdGF0aWMgY29uc3RleHByIGNv
bnN0IHVuc2lnbmVkIHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlID0gMHg5RTM3NzlCOVU7Ci0KLWNs
YXNzIFN0cmluZ0hhc2hlciB7CisvLyBEZXByZWNhdGVkLiBVc2UgSGFzaGVyIGluc3RlYWQuCitj
bGFzcyBJbnRlZ2VySGFzaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0
IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRv
IHVzZSBhcyBmbGFncy4KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIG1hc2tI
YXNoID0gKDFVIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIGZsYWdDb3VudCkpIC0gMTsKLQot
ICAgIFN0cmluZ0hhc2hlcigpCi0gICAgICAgIDogbV9oYXNoKHN0cmluZ0hhc2hpbmdTdGFydFZh
bHVlKQotICAgICAgICAsIG1faGFzUGVuZGluZ0NoYXJhY3RlcihmYWxzZSkKLSAgICAgICAgLCBt
X3BlbmRpbmdDaGFyYWN0ZXIoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhlIGhhc2hlciBo
YXNoZXMgdHdvIGNoYXJhY3RlcnMgYXQgYSB0aW1lLCBhbmQgdGh1cyBhbiAiYWxpZ25lZCIgaGFz
aGVyIGlzIG9uZQotICAgIC8vIHdoZXJlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGF2
ZSBiZWVuIGFkZGVkLiBDYWxsZXJzIHRoYXQgYWx3YXlzIGFkZAotICAgIC8vIGNoYXJhY3RlcnMg
dHdvIGF0IGEgdGltZSBjYW4gdXNlIHRoZSAiYXNzdW1pbmcgYWxpZ25lZCIgZnVuY3Rpb25zLgot
ICAgIHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChVQ2hhciBhLCBVQ2hhciBiKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotICAgICAgICBt
X2hhc2ggKz0gYTsKLSAgICAgICAgbV9oYXNoID0gKG1faGFzaCA8PCAxNikgXiAoKGIgPDwgMTEp
IF4gbV9oYXNoKTsKLSAgICAgICAgbV9oYXNoICs9IG1faGFzaCA+PiAxMTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICBpZiAo
bV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0
ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9w
ZW5kaW5nQ2hhcmFjdGVyLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9wZW5kaW5nQ2hhcmFjdGVyID0gY2hhcmFjdGVyOwotICAgICAgICBt
X2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYWRkQ2hhcmFj
dGVycyhVQ2hhciBhLCBVQ2hhciBiKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0No
YXJhY3RlcikgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIG1faGFzUGVuZGlu
Z0NoYXJhY3RlciA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgYSk7Ci0gICAgICAgICAgICBtX3BlbmRp
bmdDaGFyYWN0ZXIgPSBiOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIG1faGFz
UGVuZGluZ0NoYXJhY3RlciA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoYSwgYik7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lk
IGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotCi0g
ICAgICAgIGJvb2wgcmVtYWluZGVyID0gbGVuZ3RoICYgMTsKLSAgICAgICAgbGVuZ3RoID4+PSAx
OwotCi0gICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewotICAgICAgICAgICAgYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoZGF0YVswXSksIENvbnZlcnRlcihkYXRhWzFdKSk7
Ci0gICAgICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVtYWlu
ZGVyKQotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcigqZGF0YSkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxp
Z25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0
aCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQp
PiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKLQotICAgICAgICB3aGls
ZSAoVCBhID0gKmRhdGErKykgewotICAgICAgICAgICAgVCBiID0gKmRhdGErKzsKLSAgICAgICAg
ICAgIGlmICghYikgewotICAgICAgICAgICAgICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoYSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRk
Q2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoYSksIENvbnZlcnRlcihiKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFkZENo
YXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFk
ZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX2hhc1Bl
bmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZh
bHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdD
aGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0YSsrKSk7Ci0gICAgICAgICAgICAtLWxlbmd0aDsKLSAg
ICAgICAgfQotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRl
cj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgYWRkQ2hhcmFjdGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9p
ZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQ
ZW5kaW5nQ2hhcmFjdGVyICYmICpkYXRhKSB7Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQo
bV9wZW5kaW5nQ2hhcmFjdGVyLCBDb252ZXJ0ZXIoKmRhdGErKykpOwotICAgICAgICB9Ci0gICAg
ICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3Qg
VCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVmYXVsdENvbnZlcnRl
cj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgp
IGNvbnN0CisgICAgdm9pZCBhZGQodWludDMyX3QgaW50ZWdlcikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyhwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsK
KyAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQo
aW50ZWdlciwgaW50ZWdlciA+PiAxNik7CiAgICAgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gZmluYWxpemUocHJvY2Vzc1BlbmRpbmdDaGFyYWN0
ZXIoKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVy
KFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hl
cjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVy
dGVyPihkYXRhLCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJp
dHNNYXNrZWQoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252
ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25z
dCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAg
aGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsK
LSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2VkKCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5k
TWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVy
PihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRD
b252ZXJ0ZXI+KGRhdGEpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFy
IENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0g
ICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4o
ZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hl
ciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQs
IENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChj
b25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1cm4gY29t
cHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3Qg
VCogZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29u
dmVydGVyPihkYXRhKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBzaXplX3Qg
bGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZ0hh
c2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVk
KHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIpOwotCi0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFyKTsgKytpKQot
ICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7Ci0KLSAgICAgICAgcmV0
dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4g
c3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplQW5kTWFza1RvcDhCaXRzKHVuc2lnbmVk
IGhhc2gpCi0gICAgewotICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBi
aXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCi0gICAgICAgIC8vIHZh
bHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMg
YW55d2F5LgotICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMoaGFzaCkgJiBT
dHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGNvbXB1dGVMaXRlcmFsSGFzaChjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRd
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6ZmluYWxpemUoY29tcHV0ZUxp
dGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hh
cmFjdGVyQ291bnQgLSAxKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21w
dXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCAoJmNoYXJhY3RlcnMpW2NoYXJh
Y3RlckNvdW50XSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmZpbmFsaXpl
QW5kTWFza1RvcDhCaXRzKGNvbXB1dGVMaXRlcmFsSGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0
VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSkpOworICAgICAgICByZXR1
cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgVUNoYXIgZGVmYXVsdENv
bnZlcnRlcihMQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2hhcmFjdGVy
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBh
dmFsYW5jaGVCaXRzMyh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2gg
XiAoaGFzaCA8PCAxMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMyKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAg
ICByZXR1cm4gYXZhbGFuY2hlQml0czMoaGFzaCArIChoYXNoID4+IDE1KSk7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMx
KHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czIoaGFz
aCBeIChoYXNoIDw8IDIpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czAodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMShoYXNoICsgKGhhc2ggPj4gNSkpOwotICAgIH0KLQot
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRz
KHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czAoaGFz
aCBeIChoYXNoIDw8IDMpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGF2b2lkcyBldmVyIHJldHVy
bmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KLSAgICAvLyBzaWdu
YWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0IG1haW50YWlu
cwotICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNvZGUgb2YgMCBiZWNhdXNl
IGl0IGlzIGxpa2VseSB0byB5aWVsZAotICAgIC8vIGV4YWN0bHkgMCB3aGVuIGhhc2ggbG9va3Vw
IG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAwMDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpIGNvbnN0
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2hhc2g7Ci0KLSAgICAgICAgLy8g
SGFuZGxlIGVuZCBjYXNlLgotICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgKz0gbV9wZW5kaW5nQ2hhcmFjdGVyOwotICAgICAgICAgICAgcmVz
dWx0IF49IHJlc3VsdCA8PCAxMTsKLSAgICAgICAgICAgIHJlc3VsdCArPSByZXN1bHQgPj4gMTc7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBD
KysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2luZwotICAgIC8vIHJlY3Vyc2lvbiBpbnN0
ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3VsZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhp
cyBpbiBhIHNpbXBsZXIgd2F5Ci0gICAgLy8gb25jZSB3ZSBubyBsb25nZXIgbmVlZCB0byBzdXBw
b3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENo
YXJhY3RlcjEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoICsgKGhh
c2ggPj4gMTcpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIxKChoYXNoIDw8
IDExKSBeIGhhc2gpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2Fs
Y3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIodW5zaWduZWQgaGFzaCwgdW5zaWduZWQg
Y2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdM
YXN0Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFjdGVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTEpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzZWNvbmRDaGFy
YWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlMSgoaGFzaCA8PCAxNikgXiAo
KHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7Ci0gICAgfQorICAgIFN0cmluZ0hhc2hl
ciBtX3VuZGVybHlpbmdIYXNoZXI7Cit9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjYWxjdWxhdGUodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgZmlyc3RDaGFyYWN0ZXIsIHVuc2ln
bmVkIHNlY29uZENoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxjdWxhdGUwKGhh
c2ggKyBmaXJzdENoYXJhY3Rlciwgc2Vjb25kQ2hhcmFjdGVyKTsKLSAgICB9Cit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goY29uc3QgVHlwZXMmLi4uKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIE90aGVyVHlwZXM+IHVpbnQzMl90IGNv
bXB1dGVIYXNoKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiwgc3RkOjppbml0aWFsaXplcl9saXN0
PE90aGVyVHlwZXM+Li4uKTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0
ZUxpdGVyYWxIYXNoSW1wbCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorY2xhc3MgSGFzaGVyIHsKK3B1YmxpYzoK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gZnJpZW5kIHVpbnQzMl90IGNvbXB1dGVI
YXNoKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gKGluZGV4
ID09IGxlbmd0aCkKLSAgICAgICAgICAgID8gaGFzaCA6ICgoaW5kZXggKyAxKSA9PSBsZW5ndGgp
Ci0gICAgICAgICAgICA/IGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKGhhc2gs
IGNoYXJhY3RlcnNbaW5kZXhdKQotICAgICAgICAgICAgOiBjb21wdXRlTGl0ZXJhbEhhc2hJbXBs
KGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSwgY2hhcmFjdGVyc1tpbmRleCArIDFd
KSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBIYXNoZXIgaGFzaGVy
OworICAgICAgICBhZGQoaGFzaGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUodmFsdWVzLi4uKSk7
CisgICAgICAgIHJldHVybiBoYXNoZXIubV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBtX2hhc2g7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdDaGFyYWN0ZXI7
Ci0gICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOwotfTsKLQotY2xhc3MgSW50ZWdlckhhc2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBhZGQodW5zaWduZWQgaW50ZWdlcikKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiBmcmllbmQgdWludDMyX3QgY29t
cHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGxpc3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxPdGhlclR5cGVzPi4uLiBvdGhlckxpc3RzKQogICAgIHsKLSAgICAgICAgbV91bmRlcmx5
aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+
PiAxNik7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAgIGFkZChoYXNoZXIsIGxpc3Qp
OworICAgICAgICBhZGQoaGFzaGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUob3RoZXJMaXN0cy4u
LikpOworICAgICAgICByZXR1cm4gaGFzaGVyLm1fdW5kZXJseWluZ0hhc2hlci5oYXNoKCk7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBmcmllbmQgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVk
PFVuc2lnbmVkSW50ZWdlcj46OnZhbHVlICYmIHNpemVvZihVbnNpZ25lZEludGVnZXIpIDw9IHNp
emVvZih1aW50MzJfdCksIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgVW5zaWduZWRJbnRlZ2Vy
IGludGVnZXIpCiAgICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKKyAgICAgICAgLy8gV2UgY2FuIGNvbnNpZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNv
ZGUgcGF0aCBmb3IgaGFzaGluZyBib29sZWFucyBvciBpbmRpdmlkdWFsIGJ5dGVzIGlmIG5lZWRl
ZC4KKyAgICAgICAgLy8gV2UgY2FuIGNvbnNpZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNv
ZGUgcGF0aCBmb3IgaGFzaGluZyAxNi1iaXQgdmFsdWVzIGlmIG5lZWRlZCwgcGVyaGFwcyB1c2lu
ZyBhZGRDaGFyYWN0ZXIsCisgICAgICAgIC8vIGJ1dCBnZXR0aW5nIHJpZCBvZiAiYXNzdW1pbmcg
YWxpZ25lZCIgd291bGQgbWFrZSBoYXNoaW5nIHZhbHVlcyAzMi1iaXQgb3IgbGFyZ2VyIHNsb3dl
ci4KKyAgICAgICAgdWludDMyX3Qgc2l6ZWRJbnRlZ2VyID0gaW50ZWdlcjsKKyAgICAgICAgaGFz
aGVyLm1fdW5kZXJseWluZ0hhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHNpemVk
SW50ZWdlciwgc2l6ZWRJbnRlZ2VyID4+IDE2KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFVu
c2lnbmVkSW50ZWdlcj4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVk
SW50ZWdlcj46OnZhbHVlICYmIHNpemVvZihVbnNpZ25lZEludGVnZXIpID09IHNpemVvZih1aW50
NjRfdCksIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgVW5zaWduZWRJbnRlZ2VyIGludGVnZXIp
Cit7CisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIpKTsKKyAg
ICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW50ZWdlciA+PiAzMikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRBcml0aG1ldGljPiBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfc2lnbmVkPFNpZ25lZEFyaXRobWV0aWM+Ojp2YWx1ZSwgdm9pZD4gYWRkKEhhc2hlciYg
aGFzaGVyLCBTaWduZWRBcml0aG1ldGljIG51bWJlcikKK3sKKyAgICAvLyBXZSBvdmVybG9hZGVk
IGZvciBkb3VibGUgYW5kIGZsb2F0IGJlbG93LCBqdXN0IGRlYWwgd2l0aCBpbnRlZ2VycyBoZXJl
LgorICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0PHN0ZDo6bWFrZV91bnNpZ25lZF90PFNpZ25l
ZEFyaXRobWV0aWM+PihudW1iZXIpKTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBkb3VibGUgbnVtYmVyKQoreworICAgIGFkZChoYXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4obnVtYmVyKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgZmxv
YXQgbnVtYmVyKQoreworICAgIGFkZChoYXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obnVt
YmVyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1lcmF0aW9uPiBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfZW51bTxFbnVtZXJhdGlvbj46OnZhbHVlLCB2b2lkPiBhZGQoSGFzaGVyJiBo
YXNoZXIsIEVudW1lcmF0aW9uIHZhbHVlKQoreworICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0
PHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8RW51bWVyYXRpb24+Pih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IFR5cGVDaGVja0hlbHBlciB7IH07Cit0ZW1wbGF0ZTx0eXBl
bmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBzdHJ1Y3QgSGFzQmVnaW5GdW5jdGlvbk1lbWJlciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+IHN0cnVjdCBI
YXNCZWdpbkZ1bmN0aW9uTWVtYmVyPENvbnRhaW5lciwgc3RkOjpjb25kaXRpb25hbF90PGZhbHNl
LCBUeXBlQ2hlY2tIZWxwZXI8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPENvbnRhaW5lcj4oKS5iZWdp
bigpKT4sIHZvaWQ+PiA6IHN0ZDo6dHJ1ZV90eXBlIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyPiBzdGQ6OmVuYWJsZV9pZl90PEhhc0JlZ2luRnVuY3Rpb25NZW1iZXI8Q29udGFp
bmVyPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ29udGFpbmVyJiBj
b250YWluZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGNvbnRhaW5lcikKKyAg
ICAgICAgYWRkKGhhc2hlciwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwg
c3RkOjpzaXplX3QgLi4uaT4gdm9pZCBhZGRUdXBsZUhlbHBlcihIYXNoZXImIGhhc2hlciwgY29u
c3QgVHVwbGUmIHZhbHVlcywgc3RkOjppbmRleF9zZXF1ZW5jZTxpLi4uPikKK3sKKyAgICBbXSAo
Li4uKSB7IH0oKGFkZChoYXNoZXIsIHN0ZDo6Z2V0PGk+KHZhbHVlcykpLCAwKS4uLik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIHR1cGxlKQoreworICAgIGFkZFR1cGxlSGVscGVyKGhh
c2hlciwgdHVwbGUsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8c3Rk
Ojp0dXBsZTxUeXBlcy4uLj4+Ojp2YWx1ZT4geyB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qgc3RkOjpwYWly
PFQxLCBUMj4mIHBhaXIpCit7CisgICAgYWRkKGhhc2hlciwgcGFpci5maXJzdCk7CisgICAgYWRk
KGhhc2hlciwgcGFpci5zZWNvbmQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFk
ZChIYXNoZXImIGhhc2hlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCit7Cisg
ICAgYWRkKGhhc2hlciwgb3B0aW9uYWwuaGFzX3ZhbHVlKCkpOworICAgIGlmIChvcHRpb25hbC5o
YXNfdmFsdWUoKSkKKyAgICAgICAgYWRkKGhhc2hlciwgb3B0aW9uYWwudmFsdWUoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3QgVmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit7CisgICAgYWRkKGhhc2hlciwgdmFyaWFu
dC5pbmRleCgpKTsKKyAgICB2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAgICAg
IGFkZChoYXNoZXIsIHZhbHVlKTsKKyAgICB9LCB2YXJpYW50KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3Qg
T3RoZXJUeXBlcyYuLi4gb3RoZXJWYWx1ZXMpCit7CisgICAgYWRkKGhhc2hlciwgdmFsdWUxKTsK
KyAgICBhZGQoaGFzaGVyLCB2YWx1ZTIpOworICAgIGFkZChoYXNoZXIsIHN0ZDo6Zm9yd2FyZF9h
c190dXBsZShvdGhlclZhbHVlcy4uLikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykKK3sK
KyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBhZGQoaGFzaGVyLCB2YWx1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6OmNvbXB1dGVIYXNoOwor
dXNpbmcgV1RGOjpIYXNoZXI7CiB1c2luZyBXVEY6OkludGVnZXJIYXNoZXI7Ci11c2luZyBXVEY6
OlN0cmluZ0hhc2hlcjsKLQotI2VuZGlmIC8vIFdURl9IYXNoZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmlu
Zy5jcHAKaW5kZXggNzM1Y2ZjNTYxZmJiNjVmMzc2NGRjYzJkMjg5MzY4YjY3ZDdkOTI1ZS4uMTgx
YjExMDU2N2FiNzUxZGJiZDYwMjdhYmFlOTAwN2NlODViNGJhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJp
bmcuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogCiAjaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggOTVhYzI0YjFmMGQ2
N2IwOGMwZGEyZjNjNzYxYjVhYTJhYTdmNDNkNC4uNzhiZDVhY2U4OGQ1Nzg2NDVmNDQ0NTFmNjZm
YjRlMTNmODNkNDkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNo
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTIyLDkgKzIyLDkgQEAKICNpZm5kZWYgU3RyaW5nSGFzaF9oCiAjZGVmaW5lIFN0cmluZ0hhc2hf
aAogCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hh
c2hlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ODE2MDdhZGQ1MmQ1NWYyYTc4MWRhNzk5MzE3ODM2ZDczNzg3N2IzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApAQCAtMCwwICsxLDM2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gUGF1
bCBIc2llaCdzIFN1cGVyRmFzdEhhc2gKKy8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNv
bS9xZWQvaGFzaC5odG1sCisKKy8vIExDaGFyIGRhdGEgaXMgaW50ZXJwcmV0ZWQgYXMgTGF0aW4t
MS1lbmNvZGVkICh6ZXJvLWV4dGVuZGVkIHRvIDE2IGJpdHMpLgorCisvLyBOT1RFOiBUaGUgaGFz
aCBjb21wdXRhdGlvbiBoZXJlIG11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhlIGNyZWF0ZV9oYXNo
X3RhYmxlIHNjcmlwdCBpbgorLy8gSmF2YVNjcmlwdENvcmUgYW5kIHRoZSBDb2RlR2VuZXJhdG9y
SlMucG0gc2NyaXB0IGluIFdlYkNvcmUuCisKKy8vIEdvbGRlbiByYXRpby4gQXJiaXRyYXJ5IHN0
YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxsIHplcm9zIHRvIGEgaGFzaCB2YWx1ZSBvZiB6
ZXJvLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzdHJpbmdIYXNoaW5nU3RhcnRW
YWx1ZSA9IDB4OUUzNzc5QjlVOworCitjbGFzcyBTdHJpbmdIYXNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4
IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgbWFza0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4
IC0gZmxhZ0NvdW50KSkgLSAxOworCisgICAgU3RyaW5nSGFzaGVyKCkKKyAgICAgICAgOiBtX2hh
c2goc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUpCisgICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFj
dGVyKGZhbHNlKQorICAgICAgICAsIG1fcGVuZGluZ0NoYXJhY3RlcigwKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBUaGUgaGFzaGVyIGhhc2hlcyB0d28gY2hhcmFjdGVycyBhdCBhIHRpbWUsIGFu
ZCB0aHVzIGFuICJhbGlnbmVkIiBoYXNoZXIgaXMgb25lCisgICAgLy8gd2hlcmUgYW4gZXZlbiBu
dW1iZXIgb2YgY2hhcmFjdGVycyBoYXZlIGJlZW4gYWRkZWQuIENhbGxlcnMgdGhhdCBhbHdheXMg
YWRkCisgICAgLy8gY2hhcmFjdGVycyB0d28gYXQgYSB0aW1lIGNhbiB1c2UgdGhlICJhc3N1bWlu
ZyBhbGlnbmVkIiBmdW5jdGlvbnMuCisgICAgdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGln
bmVkKFVDaGFyIGEsIFVDaGFyIGIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGlu
Z0NoYXJhY3Rlcik7CisgICAgICAgIG1faGFzaCArPSBhOworICAgICAgICBtX2hhc2ggPSAobV9o
YXNoIDw8IDE2KSBeICgoYiA8PCAxMSkgXiBtX2hhc2gpOworICAgICAgICBtX2hhc2ggKz0gbV9o
YXNoID4+IDExOworICAgIH0KKworICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIg
PSBjaGFyYWN0ZXI7CisgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAg
fQorCisgICAgdm9pZCBhZGRDaGFyYWN0ZXJzKFVDaGFyIGEsIFVDaGFyIGIpCisgICAgeworICAg
ICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisjZW5kaWYKKyAgICAg
ICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBh
KTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0NoYXJhY3RlciA9IGI7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gdHJ1ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fz
c3VtaW5nQWxpZ25lZChhLCBiKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBV
Q2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25z
dCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGFz
UGVuZGluZ0NoYXJhY3Rlcik7CisKKyAgICAgICAgYm9vbCByZW1haW5kZXIgPSBsZW5ndGggJiAx
OworICAgICAgICBsZW5ndGggPj49IDE7CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Cisg
ICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihkYXRhWzBd
KSwgQ29udmVydGVyKGRhdGFbMV0pKTsKKyAgICAgICAgICAgIGRhdGEgKz0gMjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChyZW1haW5kZXIpCisgICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29u
dmVydGVyKCpkYXRhKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBh
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICB7CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVs
dENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIpOworCisgICAgICAgIHdoaWxlIChUIGEgPSAqZGF0YSsrKSB7CisgICAgICAgICAgICBU
IGIgPSAqZGF0YSsrOworICAgICAgICAgICAgaWYgKCFiKSB7CisgICAgICAgICAgICAgICAgYWRk
Q2hhcmFjdGVyKENvbnZlcnRlcihhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRl
cihhKSwgQ29udmVydGVyKGIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRh
KQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0
Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hh
ciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgeworICAgICAgICAgICAgbV9o
YXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgQ29udmVydGVyKCpkYXRhKyspKTsKKyAg
ICAgICAgICAgIC0tbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBhZGRDaGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
VUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgJiYgKmRhdGEpIHsKKyAgICAg
ICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0
YSsrKSk7CisgICAgICAgIH0KKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxU
LCBDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFj
dGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBo
YXNoV2l0aFRvcDhCaXRzTWFza2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5h
bGl6ZUFuZE1hc2tUb3A4Qml0cyhwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5hbGl6
ZShwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAg
ICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fz
c3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgICAgIHJldHVy
biBoYXNoZXIuaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVI
YXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAgICBTdHJpbmdI
YXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZDxULCBDb252ZXJ0ZXI+KGRhdGEpOworICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9w
OEJpdHNNYXNrZWQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhC
aXRzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhC
aXRzKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2hBbmRN
YXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
U3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gaGFz
aGVyLmhhc2goKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252
ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhKQorICAg
IHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKKyAgICAgICAgcmV0dXJu
IGhhc2hlci5oYXNoKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRh
LCBsZW5ndGgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bXB1dGVIYXNoPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHNpemVfdCBsZW5ndGhJblVDaGFyID0gbGVuZ3RoIC8gc2l6ZW9mKFVD
aGFyKTsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENo
YXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwg
bGVuZ3RoSW5VQ2hhcik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgg
JSBzaXplb2YoVUNoYXIpOyArK2kpCisgICAgICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyKHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKVtsZW5ndGhJblVDaGFyICogc2l6ZW9mKFVDaGFy
KSArIGldKTsKKworICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2
b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2hNZW1vcnkoZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplKHVuc2ln
bmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMo
aGFzaCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxpemVB
bmRNYXNrVG9wOEJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIC8vIFJlc2Vydmlu
ZyBzcGFjZSBmcm9tIHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9mIHRo
ZSBoYXNoJ3MKKyAgICAgICAgLy8gdmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxseSBt
YXNrcyBvdXQgdGhlIGhpZ2ggYml0cyBhbnl3YXkuCisgICAgICAgIHJldHVybiBhdm9pZFplcm8o
YXZhbGFuY2hlQml0cyhoYXNoKSAmIFN0cmluZ0hhc2hlcjo6bWFza0hhc2gpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgorICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoKGNvbnN0IFQgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nSGFz
aGVyOjpmaW5hbGl6ZShjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFydFZh
bHVlLCAwLCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25z
dCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6ZmluYWxpemVBbmRNYXNrVG9wOEJpdHMoY29tcHV0ZUxpdGVyYWxIYXNo
SW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291
bnQgLSAxKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29u
dmVydGVyKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7
CisgICAgfQorCisgICAgc3RhdGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIoTENoYXIgY2hhcmFj
dGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czModW5zaWdu
ZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPDwgMTApOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5j
aGVCaXRzMih1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJp
dHMzKGhhc2ggKyAoaGFzaCA+PiAxNSkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMSh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMyKGhhc2ggXiAoaGFzaCA8PCAyKSk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxh
bmNoZUJpdHMwKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hl
Qml0czEoaGFzaCArIChoYXNoID4+IDUpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0cyh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMwKGhhc2ggXiAoaGFzaCA8PCAzKSk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2Yg
MCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRl
ZCB5ZXQiLiBTZXR0aW5nIHRoZSBoaWdoIGJpdCBtYWludGFpbnMKKyAgICAvLyByZWFzb25hYmxl
IGZpZGVsaXR5IHRvIGEgaGFzaCBjb2RlIG9mIDAgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8geWll
bGQKKyAgICAvLyBleGFjdGx5IDAgd2hlbiBoYXNoIGxvb2t1cCBtYXNrcyBvdXQgdGhlIGhpZ2gg
Yml0cy4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZvaWRa
ZXJvKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCA/IGhhc2ggOiAo
MHg4MDAwMDAwMCA+PiBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgcHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9oYXNoOworCisgICAgICAgIC8vIEhhbmRsZSBlbmQgY2FzZS4KKyAg
ICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgeworICAgICAgICAgICAgcmVzdWx0ICs9
IG1fcGVuZGluZ0NoYXJhY3RlcjsKKyAgICAgICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMTE7
CisgICAgICAgICAgICByZXN1bHQgKz0gcmVzdWx0ID4+IDE3OworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBsaW1pdHMg
aXRzZWxmIHRvIHRoZSBvbGRlciwgbW9yZSBsaW1pdGVkIEMrKzExIGNvbnN0ZXhwciBjYXBhYmls
aXRpZXMsIHVzaW5nCisgICAgLy8gcmVjdXJzaW9uIGluc3RlYWQgb2YgbG9vcGluZywgZm9yIGV4
YW1wbGUuIFdvdWxkIGJlIG5pY2UgdG8gcmV3cml0ZSB0aGlzIGluIGEgc2ltcGxlciB3YXkKKyAg
ICAvLyBvbmNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIHN1cHBvcnQgY29tcGlsZXJzIGxpa2UgR0ND
IDQuOSB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydCBpdC4KKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMSh1bnNpZ25lZCBoYXNo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+PiAxNyk7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENo
YXJhY3RlcjAodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVX
aXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEoKGhhc2ggPDwgMTEpIF4gaGFzaCk7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFz
dENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBjaGFyYWN0ZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKGhhc2ggKyBj
aGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+
PiAxMSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUw
KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNlY29uZENoYXJhY3RlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxjdWxhdGUxKChoYXNoIDw8IDE2KSBeICgoc2Vjb25kQ2hhcmFjdGVyIDw8IDEx
KSBeIGhhc2gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1
bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJhY3RlciwgdW5zaWduZWQgc2Vj
b25kQ2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZTAoaGFzaCArIGZp
cnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoSW1wbCh1bnNpZ25lZCBoYXNoLCB1bnNp
Z25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChpbmRleCA9PSBsZW5ndGgpCisgICAgICAgICAgICA/IGhhc2gg
OiAoKGluZGV4ICsgMSkgPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBjYWxjdWxhdGVXaXRoUmVt
YWluaW5nTGFzdENoYXJhY3RlcihoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSkKKyAgICAgICAgICAg
IDogY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChjYWxjdWxhdGUoaGFzaCwgY2hhcmFjdGVyc1tpbmRl
eF0sIGNoYXJhY3RlcnNbaW5kZXggKyAxXSksIGluZGV4ICsgMiwgY2hhcmFjdGVycywgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2hhc2g7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdD
aGFyYWN0ZXI7CisgICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RyaW5nSGFzaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAppbmRleCA5ODA4YjEwNjM3MTZmOWQzMGViMDU3MjVlZWRiMTE0ODVhNjcyYTcwLi5jNjRl
YzYzOGZlMjViMTY3YTEwNjBhYjM0OTgwYTQxMWI2ZWYzNDkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaApAQCAtMjcsMTUgKzI3LDEzIEBACiAjaW5jbHVkZSA8dW5pY29kZS91c3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlG
YXN0UGF0aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NvbnZlcnNpb25Nb2RlLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9uLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmVjdG9yLmg+CiAKICNpZiBVU0UoQ0YpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aAppbmRleCBkMmI5OWJmMjVlM2M4MTAxZDM4Mzg1NDhlM2NkMGI5OWRhZDkwOTk2Li41YWJhMjY5
NDJlYTBlYWFiZTBlNWE0NjZkYjcyZTMxZWQ4MWNhMGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKQEAgLTM1Nyw2ICszNTcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsg
fQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIGlzTnVsbCgpID8gMCA6IGltcGwoKS0+aGFzaCgpOyB9CiAgICAgdW5zaWdu
ZWQgZXhpc3RpbmdIYXNoKCkgY29uc3QgeyByZXR1cm4gaXNOdWxsKCkgPyAwIDogaW1wbCgpLT5l
eGlzdGluZ0hhc2goKTsgfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdW5pY29kZS9VVEY4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAK
aW5kZXggYzBjOGQ4YjdkZTNiNjk5YmQwYTkyOTZjY2UxN2EzYzMzNmU2ZGRhYi4uYWI5ZDc5MmM4
OTY1NjZmMDc2ZTQyNDI1NWQ3YjBjMmVmYmE5YjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdW5pY29kZS9VVEY4LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
OCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiVVRGOC5oIgogCiAjaW5jbHVkZSAiQVNDSUlDVHlwZS5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBkMWFhZGRlNWM0OTEzNjMwYWVjOTA4MDQzODY0NGMxZWYyMTI5YTY1Li44NmMyNWFlZTVl
MDdjNTY2ZjFhYzYyNGY1NDYzMGI2N2VjMDc2OTc0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMTItMDMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwg
YW4gZWFzaWVyIHRvIHVzZSByZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBKRiBCYXN0aWVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dDogQWRkZWQgSGFzaGVyLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwOiBBZGRlZC4gQ29udGFpbnMg
dGVzdHMgb2YgdGhlIG5ldworICAgICAgICBXVEY6Okhhc2hlciBjbGFzcy4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHA6IEluY2x1ZGUgU3RyaW5n
SGFzaGVyLmggaW5zdGVhZCBvZgorICAgICAgICBIYXNoZXIuaC4KKwogMjAxNy0xMi0wMSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViRHJp
dmVyOiBhdXRvLWluc3RhbGwgcHl0ZXN0IGluc3RlYWQgb2YgaW1wb3J0aW5nIGl0IGZyb20gd3B0
IHRvb2xzIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggMmRlYjFl
YTNmYjViODNhNjExNWNjYjc1MTRmNzA1YzM3MmMwNzcwMy4uN2UzMWYzMDk3OGFlNDI3YjEwYTkx
ZmIxNGVmYjlmZTEzNDQzMDFhMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC0x
MDMsNiArMTAzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvSGFzaFNldC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvSGFzaGVy
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdD
b252ZXJzaW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9KU09OVmFs
dWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0xFQkRlY29kZXIuY3Bw
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM1Mzc5YzEyNmYyMWQ1M2Y1ZGJhMTM1MTQ3NGI0
YTU0ZWU1ODI1M2QuLjgzMjhjZWFhODc0MzYyNzNkNDYxMTE0NDU0NGM5ZDFjZGJiMjIwY2IgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MzIsNiArNTMyLDcgQEAKIAkJOTMxMENEMzgxRUY3
MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTBDRDM2MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5j
cHAgKi87IH07CiAJCTkzMjlBQTI5MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzI5
QUEyODFERTNGODFFMDAzQUJEMDcgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwICovOyB9OwogCQk5
MzJBRTUzRDFEMzcxMDQ3MDA1REZGQUYgLyogZm9jdXMtaW5wdXRzLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1NzVDNTUxRDMwMzY2
RTAwMEQ2MDREIC8qIGZvY3VzLWlucHV0cy5odG1sICovOyB9OworCQk5MzNENjMxRDFGQ0I3NjIw
MDAzMkVDRDYgLyogSGFzaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzM0Q2MzFCMUZDQjc2MTgwMDMyRUNENiAvKiBIYXNoZXIuY3BwICovOyB9
OwogCQk5MzYxMDAyOTE0REM5NUE3MDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2MTAw
MjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICovOyB9OwogCQk5MzYy
NUQyNzFDRDk3NDFDMDA2REMxRjEgLyogbGFyZ2UtdmlkZW8td2l0aG91dC1hdWRpby5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNjI1
RDI2MUNEOTczQUYwMDZEQzFGMSAvKiBsYXJnZS12aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi87
IH07CiAJCTkzNkY3MjgwMUNEN0Q5RUMwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlv
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM2RjcyN0UxQ0Q3RDlEMDAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRt
bCAqLzsgfTsKQEAgLTE0OTQsNiArMTQ5NSw3IEBACiAJCTkzMTBDRDM2MUVGNzA4RkIwMDUwRkZF
MCAvKiBGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMjlBQTI4MURFM0Y4
MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0QnJlYWtJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMzE0MDdCMTdCNDQxOTAwMEYwODNCMSAvKiBEaWROb3RIYW5kbGVLZXlE
b3duLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpZE5vdEhhbmRs
ZUtleURvd24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzNENjMxQjFGQ0I3
NjE4MDAzMkVDRDYgLyogSGFzaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhhc2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTc1QzU1
MUQzMDM2NkUwMDBENjA0RCAvKiBmb2N1cy1pbnB1dHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJmb2N1cy1pbnB1dHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzNjEwMDI4MTREQzk1N0IwMDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3RzLW9mLWlmcmFtZXMuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNjI1RDI2MUNEOTczQUYwMDZEQzFGMSAvKiBsYXJnZS12
aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibGFy
Z2UtdmlkZW8td2l0aG91dC1hdWRpby5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI2MDQsNiArMjYwNiw3IEBACiAJCQkJOTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1
bmN0aW9uLmNwcCAqLywKIAkJCQk4M0RCNzk2NzFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24u
Y3BwICovLAogCQkJCTdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291bnRlZFNldC5j
cHAgKi8sCisJCQkJOTMzRDYzMUIxRkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJ
CQkJMEJDRDgzMzQxNDg1N0NFNDAwRUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJE
RkY4MTVCREU1OTkwMDRGNjkxRCAvKiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3
NzUyMDBGNjFENUIgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0zMTY0
LDYgKzMxNjcsNyBAQAogCQkJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkJGRDI5NEMxRDVFNkMxRDAwOEVDOTY4IC8qIEhh
c2hDb3VudGVkU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzM0Q2MzFEMUZDQjc2MjAwMDMy
RUNENiAvKiBIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRDIxRDBBNTkwQzAw
RkVCQ0YzIC8qIEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRDQxRDBBNTkw
QzAwRkVCQ0YzIC8qIEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRTAxRDBB
NTkwQzAwRkVCQ0YzIC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
Y2RmMmVkNDNjZWY4MDhmZjA0MGNhODc5MDZiMzRmYjBjMWRkMWUyCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcApAQCAtMCwwICsxLDI0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGFycmF5
PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKKy8vIFRlc3QgYWdhaW5zdCBhY3R1YWwgaGFzaCB2YWx1ZXMuCisvLyBX
ZSBkb24ndCByZWFsbHkgZGVwZW5kIG9uIHNwZWNpZmljIHZhbHVlcywgYnV0IGl0IG1ha2VzIHRl
c3Rpbmcgc2ltcGxlci4KKy8vIENvdWxkIGluc3RlYWQgY29uc3RydWN0IHRlc3RzIHRoYXQgY2hl
Y2sgaGFzaGVzIGFnYWluc3QgZWFjaCBvdGhlci4KKy8vIE5vIGJpZyBkZWFsIHRvIHVwZGF0ZSBh
bGwgb2YgdGhlc2UgaWYgd2UgY2hhbmdlIHRoZSBoYXNoIGFsZ29yaXRobS4KKworY29uc3QgdWlu
dDMyX3QgZW1wdHlIYXNoID0gODI2MTAzMzRVOworY29uc3QgdWludDMyX3QgemVybzMyQml0SGFz
aCA9IDI0MjE4MzUwNFU7Citjb25zdCB1aW50MzJfdCB6ZXJvNjRCaXRIYXNoID0gNTc5MjM2MjYw
VTsKK2NvbnN0IHVpbnQzMl90IG9uZTMyQml0SGFzaCA9IDY5MDEzODE5MlU7Citjb25zdCB1aW50
MzJfdCBvbmU2NEJpdEhhc2ggPSAxNjIxNDU0OTExVTsKKworVEVTVChXVEYsIEhhc2hlcl9pbnRl
Z2VyKQoreworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgwVSkpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChmYWxzZSkpOworICAgIEVY
UEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxjaGFyPigwKSkp
OworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxp
bnQ4X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNv
bXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8z
MkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PHVpbnQxNl90PigwKSkpOworICAgIEVY
UEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgwKSk7CisKKyAgICBFWFBFQ1RfRVEo
emVybzY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMFVMTCkpOworICAgIEVYUEVDVF9FUSh6ZXJvNjRC
aXRIYXNoLCBjb21wdXRlSGFzaCgwTCkpOworICAgIEVYUEVDVF9FUSh6ZXJvNjRCaXRIYXNoLCBj
b21wdXRlSGFzaCgwVUwpKTsKKyAgICBFWFBFQ1RfRVEoemVybzY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goMExMKSk7CisKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgxVSkp
OworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHRydWUpKTsKKyAgICBF
WFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxjaGFyPigxKSkp
OworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGlu
dDhfdD4oMSkpKTsKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0
aWNfY2FzdDx1aW50OF90PigxKSkpOworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1
dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+KDEpKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0
SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8dWludDE2X3Q+KDEpKSk7CisgICAgRVhQRUNU
X0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2goMSkpOworCisgICAgRVhQRUNUX0VRKG9uZTY0
Qml0SGFzaCwgY29tcHV0ZUhhc2goMVVMTCkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gs
IGNvbXB1dGVIYXNoKDFMKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goMVVMKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMUxMKSk7
CisKKyAgICBFWFBFQ1RfRVEoMTc3MjM4MTY2MVUsIGNvbXB1dGVIYXNoKDB4N0ZVKSk7CisgICAg
RVhQRUNUX0VRKDE3NzIzODE2NjFVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDhfdD46Om1heCgpKSk7CisKKyAgICBFWFBFQ1RfRVEoMzczMDg3NzM0MFUsIGNvbXB1dGVIYXNo
KDB4ODBVKSk7CisgICAgRVhQRUNUX0VRKDM3MzA4NzczNDBVLCBjb21wdXRlSGFzaChzdGQ6Om51
bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMzc2NTEwNjM0
VSwgY29tcHV0ZUhhc2goMHhGRlUpKTsKKyAgICBFWFBFQ1RfRVEoMzc2NTEwNjM0VSwgY29tcHV0
ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1Rf
RVEoMzc2NTEwNjM0VSwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpKSk7CisgICAg
RVhQRUNUX0VRKDM3NjUxMDYzNFUsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDhfdD4oLTEp
KSk7CisKKyAgICBFWFBFQ1RfRVEoMjYyNjMyMjc4VSwgY29tcHV0ZUhhc2goMHg3RkZGVSkpOwor
ICAgIEVYUEVDVF9FUSgyNjI2MzIyNzhVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRz
PGludDE2X3Q+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDI5ODE5Nzg2NjFVLCBjb21wdXRl
SGFzaCgweDgwMDBVKSk7CisgICAgRVhQRUNUX0VRKDI5ODE5Nzg2NjFVLCBjb21wdXRlSGFzaChz
dGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptaW4oKSkpOworCisgICAgRVhQRUNUX0VRKDg5
NDk4NDE3OVUsIGNvbXB1dGVIYXNoKDB4RkZGRlUpKTsKKyAgICBFWFBFQ1RfRVEoODk0OTg0MTc5
VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSk7Cisg
ICAgRVhQRUNUX0VRKDg5NDk4NDE3OVUsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+
KC0xKSkpOworCisgICAgRVhQRUNUX0VRKDM0MzA2NzAzMjhVLCBjb21wdXRlSGFzaCgweDdGRkZG
RkZGVSkpOworICAgIEVYUEVDVF9FUSgzNDMwNjcwMzI4VSwgY29tcHV0ZUhhc2goc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgyNDI1NjgzNDI4
VSwgY29tcHV0ZUhhc2goMHg4MDAwMDAwMFUpKTsKKyAgICBFWFBFQ1RfRVEoMjQyNTY4MzQyOFUs
IGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNoKDB4RkZGRkZGRkZVKSk7CisgICAg
RVhQRUNUX0VRKDE5NTU1MTE0MzVVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNo
KC0xKSk7CisKKyAgICBFWFBFQ1RfRVEoMTI2NDUzMjYwNFUsIGNvbXB1dGVIYXNoKDB4ODAwMDAw
MDAwMDAwMDAwMFVMTCkpOworICAgIEVYUEVDVF9FUSgxMjY0NTMyNjA0VSwgY29tcHV0ZUhhc2go
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoMTI2
NDUzMjYwNFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46Om1pbigpKSk7
CisKKyAgICBFWFBFQ1RfRVEoMjk2MTA0OTgzNFUsIGNvbXB1dGVIYXNoKDB4N0ZGRkZGRkZGRkZG
RkZGRlVMTCkpOworICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwgY29tcHV0ZUhhc2goc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoMjk2MTA0OTgz
NFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46Om1heCgpKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMTEwNjMzMjA5MVUsIGNvbXB1dGVIYXNoKDB4RkZGRkZGRkZGRkZGRkZGRlVM
TCkpOworICAgIEVYUEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpKSk7CisgICAgRVhQRUNUX0VRKDExMDYzMzIwOTFVLCBj
b21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKSkpOwor
ICAgIEVYUEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhhc2goLTFMKSk7CisgICAgRVhQRUNU
X0VRKDExMDYzMzIwOTFVLCBjb21wdXRlSGFzaCgtMUxMKSk7Cit9CisKK1RFU1QoV1RGLCBIYXNo
ZXJfZmxvYXRpbmdQb2ludCkKK3sKKyAgICBFWFBFQ1RfRVEoemVybzY0Qml0SGFzaCwgY29tcHV0
ZUhhc2goMC4wKSk7CisgICAgRVhQRUNUX0VRKDEyNjQ1MzI2MDRVLCBjb21wdXRlSGFzaCgtMC4w
KSk7IC8vIE5vdGUsIG5vdCBzYW1lIGFzIGhhc2ggb2YgMC4wLgorICAgIEVYUEVDVF9FUShvbmU2
NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZGVub3Jt
X21pbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjI3ODM5OTk4MFUsIGNvbXB1dGVIYXNoKDEuMCkp
OworICAgIEVYUEVDVF9FUSgzODcwNjg5Mjk3VSwgY29tcHV0ZUhhc2goLTEuMCkpOworCisgICAg
RVhQRUNUX0VRKDMwMTYzNDQ0MTRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46Om1pbigpKSk7CisgICAgRVhQRUNUX0VRKDE1OTc2NjI5ODJVLCBjb21wdXRlSGFzaChz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjUw
MTcwMjU1NlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bG93ZXN0
KCkpKTsKKyAgICBFWFBFQ1RfRVEoMjIxNDQzOTgwMlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjY3ODA4Njc1
OVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkp
KTsKKyAgICBFWFBFQ1RfRVEoMjMwNDQ0NTM5M1UsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOworICAgIEVYUEVDVF9FUSgyMjMyNTkzMzExVSwg
Y29tcHV0ZUhhc2goLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOwor
CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKDAuMGYpKTsKKyAgICBF
WFBFQ1RfRVEoMjQyNTY4MzQyOFUsIGNvbXB1dGVIYXNoKC0wLjBmKSk7IC8vIE5vdGUsIG5vdCBz
YW1lIGFzIGhhc2ggb2YgMC4wZi4KKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRl
SGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZGVub3JtX21pbigpKSk7CisKKyAgICBF
WFBFQ1RfRVEoMTA4MTU3NTk2NlUsIGNvbXB1dGVIYXNoKDEuMGYpKTsKKyAgICBFWFBFQ1RfRVEo
MzI2MjA5MzE4OFUsIGNvbXB1dGVIYXNoKC0xLjBmKSk7CisKKyAgICBFWFBFQ1RfRVEoMzE3MDE4
OTUyNFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkpOwor
ICAgIEVYUEVDVF9FUSgxMTAyMTI5OVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDMyMTIwNjk1MDZVLCBjb21wdXRlSGFz
aChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bG93ZXN0KCkpKTsKKyAgICBFWFBFQ1RfRVEo
MTMwODc4NDUwNlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNp
bG9uKCkpKTsKKworICAgIEVYUEVDVF9FUSgyNzUxMjg4NTExVSwgY29tcHV0ZUhhc2goc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpKSk7CisgICAgRVhQRUNUX0VRKDM0NTcw
NDkyNTZVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkpOworICAgIEVYUEVDVF9FUSg0MjA4ODczOTcxVSwgY29tcHV0ZUhhc2goLXN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSk7Cit9CisKK1RFU1QoV1RGLCBIYXNoZXJfbXVs
dGlwbGUpCit7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goKSk7CisgICAg
RVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZW1wdHlIYXNoLCBjb21wdXRlSGFzaChzdGQ6OmFycmF5PGludCwgMD4geyB9
KSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4geyB9
KSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludCwgMT4g
eyB9KSk7CisKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjph
cnJheTxpbnQsIDE+IHsgeyAwIH0gfSkpOworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBj
b21wdXRlSGFzaChWZWN0b3I8aW50PiB7IDAgfSkpOworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRI
YXNoLCBjb21wdXRlSGFzaChWZWN0b3I8aW50LCAxPiB7IDAgfSkpOworICAgIEVYUEVDVF9FUSh6
ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om9wdGlvbmFsPGludD4geyBzdGQ6Om51bGxv
cHQgfSkpOworCisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMSwgMCkp
OworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6bWFrZV90dXBs
ZSgxLCAwKSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6
bWFrZV9wYWlyKDEsIDApKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goc3RkOjphcnJheTxpbnQsIDI+IHsgeyAxLCAwIH0gfSkpOworICAgIEVYUEVDVF9FUShvbmU2
NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHsgMSwgMCB9KSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0
SGFzaCwgY29tcHV0ZUhhc2goc3RkOjpvcHRpb25hbDxpbnQ+IHsgMCB9KSk7CisgICAgRVhQRUNU
X0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4geyB7IDEsIDAgfSB9KSk7
CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludCwgMT4g
eyB7IDEsIDAgfSB9KSk7CisKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFz
aChzdGQ6Om1ha2VfdHVwbGUoMSksIHN0ZDo6YXJyYXk8aW50LCAxPiB7IHsgMCB9IH0pKTsKKyAg
ICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfdHVwbGUoc3Rk
OjptYWtlX3R1cGxlKDEpLCBzdGQ6OmFycmF5PGludCwgMT4geyB7IDAgfSB9KSkpOworCisgICAg
RVhQRUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaCgxLCAyLCAzLCA0KSk7CisgICAgRVhQ
RUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfdHVwbGUoMSwgMiwgMywg
NCkpKTsKKyAgICBFWFBFQ1RfRVEoMTY1MjM1MjMyMVUsIGNvbXB1dGVIYXNoKHN0ZDo6bWFrZV9w
YWlyKHN0ZDo6bWFrZV9wYWlyKDEsIDIpLCBzdGQ6Om1ha2VfcGFpcigzLCA0KSkpKTsKK30KKwor
c3RydWN0IEhhc2hlckFkZEN1c3RvbTEgeyB9OworCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwg
Y29uc3QgSGFzaGVyQWRkQ3VzdG9tMSYpCit7CisgICAgYWRkKGhhc2hlciwgMSwgMiwgMywgNCk7
Cit9CisKK3N0cnVjdCBIYXNoZXJBZGRDdXN0b20yIHsgfTsKKwordm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IEhhc2hlckFkZEN1c3RvbTImKQoreworICAgIGFkZChoYXNoZXIsIHsgMSwg
MiwgMywgNCB9KTsKK30KKworVEVTVChXVEYsIEhhc2hlcl9jdXN0b20pCit7CisgICAgRVhQRUNU
X0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChIYXNoZXJBZGRDdXN0b20xIHsgfSkpOworICAg
IEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goSGFzaGVyQWRkQ3VzdG9tMiB7IH0p
KTsKK30KKworc3RydWN0IEhhc2hlckFkZFR1cGxlTGlrZUNsYXNzMSB7CisgICAgc3RkOjphcnJh
eTxpbnQsIDQ+IGFycmF5IHsgeyAxLCAyLCAzLCA0IH0gfTsKKyAgICB0ZW1wbGF0ZTxzaXplX3Qg
aT4gaW50IGdldCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PGk+KGFycmF5KTsgfQorfTsKKwor
c3RydWN0IEhhc2hlckFkZFR1cGxlTGlrZUNsYXNzMiB7CisgICAgc3RkOjphcnJheTxpbnQsIDQ+
IGFycmF5IHsgeyAxLCAyLCAzLCA0IH0gfTsKK307CisKK30KKworbmFtZXNwYWNlIHN0ZCB7CisK
Ky8vIEZJWE1FOiBEb2N1bWVudGF0aW9uIGF0IGNwcHJlZmVyZW5jZS5jcHAgc2F5cyBzdGQ6OnR1
cGxlX3NpemUgaXMgYSBzdHJ1Y3QsIGJ1dCBpdCdzIGEgY2xhc3MgaW4gY3VycmVudCBtYWNPUyB0
b29scy4KKy8vIEZJWE1FOiBJdCdzIGluZWxlZ2FudCB0byBpbmplY3QgdGhpcyBpbnRvIHRoZSBz
dGQgbmFtZXNwYWNlLiBJcyB0aGF0IHJlYWxseSBob3cgYSB0dXBsZS1saWtlIGNsYXNzIG5lZWRz
IHRvIGJlIGRlZmluZWQ/CisvLyBGSVhNRTogVGhpcyBpcyBzbyBpbmNvbnZlbmllbnQgdGhhdCBJ
IGFtIG5vdCBzdXJlIGl0J3Mgc29tZXRoaW5nIHdlIHdhbnQgdG8gZG8gZm9yIGxvdHMgb2YgY2xh
c3NlcyBpbiBXZWJLaXQuCit0ZW1wbGF0ZTw+IGNsYXNzIHN0ZDo6dHVwbGVfc2l6ZTxUZXN0V2Vi
S2l0QVBJOjpIYXNoZXJBZGRUdXBsZUxpa2VDbGFzczE+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxf
Y29uc3RhbnQ8c2l6ZV90LCBzdGQ6OnR1cGxlX3NpemU8ZGVjbHR5cGUoVGVzdFdlYktpdEFQSTo6
SGFzaGVyQWRkVHVwbGVMaWtlQ2xhc3MxOjphcnJheSk+Ojp2YWx1ZT4geyB9OworCit0ZW1wbGF0
ZTw+IGNsYXNzIHN0ZDo6dHVwbGVfc2l6ZTxUZXN0V2ViS2l0QVBJOjpIYXNoZXJBZGRUdXBsZUxp
a2VDbGFzczI+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzdGQ6OnR1
cGxlX3NpemU8ZGVjbHR5cGUoVGVzdFdlYktpdEFQSTo6SGFzaGVyQWRkVHVwbGVMaWtlQ2xhc3My
OjphcnJheSk+Ojp2YWx1ZT4geyB9OworCit9CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
KworLy8gRklYTUU6IElzIGl0IE9LIGZvciB0aGUgZ2V0IHRvIGJlIGluIHRoZSBjbGFzcydzIG5h
bWVzcGFjZSBhbmQgcmVseSBvbiBhcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwPworLy8gT3IgZG9l
cyB0aGlzIGZ1bmN0aW9uIHRlbXBsYXRlIG5lZWQgdG8gYmUgbW92ZWQgaW50byB0aGUgc3RkIG5h
bWVzcGFjZSBsaWtlIHRoZSB0dXBsZV9zaXplIHNwZWNpYWxpemF0aW9uPwordGVtcGxhdGU8c2l6
ZV90IGk+IGludCBnZXQoY29uc3QgSGFzaGVyQWRkVHVwbGVMaWtlQ2xhc3MyJiBvYmplY3QpCit7
CisgICAgcmV0dXJuIGdldDxpPihvYmplY3QuYXJyYXkpOworfQorCitURVNUKFdURiwgSGFzaGVy
X3R1cGxlTGlrZSkKK3sKKyNpZiAwIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdHVwbGUtbGlr
ZSBjbGFzc2VzLgorICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goSGFzaGVy
QWRkVHVwbGVMaWtlQ2xhc3MxIHsgfSkpOworICAgIEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29t
cHV0ZUhhc2goSGFzaGVyQWRkVHVwbGVMaWtlQ2xhc3MyIHsgfSkpOworI2VuZGlmCit9CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TdHJpbmdIYXNoZXIuY3BwCmluZGV4IDU5ODViMDI2YTgxMWQ0YjJlNTlkNGMwMDYwNDI0
NmRkNTQwZDkyNTIuLmEwOWY0MWEzODQ5MDhkOTNiOTdiNDRlMmRjMjlhZjkwZDljN2ZiNDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcApAQCAt
MjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGFz
aGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328302</attachid>
            <date>2017-12-03 13:50:19 -0800</date>
            <delta_ts>2017-12-03 13:50:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180318-20171203135018.patch</filename>
            <type>text/plain</type>
            <size>55824</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA5YmU0YzQ1Y2Q0NmQxODYyOTU2OWI3
YzdhNTBjYWVkZTJhODk3YjAuLmNmNmM0ZGMyNThhYWJkOTFkOWQ3ODBmMmJkYWI5NTJiNTU5Y2Fi
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTctMTItMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwgYW4gZWFzaWVyIHRvIHVzZSBy
ZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBK
RiBCYXN0aWVuLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFk
ZGVkIEhhc2hlci5oLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDogRGl0dG8uCisKKyAg
ICAgICAgKiB3dGYvRm9yd2FyZC5oOiBBZGRlZCBIYXNoZXIgYW5kIFRleHRTdHJlYW0uCisKKyAg
ICAgICAgKiB3dGYvSGFzaGVyLmg6IE1vdmVkIFN0cmluZ0hhc2hlciBpbnRvIGEgc2VwYXJhdGUg
aGVhZGVyLiBBZGRlZCBIYXNoZXIuCisgICAgICAgIE1hcmtlZCBJbnRlZ2VySGFzaGVyIGRlcHJl
Y2F0ZWQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDogSW5jbHVkZSBTdHJpbmdI
YXNoZXIuaCBpbnN0ZWFkIG9mIEhhc2hlci5oLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hh
c2guaDogRGl0dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoZXIuaDogQWRkZWQu
IE1vdmVkIFN0cmluZ0hhc2hlciBoZXJlIGZyb20gSGFzaGVyLmguCisKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdJbXBsLmg6IEluY2x1ZGUgU3RyaW5nSGFzaGVyLmggaW5zdGVhZCBvZiBIYXNo
ZXIuaC4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOiBBZGRlZCBhIGhhc2ggZnVu
Y3Rpb24uIFRoaXMgd2FzIHVzZWZ1bCBpbiBzb21lCisgICAgICAgIGFkb3B0aW9uIEkgd2FzIGRv
aW5nIGluIFdlYkNvcmUsIG5vdCBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICog
d3RmL3VuaWNvZGUvVVRGOC5jcHA6IEluY2x1ZGUgU3RyaW5nSGFzaGVyLmggaW5zdGVhZCBvZiBI
YXNoZXIuaC4KKwogMjAxNy0xMi0wMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRmFjdG9yIG91dCB0aGUgImRhdGFiYXNlVGFza1F1ZXVlIiBwYXJ0cyBvZiBJ
REJTZXJ2ZXIgaW50byBzb21ldGhpbmcgcmV1c2FibGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyZGMyNDQ4YTFjNmViNjhmZGJjMTA0YjhlMTcxNzAzNzVh
ZTlmZWIxLi5kODliMmZiNWE4MmQ0M2FlOGM4ZDc0YTk1YjRlNGFhNDBkMGQwNThiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3OCw2ICszNzgsNyBAQAog
CQk4M0YyQkFERTFDRjk1MjRFMDAzRTk5QzMgLyogRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODNGQkE5MzExOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlQ2FzdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZGNDZGNUYxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5MzNENjMxOTFGQ0I2QUI5MDAzMkVDRDYgLyogU3RyaW5nSGFzaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmll
d09iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTdHJpbmdW
aWV3T2JqQy5tbTsgcGF0aCA9IG1hYy9TdHJpbmdWaWV3T2JqQy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM5MzRCRDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdWaWV3Q0YuY3Bw
OyBwYXRoID0gY2YvU3RyaW5nVmlld0NGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExDaGFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTQxLDYgKzExNDIsNyBAQAogCQkJCUE4QTQ3MzI2MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdD
b25jYXRlbmF0ZS5oICovLAogCQkJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaCAqLywKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIzRkYgLyog
U3RyaW5nSGFzaC5oICovLAorCQkJCTkzM0Q2MzE5MUZDQjZBQjkwMDMyRUNENiAvKiBTdHJpbmdI
YXNoZXIuaCAqLywKIAkJCQlBOEE0NzMyODE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5j
cHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywK
IAkJCQkwRjBGNTI2OTFGNDIxRkY4MDA0QTQ1MkMgLyogU3RyaW5nTWFsbG9jLmNwcCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKaW5kZXggNmUwYzBlYTljMzdlZGIzMjdiM2FlYTExM2QzNjIyNzBmMzUw
NGZjNC4uMDJkYTc4MmQ2YTdlODIxMmRjZmNjNmQzMGMyODI3YjQ4YTU0NDI1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTE4Niw2ICsxODYsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICB0ZXh0
L1N0cmluZ0J1ZmZlci5oCiAgICAgdGV4dC9TdHJpbmdDb21tb24uaAogICAgIHRleHQvU3RyaW5n
SGFzaC5oCisgICAgdGV4dC9TdHJpbmdIYXNoZXIuaAogICAgIHRleHQvU3RyaW5nSW1wbC5oCiAg
ICAgdGV4dC9TdHJpbmdNYWxsb2MuaAogICAgIHRleHQvU3RyaW5nVmVjdG9yLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApp
bmRleCBmM2RjY2I4NjcwYTEyZjRkYzYzYmVmYWU0NWRlMDUzOTdlZjU2OGQ3Li4xNDdhNTc4Mzdk
YTVjYjA3MDVkMzNlN2I4ODcxMDUxZWU5MzI0MGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCw2ICszNCw3
IEBAIGNsYXNzIEJpbmFyeVNlbWFwaG9yZTsKIGNsYXNzIENTdHJpbmc7CiBjbGFzcyBDcmFzaE9u
T3ZlcmZsb3c7CiBjbGFzcyBGdW5jdGlvbkRpc3BhdGNoZXI7CitjbGFzcyBIYXNoZXI7CiBjbGFz
cyBPcmRpbmFsTnVtYmVyOwogY2xhc3MgUHJpbnRTdHJlYW07CiBjbGFzcyBTSEExOwpAQCAtNDIs
NiArNDMsNyBAQCBjbGFzcyBTdHJpbmdCdWlsZGVyOwogY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNz
IFN0cmluZ1ZpZXc7CiBjbGFzcyBUZXh0UG9zaXRpb247CitjbGFzcyBUZXh0U3RyZWFtOwogCiBz
dHJ1Y3QgRmFzdE1hbGxvYzsKIApAQCAtNjksMTQgKzcxLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlQXJnPjo6SGFz
aCwgdHlwCiB1c2luZyBXVEY6OkF0b21pY1N0cmluZzsKIHVzaW5nIFdURjo6QXRvbWljU3RyaW5n
SW1wbDsKIHVzaW5nIFdURjo6QmluYXJ5U2VtYXBob3JlOwotdXNpbmcgV1RGOjpDb21wbGV0aW9u
SGFuZGxlcjsKIHVzaW5nIFdURjo6Q1N0cmluZzsKK3VzaW5nIFdURjo6Q29tcGxldGlvbkhhbmRs
ZXI7CiB1c2luZyBXVEY6OkV4cGVjdGVkOwogdXNpbmcgV1RGOjpGdW5jdGlvbjsKIHVzaW5nIFdU
Rjo6RnVuY3Rpb25EaXNwYXRjaGVyOwogdXNpbmcgV1RGOjpIYXNoQ291bnRlZFNldDsKIHVzaW5n
IFdURjo6SGFzaE1hcDsKIHVzaW5nIFdURjo6SGFzaFNldDsKK3VzaW5nIFdURjo6SGFzaGVyOwog
dXNpbmcgV1RGOjpMYXp5TmV2ZXJEZXN0cm95ZWQ7CiB1c2luZyBXVEY6Ok5ldmVyRGVzdHJveWVk
OwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7CkBAIC05MSw1ICs5NCw2IEBAIHVzaW5nIFdURjo6U3Ry
aW5nQnVpbGRlcjsKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKIHVzaW5nIFdURjo6U3RyaW5nVmll
dzsKIHVzaW5nIFdURjo6VGV4dFBvc2l0aW9uOwordXNpbmcgV1RGOjpUZXh0U3RyZWFtOwogdXNp
bmcgV1RGOjpWYXJpYW50OwogdXNpbmcgV1RGOjpWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCmluZGV4IGE4ZTY5MGRh
YTkyN2I0MjBlODljZTdkNzljODc1MjdmZGUwOWY1Y2UuLjhhMDk0M2VlY2NhZDQyY2ZiZGE2Njkx
NDc2OWM3YmUxYzZhZTBkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNS0yMDA2LCAyMDA4LCAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDM3MSAr
MTgsMTQ3IEBACiAgKgogICovCiAKLSNpZm5kZWYgV1RGX0hhc2hlcl9oCi0jZGVmaW5lIFdURl9I
YXNoZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVy
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAot
Ly8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKLQotLy8gTENo
YXIgZGF0YSBpcyBpbnRlcnByZXRlZCBhcyBMYXRpbi0xLWVuY29kZWQgKHplcm8gZXh0ZW5kZWQg
dG8gMTYgYml0cykuCi0KLS8vIE5PVEU6IFRoZSBoYXNoIGNvbXB1dGF0aW9uIGhlcmUgbXVzdCBz
dGF5IGluIHN5bmMgd2l0aCB0aGUgY3JlYXRlX2hhc2hfdGFibGUgc2NyaXB0IGluCi0vLyBKYXZh
U2NyaXB0Q29yZSBhbmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29yZS4K
LQotLy8gR29sZGVuIHJhdGlvLiBBcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGlu
ZyBhbGwgemVyb3MgdG8gYSBoYXNoIHZhbHVlIG9mIHplcm8uCi1zdGF0aWMgY29uc3RleHByIGNv
bnN0IHVuc2lnbmVkIHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlID0gMHg5RTM3NzlCOVU7Ci0KLWNs
YXNzIFN0cmluZ0hhc2hlciB7CisvLyBEZXByZWNhdGVkLiBVc2UgSGFzaGVyIGluc3RlYWQuCitj
bGFzcyBJbnRlZ2VySGFzaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0
IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRv
IHVzZSBhcyBmbGFncy4KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIG1hc2tI
YXNoID0gKDFVIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIGZsYWdDb3VudCkpIC0gMTsKLQot
ICAgIFN0cmluZ0hhc2hlcigpCi0gICAgICAgIDogbV9oYXNoKHN0cmluZ0hhc2hpbmdTdGFydFZh
bHVlKQotICAgICAgICAsIG1faGFzUGVuZGluZ0NoYXJhY3RlcihmYWxzZSkKLSAgICAgICAgLCBt
X3BlbmRpbmdDaGFyYWN0ZXIoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhlIGhhc2hlciBo
YXNoZXMgdHdvIGNoYXJhY3RlcnMgYXQgYSB0aW1lLCBhbmQgdGh1cyBhbiAiYWxpZ25lZCIgaGFz
aGVyIGlzIG9uZQotICAgIC8vIHdoZXJlIGFuIGV2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGF2
ZSBiZWVuIGFkZGVkLiBDYWxsZXJzIHRoYXQgYWx3YXlzIGFkZAotICAgIC8vIGNoYXJhY3RlcnMg
dHdvIGF0IGEgdGltZSBjYW4gdXNlIHRoZSAiYXNzdW1pbmcgYWxpZ25lZCIgZnVuY3Rpb25zLgot
ICAgIHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChVQ2hhciBhLCBVQ2hhciBiKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotICAgICAgICBt
X2hhc2ggKz0gYTsKLSAgICAgICAgbV9oYXNoID0gKG1faGFzaCA8PCAxNikgXiAoKGIgPDwgMTEp
IF4gbV9oYXNoKTsKLSAgICAgICAgbV9oYXNoICs9IG1faGFzaCA+PiAxMTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICBpZiAo
bV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0
ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9w
ZW5kaW5nQ2hhcmFjdGVyLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9wZW5kaW5nQ2hhcmFjdGVyID0gY2hhcmFjdGVyOwotICAgICAgICBt
X2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYWRkQ2hhcmFj
dGVycyhVQ2hhciBhLCBVQ2hhciBiKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0No
YXJhY3RlcikgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIG1faGFzUGVuZGlu
Z0NoYXJhY3RlciA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgYSk7Ci0gICAgICAgICAgICBtX3BlbmRp
bmdDaGFyYWN0ZXIgPSBiOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIG1faGFz
UGVuZGluZ0NoYXJhY3RlciA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoYSwgYik7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lk
IGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpOwotCi0g
ICAgICAgIGJvb2wgcmVtYWluZGVyID0gbGVuZ3RoICYgMTsKLSAgICAgICAgbGVuZ3RoID4+PSAx
OwotCi0gICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewotICAgICAgICAgICAgYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoZGF0YVswXSksIENvbnZlcnRlcihkYXRhWzFdKSk7
Ci0gICAgICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVtYWlu
ZGVyKQotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKENvbnZlcnRlcigqZGF0YSkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxp
Z25lZChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0
aCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQp
PiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKLQotICAgICAgICB3aGls
ZSAoVCBhID0gKmRhdGErKykgewotICAgICAgICAgICAgVCBiID0gKmRhdGErKzsKLSAgICAgICAg
ICAgIGlmICghYikgewotICAgICAgICAgICAgICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoYSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRk
Q2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChDb252ZXJ0ZXIoYSksIENvbnZlcnRlcihiKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQoY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFkZENo
YXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFk
ZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX2hhc1Bl
bmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZh
bHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdD
aGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0YSsrKSk7Ci0gICAgICAgICAgICAtLWxlbmd0aDsKLSAg
ICAgICAgfQotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRl
cj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgYWRkQ2hhcmFjdGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9p
ZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQ
ZW5kaW5nQ2hhcmFjdGVyICYmICpkYXRhKSB7Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQo
bV9wZW5kaW5nQ2hhcmFjdGVyLCBDb252ZXJ0ZXIoKmRhdGErKykpOwotICAgICAgICB9Ci0gICAg
ICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3Qg
VCogZGF0YSkKLSAgICB7Ci0gICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVmYXVsdENvbnZlcnRl
cj4oZGF0YSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgp
IGNvbnN0CisgICAgdm9pZCBhZGQodWludDMyX3QgaW50ZWdlcikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyhwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsK
KyAgICAgICAgbV91bmRlcmx5aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQo
aW50ZWdlciwgaW50ZWdlciA+PiAxNik7CiAgICAgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gZmluYWxpemUocHJvY2Vzc1BlbmRpbmdDaGFyYWN0
ZXIoKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVy
KFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hl
cjsKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVy
dGVyPihkYXRhLCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9wOEJp
dHNNYXNrZWQoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252
ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25z
dCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKLSAgICAgICAg
aGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsK
LSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoV2l0aFRvcDhCaXRzTWFza2VkKCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5k
TWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0Q29udmVydGVy
PihkYXRhLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzPFQsIGRlZmF1bHRD
b252ZXJ0ZXI+KGRhdGEpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFy
IENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0g
ICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4o
ZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hl
ciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQs
IENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChj
b25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1cm4gY29t
cHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3Qg
VCogZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29u
dmVydGVyPihkYXRhKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBzaXplX3Qg
bGVuZ3RoSW5VQ2hhciA9IGxlbmd0aCAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZ0hh
c2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVk
KHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YSksIGxlbmd0aEluVUNoYXIpOwotCi0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoICUgc2l6ZW9mKFVDaGFyKTsgKytpKQot
ICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSlbbGVuZ3RoSW5VQ2hhciAqIHNpemVvZihVQ2hhcikgKyBpXSk7Ci0KLSAgICAgICAgcmV0
dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4g
c3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBoYXNoTWVtb3J5KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplQW5kTWFza1RvcDhCaXRzKHVuc2lnbmVk
IGhhc2gpCi0gICAgewotICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBi
aXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCi0gICAgICAgIC8vIHZh
bHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMg
YW55d2F5LgotICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMoaGFzaCkgJiBT
dHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGNvbXB1dGVMaXRlcmFsSGFzaChjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRd
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6ZmluYWxpemUoY29tcHV0ZUxp
dGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hh
cmFjdGVyQ291bnQgLSAxKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21w
dXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCAoJmNoYXJhY3RlcnMpW2NoYXJh
Y3RlckNvdW50XSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmZpbmFsaXpl
QW5kTWFza1RvcDhCaXRzKGNvbXB1dGVMaXRlcmFsSGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0
VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSkpOworICAgICAgICByZXR1
cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgVUNoYXIgZGVmYXVsdENv
bnZlcnRlcihMQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2hhcmFjdGVy
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBh
dmFsYW5jaGVCaXRzMyh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc2gg
XiAoaGFzaCA8PCAxMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMyKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAg
ICByZXR1cm4gYXZhbGFuY2hlQml0czMoaGFzaCArIChoYXNoID4+IDE1KSk7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMx
KHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czIoaGFz
aCBeIChoYXNoIDw8IDIpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czAodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMShoYXNoICsgKGhhc2ggPj4gNSkpOwotICAgIH0KLQot
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRz
KHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czAoaGFz
aCBeIChoYXNoIDw8IDMpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGF2b2lkcyBldmVyIHJldHVy
bmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KLSAgICAvLyBzaWdu
YWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0IG1haW50YWlu
cwotICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNvZGUgb2YgMCBiZWNhdXNl
IGl0IGlzIGxpa2VseSB0byB5aWVsZAotICAgIC8vIGV4YWN0bHkgMCB3aGVuIGhhc2ggbG9va3Vw
IG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAwMDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpIGNvbnN0
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2hhc2g7Ci0KLSAgICAgICAgLy8g
SGFuZGxlIGVuZCBjYXNlLgotICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgKz0gbV9wZW5kaW5nQ2hhcmFjdGVyOwotICAgICAgICAgICAgcmVz
dWx0IF49IHJlc3VsdCA8PCAxMTsKLSAgICAgICAgICAgIHJlc3VsdCArPSByZXN1bHQgPj4gMTc7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBD
KysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2luZwotICAgIC8vIHJlY3Vyc2lvbiBpbnN0
ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3VsZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhp
cyBpbiBhIHNpbXBsZXIgd2F5Ci0gICAgLy8gb25jZSB3ZSBubyBsb25nZXIgbmVlZCB0byBzdXBw
b3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENo
YXJhY3RlcjEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoICsgKGhh
c2ggPj4gMTcpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAg
ICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIxKChoYXNoIDw8
IDExKSBeIGhhc2gpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2Fs
Y3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIodW5zaWduZWQgaGFzaCwgdW5zaWduZWQg
Y2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdM
YXN0Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFjdGVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTEpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzZWNvbmRDaGFy
YWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlMSgoaGFzaCA8PCAxNikgXiAo
KHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7Ci0gICAgfQorICAgIFN0cmluZ0hhc2hl
ciBtX3VuZGVybHlpbmdIYXNoZXI7Cit9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjYWxjdWxhdGUodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgZmlyc3RDaGFyYWN0ZXIsIHVuc2ln
bmVkIHNlY29uZENoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxjdWxhdGUwKGhh
c2ggKyBmaXJzdENoYXJhY3Rlciwgc2Vjb25kQ2hhcmFjdGVyKTsKLSAgICB9Cit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goY29uc3QgVHlwZXMmLi4uKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIE90aGVyVHlwZXM+IHVpbnQzMl90IGNv
bXB1dGVIYXNoKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiwgc3RkOjppbml0aWFsaXplcl9saXN0
PE90aGVyVHlwZXM+Li4uKTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0
ZUxpdGVyYWxIYXNoSW1wbCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorY2xhc3MgSGFzaGVyIHsKK3B1YmxpYzoK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gZnJpZW5kIHVpbnQzMl90IGNvbXB1dGVI
YXNoKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gKGluZGV4
ID09IGxlbmd0aCkKLSAgICAgICAgICAgID8gaGFzaCA6ICgoaW5kZXggKyAxKSA9PSBsZW5ndGgp
Ci0gICAgICAgICAgICA/IGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKGhhc2gs
IGNoYXJhY3RlcnNbaW5kZXhdKQotICAgICAgICAgICAgOiBjb21wdXRlTGl0ZXJhbEhhc2hJbXBs
KGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSwgY2hhcmFjdGVyc1tpbmRleCArIDFd
KSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBIYXNoZXIgaGFzaGVy
OworICAgICAgICBhZGQoaGFzaGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUodmFsdWVzLi4uKSk7
CisgICAgICAgIHJldHVybiBoYXNoZXIubV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBtX2hhc2g7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdDaGFyYWN0ZXI7
Ci0gICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOwotfTsKLQotY2xhc3MgSW50ZWdlckhhc2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBhZGQodW5zaWduZWQgaW50ZWdlcikKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiBmcmllbmQgdWludDMyX3QgY29t
cHV0ZUhhc2goc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGxpc3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxPdGhlclR5cGVzPi4uLiBvdGhlckxpc3RzKQogICAgIHsKLSAgICAgICAgbV91bmRlcmx5
aW5nSGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoaW50ZWdlciwgaW50ZWdlciA+
PiAxNik7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAgIGFkZChoYXNoZXIsIGxpc3Qp
OworICAgICAgICBhZGQoaGFzaGVyLCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUob3RoZXJMaXN0cy4u
LikpOworICAgICAgICByZXR1cm4gaGFzaGVyLm1fdW5kZXJseWluZ0hhc2hlci5oYXNoKCk7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyPiBmcmllbmQgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVk
PFVuc2lnbmVkSW50ZWdlcj46OnZhbHVlICYmIHNpemVvZihVbnNpZ25lZEludGVnZXIpIDw9IHNp
emVvZih1aW50MzJfdCksIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgVW5zaWduZWRJbnRlZ2Vy
IGludGVnZXIpCiAgICAgewotICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nSGFzaGVyLmhhc2go
KTsKKyAgICAgICAgLy8gV2UgY2FuIGNvbnNpZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNv
ZGUgcGF0aCBmb3IgaGFzaGluZyBib29sZWFucyBvciBpbmRpdmlkdWFsIGJ5dGVzIGlmIG5lZWRl
ZC4KKyAgICAgICAgLy8gV2UgY2FuIGNvbnNpZGVyIGFkZGluZyBhIG1vcmUgZWZmaWNpZW50IGNv
ZGUgcGF0aCBmb3IgaGFzaGluZyAxNi1iaXQgdmFsdWVzIGlmIG5lZWRlZCwgcGVyaGFwcyB1c2lu
ZyBhZGRDaGFyYWN0ZXIsCisgICAgICAgIC8vIGJ1dCBnZXR0aW5nIHJpZCBvZiAiYXNzdW1pbmcg
YWxpZ25lZCIgd291bGQgbWFrZSBoYXNoaW5nIHZhbHVlcyAzMi1iaXQgb3IgbGFyZ2VyIHNsb3dl
ci4KKyAgICAgICAgdWludDMyX3Qgc2l6ZWRJbnRlZ2VyID0gaW50ZWdlcjsKKyAgICAgICAgaGFz
aGVyLm1fdW5kZXJseWluZ0hhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKHNpemVk
SW50ZWdlciwgc2l6ZWRJbnRlZ2VyID4+IDE2KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nSGFzaGVyIG1fdW5kZXJseWluZ0hhc2hlcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFVu
c2lnbmVkSW50ZWdlcj4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVk
SW50ZWdlcj46OnZhbHVlICYmIHNpemVvZihVbnNpZ25lZEludGVnZXIpID09IHNpemVvZih1aW50
NjRfdCksIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgVW5zaWduZWRJbnRlZ2VyIGludGVnZXIp
Cit7CisgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVnZXIpKTsKKyAg
ICBhZGQoaGFzaGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW50ZWdlciA+PiAzMikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTaWduZWRBcml0aG1ldGljPiBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfc2lnbmVkPFNpZ25lZEFyaXRobWV0aWM+Ojp2YWx1ZSwgdm9pZD4gYWRkKEhhc2hlciYg
aGFzaGVyLCBTaWduZWRBcml0aG1ldGljIG51bWJlcikKK3sKKyAgICAvLyBXZSBvdmVybG9hZGVk
IGZvciBkb3VibGUgYW5kIGZsb2F0IGJlbG93LCBqdXN0IGRlYWwgd2l0aCBpbnRlZ2VycyBoZXJl
LgorICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0PHN0ZDo6bWFrZV91bnNpZ25lZF90PFNpZ25l
ZEFyaXRobWV0aWM+PihudW1iZXIpKTsKK30KKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBkb3VibGUgbnVtYmVyKQoreworICAgIGFkZChoYXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4obnVtYmVyKSk7Cit9CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgZmxv
YXQgbnVtYmVyKQoreworICAgIGFkZChoYXNoZXIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obnVt
YmVyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudW1lcmF0aW9uPiBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfZW51bTxFbnVtZXJhdGlvbj46OnZhbHVlLCB2b2lkPiBhZGQoSGFzaGVyJiBo
YXNoZXIsIEVudW1lcmF0aW9uIHZhbHVlKQoreworICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0
PHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8RW51bWVyYXRpb24+Pih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IFR5cGVDaGVja0hlbHBlciB7IH07Cit0ZW1wbGF0ZTx0eXBl
bmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBzdHJ1Y3QgSGFzQmVnaW5GdW5jdGlvbk1lbWJlciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+IHN0cnVjdCBI
YXNCZWdpbkZ1bmN0aW9uTWVtYmVyPENvbnRhaW5lciwgc3RkOjpjb25kaXRpb25hbF90PGZhbHNl
LCBUeXBlQ2hlY2tIZWxwZXI8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPENvbnRhaW5lcj4oKS5iZWdp
bigpKT4sIHZvaWQ+PiA6IHN0ZDo6dHJ1ZV90eXBlIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyPiBzdGQ6OmVuYWJsZV9pZl90PEhhc0JlZ2luRnVuY3Rpb25NZW1iZXI8Q29udGFp
bmVyPjo6dmFsdWUsIHZvaWQ+IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ29udGFpbmVyJiBj
b250YWluZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGNvbnRhaW5lcikKKyAg
ICAgICAgYWRkKGhhc2hlciwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwg
c3RkOjpzaXplX3QgLi4uaT4gdm9pZCBhZGRUdXBsZUhlbHBlcihIYXNoZXImIGhhc2hlciwgY29u
c3QgVHVwbGUmIHZhbHVlcywgc3RkOjppbmRleF9zZXF1ZW5jZTxpLi4uPikKK3sKKyAgICBbXSAo
Li4uKSB7IH0oKGFkZChoYXNoZXIsIHN0ZDo6Z2V0PGk+KHZhbHVlcykpLCAwKS4uLik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIHR1cGxlKQoreworICAgIGFkZFR1cGxlSGVscGVyKGhh
c2hlciwgdHVwbGUsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8c3Rk
Ojp0dXBsZTxUeXBlcy4uLj4+Ojp2YWx1ZT4geyB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qgc3RkOjpwYWly
PFQxLCBUMj4mIHBhaXIpCit7CisgICAgYWRkKGhhc2hlciwgcGFpci5maXJzdCk7CisgICAgYWRk
KGhhc2hlciwgcGFpci5zZWNvbmQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFk
ZChIYXNoZXImIGhhc2hlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCit7Cisg
ICAgYWRkKGhhc2hlciwgb3B0aW9uYWwuaGFzX3ZhbHVlKCkpOworICAgIGlmIChvcHRpb25hbC5o
YXNfdmFsdWUoKSkKKyAgICAgICAgYWRkKGhhc2hlciwgb3B0aW9uYWwudmFsdWUoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3QgVmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit7CisgICAgYWRkKGhhc2hlciwgdmFyaWFu
dC5pbmRleCgpKTsKKyAgICB2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAgICAg
IGFkZChoYXNoZXIsIHZhbHVlKTsKKyAgICB9LCB2YXJpYW50KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZS4uLiBPdGhlclR5cGVzPiB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3Qg
T3RoZXJUeXBlcyYuLi4gb3RoZXJWYWx1ZXMpCit7CisgICAgYWRkKGhhc2hlciwgdmFsdWUxKTsK
KyAgICBhZGQoaGFzaGVyLCB2YWx1ZTIpOworICAgIGFkZChoYXNoZXIsIHN0ZDo6Zm9yd2FyZF9h
c190dXBsZShvdGhlclZhbHVlcy4uLikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykKK3sK
KyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBhZGQoaGFzaGVyLCB2YWx1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6OmNvbXB1dGVIYXNoOwor
dXNpbmcgV1RGOjpIYXNoZXI7CiB1c2luZyBXVEY6OkludGVnZXJIYXNoZXI7Ci11c2luZyBXVEY6
OlN0cmluZ0hhc2hlcjsKLQotI2VuZGlmIC8vIFdURl9IYXNoZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmlu
Zy5jcHAKaW5kZXggNzM1Y2ZjNTYxZmJiNjVmMzc2NGRjYzJkMjg5MzY4YjY3ZDdkOTI1ZS4uMTgx
YjExMDU2N2FiNzUxZGJiZDYwMjdhYmFlOTAwN2NlODViNGJhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJp
bmcuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogCiAjaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggOTVhYzI0YjFmMGQ2
N2IwOGMwZGEyZjNjNzYxYjVhYTJhYTdmNDNkNC4uNzhiZDVhY2U4OGQ1Nzg2NDVmNDQ0NTFmNjZm
YjRlMTNmODNkNDkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNo
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTIyLDkgKzIyLDkgQEAKICNpZm5kZWYgU3RyaW5nSGFzaF9oCiAjZGVmaW5lIFN0cmluZ0hhc2hf
aAogCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hh
c2hlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ODE2MDdhZGQ1MmQ1NWYyYTc4MWRhNzk5MzE3ODM2ZDczNzg3N2IzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoZXIuaApAQCAtMCwwICsxLDM2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gUGF1
bCBIc2llaCdzIFN1cGVyRmFzdEhhc2gKKy8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNv
bS9xZWQvaGFzaC5odG1sCisKKy8vIExDaGFyIGRhdGEgaXMgaW50ZXJwcmV0ZWQgYXMgTGF0aW4t
MS1lbmNvZGVkICh6ZXJvLWV4dGVuZGVkIHRvIDE2IGJpdHMpLgorCisvLyBOT1RFOiBUaGUgaGFz
aCBjb21wdXRhdGlvbiBoZXJlIG11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhlIGNyZWF0ZV9oYXNo
X3RhYmxlIHNjcmlwdCBpbgorLy8gSmF2YVNjcmlwdENvcmUgYW5kIHRoZSBDb2RlR2VuZXJhdG9y
SlMucG0gc2NyaXB0IGluIFdlYkNvcmUuCisKKy8vIEdvbGRlbiByYXRpby4gQXJiaXRyYXJ5IHN0
YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxsIHplcm9zIHRvIGEgaGFzaCB2YWx1ZSBvZiB6
ZXJvLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzdHJpbmdIYXNoaW5nU3RhcnRW
YWx1ZSA9IDB4OUUzNzc5QjlVOworCitjbGFzcyBTdHJpbmdIYXNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4
IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgbWFza0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4
IC0gZmxhZ0NvdW50KSkgLSAxOworCisgICAgU3RyaW5nSGFzaGVyKCkKKyAgICAgICAgOiBtX2hh
c2goc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUpCisgICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFj
dGVyKGZhbHNlKQorICAgICAgICAsIG1fcGVuZGluZ0NoYXJhY3RlcigwKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBUaGUgaGFzaGVyIGhhc2hlcyB0d28gY2hhcmFjdGVycyBhdCBhIHRpbWUsIGFu
ZCB0aHVzIGFuICJhbGlnbmVkIiBoYXNoZXIgaXMgb25lCisgICAgLy8gd2hlcmUgYW4gZXZlbiBu
dW1iZXIgb2YgY2hhcmFjdGVycyBoYXZlIGJlZW4gYWRkZWQuIENhbGxlcnMgdGhhdCBhbHdheXMg
YWRkCisgICAgLy8gY2hhcmFjdGVycyB0d28gYXQgYSB0aW1lIGNhbiB1c2UgdGhlICJhc3N1bWlu
ZyBhbGlnbmVkIiBmdW5jdGlvbnMuCisgICAgdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGln
bmVkKFVDaGFyIGEsIFVDaGFyIGIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGlu
Z0NoYXJhY3Rlcik7CisgICAgICAgIG1faGFzaCArPSBhOworICAgICAgICBtX2hhc2ggPSAobV9o
YXNoIDw8IDE2KSBeICgoYiA8PCAxMSkgXiBtX2hhc2gpOworICAgICAgICBtX2hhc2ggKz0gbV9o
YXNoID4+IDExOworICAgIH0KKworICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIg
PSBjaGFyYWN0ZXI7CisgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAg
fQorCisgICAgdm9pZCBhZGRDaGFyYWN0ZXJzKFVDaGFyIGEsIFVDaGFyIGIpCisgICAgeworICAg
ICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisjZW5kaWYKKyAgICAg
ICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5nQ2hhcmFjdGVyLCBh
KTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0NoYXJhY3RlciA9IGI7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyID0gdHJ1ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fz
c3VtaW5nQWxpZ25lZChhLCBiKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBV
Q2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25z
dCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGFz
UGVuZGluZ0NoYXJhY3Rlcik7CisKKyAgICAgICAgYm9vbCByZW1haW5kZXIgPSBsZW5ndGggJiAx
OworICAgICAgICBsZW5ndGggPj49IDE7CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Cisg
ICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRlcihkYXRhWzBd
KSwgQ29udmVydGVyKGRhdGFbMV0pKTsKKyAgICAgICAgICAgIGRhdGEgKz0gMjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChyZW1haW5kZXIpCisgICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29u
dmVydGVyKCpkYXRhKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBh
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICB7CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgZGVmYXVs
dENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdDaGFy
YWN0ZXIpOworCisgICAgICAgIHdoaWxlIChUIGEgPSAqZGF0YSsrKSB7CisgICAgICAgICAgICBU
IGIgPSAqZGF0YSsrOworICAgICAgICAgICAgaWYgKCFiKSB7CisgICAgICAgICAgICAgICAgYWRk
Q2hhcmFjdGVyKENvbnZlcnRlcihhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKENvbnZlcnRl
cihhKSwgQ29udmVydGVyKGIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChjb25zdCBUKiBkYXRh
KQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0
Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hh
ciBDb252ZXJ0ZXIoVCk+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgeworICAgICAgICAgICAgbV9o
YXNQZW5kaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNz
dW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgQ29udmVydGVyKCpkYXRhKyspKTsKKyAg
ICAgICAgICAgIC0tbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1
bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBhZGRDaGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
VUNoYXIgQ29udmVydGVyKFQpPiB2b2lkIGFkZENoYXJhY3RlcnMoY29uc3QgVCogZGF0YSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgJiYgKmRhdGEpIHsKKyAgICAg
ICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChtX3BlbmRpbmdDaGFyYWN0ZXIsIENvbnZlcnRlcigqZGF0
YSsrKSk7CisgICAgICAgIH0KKyAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxU
LCBDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgYWRkQ2hhcmFj
dGVyczxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBo
YXNoV2l0aFRvcDhCaXRzTWFza2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5h
bGl6ZUFuZE1hc2tUb3A4Qml0cyhwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5hbGl6
ZShwcm9jZXNzUGVuZGluZ0NoYXJhY3RlcigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAg
ICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fz
c3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgICAgIHJldHVy
biBoYXNoZXIuaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVI
YXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAgICBTdHJpbmdI
YXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZDxULCBDb252ZXJ0ZXI+KGRhdGEpOworICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2hXaXRoVG9w
OEJpdHNNYXNrZWQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhC
aXRzPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhC
aXRzKGNvbnN0IFQqIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2hBbmRN
YXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
U3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcnNBc3N1bWlu
Z0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gaGFz
aGVyLmhhc2goKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252
ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhKQorICAg
IHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENoYXJh
Y3RlcnNBc3N1bWluZ0FsaWduZWQ8VCwgQ29udmVydGVyPihkYXRhKTsKKyAgICAgICAgcmV0dXJu
IGhhc2hlci5oYXNoKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRh
LCBsZW5ndGgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bXB1dGVIYXNoPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOworICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHNpemVfdCBsZW5ndGhJblVDaGFyID0gbGVuZ3RoIC8gc2l6ZW9mKFVD
aGFyKTsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZENo
YXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwg
bGVuZ3RoSW5VQ2hhcik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgg
JSBzaXplb2YoVUNoYXIpOyArK2kpCisgICAgICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyKHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKVtsZW5ndGhJblVDaGFyICogc2l6ZW9mKFVDaGFy
KSArIGldKTsKKworICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2
b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2hNZW1vcnkoZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplKHVuc2ln
bmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJpdHMo
aGFzaCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxpemVB
bmRNYXNrVG9wOEJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIC8vIFJlc2Vydmlu
ZyBzcGFjZSBmcm9tIHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9mIHRo
ZSBoYXNoJ3MKKyAgICAgICAgLy8gdmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxseSBt
YXNrcyBvdXQgdGhlIGhpZ2ggYml0cyBhbnl3YXkuCisgICAgICAgIHJldHVybiBhdm9pZFplcm8o
YXZhbGFuY2hlQml0cyhoYXNoKSAmIFN0cmluZ0hhc2hlcjo6bWFza0hhc2gpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PgorICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoKGNvbnN0IFQgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0pCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nSGFz
aGVyOjpmaW5hbGl6ZShjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFydFZh
bHVlLCAwLCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25z
dCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6ZmluYWxpemVBbmRNYXNrVG9wOEJpdHMoY29tcHV0ZUxpdGVyYWxIYXNo
SW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyQ291
bnQgLSAxKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBVQ2hhciBkZWZhdWx0Q29u
dmVydGVyKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7
CisgICAgfQorCisgICAgc3RhdGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIoTENoYXIgY2hhcmFj
dGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czModW5zaWdu
ZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPDwgMTApOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5j
aGVCaXRzMih1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJp
dHMzKGhhc2ggKyAoaGFzaCA+PiAxNSkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMSh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMyKGhhc2ggXiAoaGFzaCA8PCAyKSk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxh
bmNoZUJpdHMwKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hl
Qml0czEoaGFzaCArIChoYXNoID4+IDUpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0cyh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMwKGhhc2ggXiAoaGFzaCA8PCAzKSk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2Yg
MCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRl
ZCB5ZXQiLiBTZXR0aW5nIHRoZSBoaWdoIGJpdCBtYWludGFpbnMKKyAgICAvLyByZWFzb25hYmxl
IGZpZGVsaXR5IHRvIGEgaGFzaCBjb2RlIG9mIDAgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8geWll
bGQKKyAgICAvLyBleGFjdGx5IDAgd2hlbiBoYXNoIGxvb2t1cCBtYXNrcyBvdXQgdGhlIGhpZ2gg
Yml0cy4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZvaWRa
ZXJvKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCA/IGhhc2ggOiAo
MHg4MDAwMDAwMCA+PiBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgcHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9oYXNoOworCisgICAgICAgIC8vIEhhbmRsZSBlbmQgY2FzZS4KKyAg
ICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJhY3RlcikgeworICAgICAgICAgICAgcmVzdWx0ICs9
IG1fcGVuZGluZ0NoYXJhY3RlcjsKKyAgICAgICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMTE7
CisgICAgICAgICAgICByZXN1bHQgKz0gcmVzdWx0ID4+IDE3OworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBsaW1pdHMg
aXRzZWxmIHRvIHRoZSBvbGRlciwgbW9yZSBsaW1pdGVkIEMrKzExIGNvbnN0ZXhwciBjYXBhYmls
aXRpZXMsIHVzaW5nCisgICAgLy8gcmVjdXJzaW9uIGluc3RlYWQgb2YgbG9vcGluZywgZm9yIGV4
YW1wbGUuIFdvdWxkIGJlIG5pY2UgdG8gcmV3cml0ZSB0aGlzIGluIGEgc2ltcGxlciB3YXkKKyAg
ICAvLyBvbmNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIHN1cHBvcnQgY29tcGlsZXJzIGxpa2UgR0ND
IDQuOSB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydCBpdC4KKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMSh1bnNpZ25lZCBoYXNo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+PiAxNyk7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENo
YXJhY3RlcjAodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVX
aXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEoKGhhc2ggPDwgMTEpIF4gaGFzaCk7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFz
dENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBjaGFyYWN0ZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKGhhc2ggKyBj
aGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+
PiAxMSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUw
KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNlY29uZENoYXJhY3RlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxjdWxhdGUxKChoYXNoIDw8IDE2KSBeICgoc2Vjb25kQ2hhcmFjdGVyIDw8IDEx
KSBeIGhhc2gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1
bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJhY3RlciwgdW5zaWduZWQgc2Vj
b25kQ2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZTAoaGFzaCArIGZp
cnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoSW1wbCh1bnNpZ25lZCBoYXNoLCB1bnNp
Z25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChpbmRleCA9PSBsZW5ndGgpCisgICAgICAgICAgICA/IGhhc2gg
OiAoKGluZGV4ICsgMSkgPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBjYWxjdWxhdGVXaXRoUmVt
YWluaW5nTGFzdENoYXJhY3RlcihoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSkKKyAgICAgICAgICAg
IDogY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChjYWxjdWxhdGUoaGFzaCwgY2hhcmFjdGVyc1tpbmRl
eF0sIGNoYXJhY3RlcnNbaW5kZXggKyAxXSksIGluZGV4ICsgMiwgY2hhcmFjdGVycywgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2hhc2g7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdD
aGFyYWN0ZXI7CisgICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RyaW5nSGFzaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAppbmRleCA5ODA4YjEwNjM3MTZmOWQzMGViMDU3MjVlZWRiMTE0ODVhNjcyYTcwLi5jNjRl
YzYzOGZlMjViMTY3YTEwNjBhYjM0OTgwYTQxMWI2ZWYzNDkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaApAQCAtMjcsMTUgKzI3LDEzIEBACiAjaW5jbHVkZSA8dW5pY29kZS91c3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlG
YXN0UGF0aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NvbnZlcnNpb25Nb2RlLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9uLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nTWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmVjdG9yLmg+CiAKICNpZiBVU0UoQ0YpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aAppbmRleCBkMmI5OWJmMjVlM2M4MTAxZDM4Mzg1NDhlM2NkMGI5OWRhZDkwOTk2Li41YWJhMjY5
NDJlYTBlYWFiZTBlNWE0NjZkYjcyZTMxZWQ4MWNhMGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKQEAgLTM1Nyw2ICszNTcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsg
fQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIGlzTnVsbCgpID8gMCA6IGltcGwoKS0+aGFzaCgpOyB9CiAgICAgdW5zaWdu
ZWQgZXhpc3RpbmdIYXNoKCkgY29uc3QgeyByZXR1cm4gaXNOdWxsKCkgPyAwIDogaW1wbCgpLT5l
eGlzdGluZ0hhc2goKTsgfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdW5pY29kZS9VVEY4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAK
aW5kZXggYzBjOGQ4YjdkZTNiNjk5YmQwYTkyOTZjY2UxN2EzYzMzNmU2ZGRhYi4uYWI5ZDc5MmM4
OTY1NjZmMDc2ZTQyNDI1NWQ3YjBjMmVmYmE5YjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdW5pY29kZS9VVEY4LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
OCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiVVRGOC5oIgogCiAjaW5jbHVkZSAiQVNDSUlDVHlwZS5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBkMWFhZGRlNWM0OTEzNjMwYWVjOTA4MDQzODY0NGMxZWYyMTI5YTY1Li44NmMyNWFlZTVl
MDdjNTY2ZjFhYzYyNGY1NDYzMGI2N2VjMDc2OTc0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMTItMDMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXVEY6Okhhc2hlciwg
YW4gZWFzaWVyIHRvIHVzZSByZXBsYWNlbWVudCBmb3IgV1RGOjpJbnRlZ2VySGFzaGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBKRiBCYXN0aWVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dDogQWRkZWQgSGFzaGVyLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwOiBBZGRlZC4gQ29udGFpbnMg
dGVzdHMgb2YgdGhlIG5ldworICAgICAgICBXVEY6Okhhc2hlciBjbGFzcy4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHA6IEluY2x1ZGUgU3RyaW5n
SGFzaGVyLmggaW5zdGVhZCBvZgorICAgICAgICBIYXNoZXIuaC4KKwogMjAxNy0xMi0wMSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViRHJp
dmVyOiBhdXRvLWluc3RhbGwgcHl0ZXN0IGluc3RlYWQgb2YgaW1wb3J0aW5nIGl0IGZyb20gd3B0
IHRvb2xzIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggMmRlYjFl
YTNmYjViODNhNjExNWNjYjc1MTRmNzA1YzM3MmMwNzcwMy4uN2UzMWYzMDk3OGFlNDI3YjEwYTkx
ZmIxNGVmYjlmZTEzNDQzMDFhMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC0x
MDMsNiArMTAzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvSGFzaFNldC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvSGFzaGVy
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdD
b252ZXJzaW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9KU09OVmFs
dWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0xFQkRlY29kZXIuY3Bw
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM1Mzc5YzEyNmYyMWQ1M2Y1ZGJhMTM1MTQ3NGI0
YTU0ZWU1ODI1M2QuLjgzMjhjZWFhODc0MzYyNzNkNDYxMTE0NDU0NGM5ZDFjZGJiMjIwY2IgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MzIsNiArNTMyLDcgQEAKIAkJOTMxMENEMzgxRUY3
MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTBDRDM2MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5j
cHAgKi87IH07CiAJCTkzMjlBQTI5MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzI5
QUEyODFERTNGODFFMDAzQUJEMDcgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwICovOyB9OwogCQk5
MzJBRTUzRDFEMzcxMDQ3MDA1REZGQUYgLyogZm9jdXMtaW5wdXRzLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1NzVDNTUxRDMwMzY2
RTAwMEQ2MDREIC8qIGZvY3VzLWlucHV0cy5odG1sICovOyB9OworCQk5MzNENjMxRDFGQ0I3NjIw
MDAzMkVDRDYgLyogSGFzaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzM0Q2MzFCMUZDQjc2MTgwMDMyRUNENiAvKiBIYXNoZXIuY3BwICovOyB9
OwogCQk5MzYxMDAyOTE0REM5NUE3MDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2MTAw
MjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICovOyB9OwogCQk5MzYy
NUQyNzFDRDk3NDFDMDA2REMxRjEgLyogbGFyZ2UtdmlkZW8td2l0aG91dC1hdWRpby5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNjI1
RDI2MUNEOTczQUYwMDZEQzFGMSAvKiBsYXJnZS12aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi87
IH07CiAJCTkzNkY3MjgwMUNEN0Q5RUMwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlv
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM2RjcyN0UxQ0Q3RDlEMDAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRt
bCAqLzsgfTsKQEAgLTE0OTQsNiArMTQ5NSw3IEBACiAJCTkzMTBDRDM2MUVGNzA4RkIwMDUwRkZF
MCAvKiBGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMjlBQTI4MURFM0Y4
MUUwMDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0QnJlYWtJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMzE0MDdCMTdCNDQxOTAwMEYwODNCMSAvKiBEaWROb3RIYW5kbGVLZXlE
b3duLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpZE5vdEhhbmRs
ZUtleURvd24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzNENjMxQjFGQ0I3
NjE4MDAzMkVDRDYgLyogSGFzaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhhc2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNTc1QzU1
MUQzMDM2NkUwMDBENjA0RCAvKiBmb2N1cy1pbnB1dHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJmb2N1cy1pbnB1dHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzNjEwMDI4MTREQzk1N0IwMDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3RzLW9mLWlmcmFtZXMuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNjI1RDI2MUNEOTczQUYwMDZEQzFGMSAvKiBsYXJnZS12
aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibGFy
Z2UtdmlkZW8td2l0aG91dC1hdWRpby5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI2MDQsNiArMjYwNiw3IEBACiAJCQkJOTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1
bmN0aW9uLmNwcCAqLywKIAkJCQk4M0RCNzk2NzFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24u
Y3BwICovLAogCQkJCTdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291bnRlZFNldC5j
cHAgKi8sCisJCQkJOTMzRDYzMUIxRkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJ
CQkJMEJDRDgzMzQxNDg1N0NFNDAwRUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJE
RkY4MTVCREU1OTkwMDRGNjkxRCAvKiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3
NzUyMDBGNjFENUIgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0zMTY0
LDYgKzMxNjcsNyBAQAogCQkJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkJGRDI5NEMxRDVFNkMxRDAwOEVDOTY4IC8qIEhh
c2hDb3VudGVkU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzM0Q2MzFEMUZDQjc2MjAwMDMy
RUNENiAvKiBIYXNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRDIxRDBBNTkwQzAw
RkVCQ0YzIC8qIEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRDQxRDBBNTkw
QzAwRkVCQ0YzIC8qIEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFRTAxRDBB
NTkwQzAwRkVCQ0YzIC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
NDY2ZTA3MTNhYjkyYWM2YjVjZWJhNzE4Njk4ZjJiN2I1ZWExMzI5Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcApAQCAtMCwwICsxLDI1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGFycmF5
PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKKy8vIFRlc3QgYWdhaW5zdCBhY3R1YWwgaGFzaCB2YWx1ZXMuCisvLyBX
ZSBkb24ndCByZWFsbHkgZGVwZW5kIG9uIHNwZWNpZmljIHZhbHVlcywgYnV0IGl0IG1ha2VzIHRl
c3Rpbmcgc2ltcGxlci4KKy8vIENvdWxkIGluc3RlYWQgY29uc3RydWN0IHRlc3RzIHRoYXQgY2hl
Y2sgaGFzaGVzIGFnYWluc3QgZWFjaCBvdGhlci4KKy8vIE5vIGJpZyBkZWFsIHRvIHVwZGF0ZSBh
bGwgb2YgdGhlc2UgaWYgd2UgY2hhbmdlIHRoZSBoYXNoIGFsZ29yaXRobS4KKworY29uc3QgdWlu
dDMyX3QgZW1wdHlIYXNoID0gODI2MTAzMzRVOworY29uc3QgdWludDMyX3QgemVybzMyQml0SGFz
aCA9IDI0MjE4MzUwNFU7Citjb25zdCB1aW50MzJfdCB6ZXJvNjRCaXRIYXNoID0gNTc5MjM2MjYw
VTsKK2NvbnN0IHVpbnQzMl90IG9uZTMyQml0SGFzaCA9IDY5MDEzODE5MlU7Citjb25zdCB1aW50
MzJfdCBvbmU2NEJpdEhhc2ggPSAxNjIxNDU0OTExVTsKKworVEVTVChXVEYsIEhhc2hlcl9pbnRl
Z2VyKQoreworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgwVSkpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChmYWxzZSkpOworICAgIEVY
UEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxjaGFyPigwKSkp
OworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxp
bnQ4X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNv
bXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+KDApKSk7CisgICAgRVhQRUNUX0VRKHplcm8z
MkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PHVpbnQxNl90PigwKSkpOworICAgIEVY
UEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgwKSk7CisKKyAgICBFWFBFQ1RfRVEo
emVybzY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMFVMTCkpOworICAgIEVYUEVDVF9FUSh6ZXJvNjRC
aXRIYXNoLCBjb21wdXRlSGFzaCgwTCkpOworICAgIEVYUEVDVF9FUSh6ZXJvNjRCaXRIYXNoLCBj
b21wdXRlSGFzaCgwVUwpKTsKKyAgICBFWFBFQ1RfRVEoemVybzY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goMExMKSk7CisKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaCgxVSkp
OworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHRydWUpKTsKKyAgICBF
WFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0aWNfY2FzdDxjaGFyPigxKSkp
OworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGlu
dDhfdD4oMSkpKTsKKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGF0
aWNfY2FzdDx1aW50OF90PigxKSkpOworICAgIEVYUEVDVF9FUShvbmUzMkJpdEhhc2gsIGNvbXB1
dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+KDEpKSk7CisgICAgRVhQRUNUX0VRKG9uZTMyQml0
SGFzaCwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8dWludDE2X3Q+KDEpKSk7CisgICAgRVhQRUNU
X0VRKG9uZTMyQml0SGFzaCwgY29tcHV0ZUhhc2goMSkpOworCisgICAgRVhQRUNUX0VRKG9uZTY0
Qml0SGFzaCwgY29tcHV0ZUhhc2goMVVMTCkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gs
IGNvbXB1dGVIYXNoKDFMKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goMVVMKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMUxMKSk7
CisKKyAgICBFWFBFQ1RfRVEoMTc3MjM4MTY2MVUsIGNvbXB1dGVIYXNoKDB4N0ZVKSk7CisgICAg
RVhQRUNUX0VRKDE3NzIzODE2NjFVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDhfdD46Om1heCgpKSk7CisKKyAgICBFWFBFQ1RfRVEoMzczMDg3NzM0MFUsIGNvbXB1dGVIYXNo
KDB4ODBVKSk7CisgICAgRVhQRUNUX0VRKDM3MzA4NzczNDBVLCBjb21wdXRlSGFzaChzdGQ6Om51
bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMzc2NTEwNjM0
VSwgY29tcHV0ZUhhc2goMHhGRlUpKTsKKyAgICBFWFBFQ1RfRVEoMzc2NTEwNjM0VSwgY29tcHV0
ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1Rf
RVEoMzc2NTEwNjM0VSwgY29tcHV0ZUhhc2goc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpKSk7CisgICAg
RVhQRUNUX0VRKDM3NjUxMDYzNFUsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDhfdD4oLTEp
KSk7CisKKyAgICBFWFBFQ1RfRVEoMjYyNjMyMjc4VSwgY29tcHV0ZUhhc2goMHg3RkZGVSkpOwor
ICAgIEVYUEVDVF9FUSgyNjI2MzIyNzhVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRz
PGludDE2X3Q+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDI5ODE5Nzg2NjFVLCBjb21wdXRl
SGFzaCgweDgwMDBVKSk7CisgICAgRVhQRUNUX0VRKDI5ODE5Nzg2NjFVLCBjb21wdXRlSGFzaChz
dGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptaW4oKSkpOworCisgICAgRVhQRUNUX0VRKDg5
NDk4NDE3OVUsIGNvbXB1dGVIYXNoKDB4RkZGRlUpKTsKKyAgICBFWFBFQ1RfRVEoODk0OTg0MTc5
VSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSk7Cisg
ICAgRVhQRUNUX0VRKDg5NDk4NDE3OVUsIGNvbXB1dGVIYXNoKHN0YXRpY19jYXN0PGludDE2X3Q+
KC0xKSkpOworCisgICAgRVhQRUNUX0VRKDM0MzA2NzAzMjhVLCBjb21wdXRlSGFzaCgweDdGRkZG
RkZGVSkpOworICAgIEVYUEVDVF9FUSgzNDMwNjcwMzI4VSwgY29tcHV0ZUhhc2goc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKKworICAgIEVYUEVDVF9FUSgyNDI1NjgzNDI4
VSwgY29tcHV0ZUhhc2goMHg4MDAwMDAwMFUpKTsKKyAgICBFWFBFQ1RfRVEoMjQyNTY4MzQyOFUs
IGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNoKDB4RkZGRkZGRkZVKSk7CisgICAg
RVhQRUNUX0VRKDE5NTU1MTE0MzVVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoMTk1NTUxMTQzNVUsIGNvbXB1dGVIYXNo
KC0xKSk7CisKKyAgICBFWFBFQ1RfRVEoMTI2NDUzMjYwNFUsIGNvbXB1dGVIYXNoKDB4ODAwMDAw
MDAwMDAwMDAwMFVMTCkpOworICAgIEVYUEVDVF9FUSgxMjY0NTMyNjA0VSwgY29tcHV0ZUhhc2go
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoMTI2
NDUzMjYwNFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46Om1pbigpKSk7
CisKKyAgICBFWFBFQ1RfRVEoMjk2MTA0OTgzNFUsIGNvbXB1dGVIYXNoKDB4N0ZGRkZGRkZGRkZG
RkZGRlVMTCkpOworICAgIEVYUEVDVF9FUSgyOTYxMDQ5ODM0VSwgY29tcHV0ZUhhc2goc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKTsKKyAgICBFWFBFQ1RfRVEoMjk2MTA0OTgz
NFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZz46Om1heCgpKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMTEwNjMzMjA5MVUsIGNvbXB1dGVIYXNoKDB4RkZGRkZGRkZGRkZGRkZGRlVM
TCkpOworICAgIEVYUEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhhc2goc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpKSk7CisgICAgRVhQRUNUX0VRKDExMDYzMzIwOTFVLCBj
b21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKSkpOwor
ICAgIEVYUEVDVF9FUSgxMTA2MzMyMDkxVSwgY29tcHV0ZUhhc2goLTFMKSk7CisgICAgRVhQRUNU
X0VRKDExMDYzMzIwOTFVLCBjb21wdXRlSGFzaCgtMUxMKSk7Cit9CisKK1RFU1QoV1RGLCBIYXNo
ZXJfZmxvYXRpbmdQb2ludCkKK3sKKyAgICBFWFBFQ1RfRVEoemVybzY0Qml0SGFzaCwgY29tcHV0
ZUhhc2goMC4wKSk7CisgICAgRVhQRUNUX0VRKDEyNjQ1MzI2MDRVLCBjb21wdXRlSGFzaCgtMC4w
KSk7IC8vIE5vdGUsIG5vdCBzYW1lIGFzIGhhc2ggb2YgMC4wLgorICAgIEVYUEVDVF9FUShvbmU2
NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZGVub3Jt
X21pbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjI3ODM5OTk4MFUsIGNvbXB1dGVIYXNoKDEuMCkp
OworICAgIEVYUEVDVF9FUSgzODcwNjg5Mjk3VSwgY29tcHV0ZUhhc2goLTEuMCkpOworCisgICAg
RVhQRUNUX0VRKDMwMTYzNDQ0MTRVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46Om1pbigpKSk7CisgICAgRVhQRUNUX0VRKDE1OTc2NjI5ODJVLCBjb21wdXRlSGFzaChz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjUw
MTcwMjU1NlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bG93ZXN0
KCkpKTsKKyAgICBFWFBFQ1RfRVEoMjIxNDQzOTgwMlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSk7CisKKyAgICBFWFBFQ1RfRVEoMjY3ODA4Njc1
OVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkp
KTsKKyAgICBFWFBFQ1RfRVEoMjMwNDQ0NTM5M1UsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOworICAgIEVYUEVDVF9FUSgyMjMyNTkzMzExVSwg
Y29tcHV0ZUhhc2goLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOwor
CisgICAgRVhQRUNUX0VRKHplcm8zMkJpdEhhc2gsIGNvbXB1dGVIYXNoKDAuMGYpKTsKKyAgICBF
WFBFQ1RfRVEoMjQyNTY4MzQyOFUsIGNvbXB1dGVIYXNoKC0wLjBmKSk7IC8vIE5vdGUsIG5vdCBz
YW1lIGFzIGhhc2ggb2YgMC4wZi4KKyAgICBFWFBFQ1RfRVEob25lMzJCaXRIYXNoLCBjb21wdXRl
SGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZGVub3JtX21pbigpKSk7CisKKyAgICBF
WFBFQ1RfRVEoMTA4MTU3NTk2NlUsIGNvbXB1dGVIYXNoKDEuMGYpKTsKKyAgICBFWFBFQ1RfRVEo
MzI2MjA5MzE4OFUsIGNvbXB1dGVIYXNoKC0xLjBmKSk7CisKKyAgICBFWFBFQ1RfRVEoMzE3MDE4
OTUyNFUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkpOwor
ICAgIEVYUEVDVF9FUSgxMTAyMTI5OVUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKSkpOworCisgICAgRVhQRUNUX0VRKDMyMTIwNjk1MDZVLCBjb21wdXRlSGFz
aChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bG93ZXN0KCkpKTsKKyAgICBFWFBFQ1RfRVEo
MTMwODc4NDUwNlUsIGNvbXB1dGVIYXNoKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNp
bG9uKCkpKTsKKworICAgIEVYUEVDVF9FUSgyNzUxMjg4NTExVSwgY29tcHV0ZUhhc2goc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpKSk7CisgICAgRVhQRUNUX0VRKDM0NTcw
NDkyNTZVLCBjb21wdXRlSGFzaChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkpOworICAgIEVYUEVDVF9FUSg0MjA4ODczOTcxVSwgY29tcHV0ZUhhc2goLXN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSk7Cit9CisKK1RFU1QoV1RGLCBIYXNoZXJfbXVs
dGlwbGUpCit7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goKSk7CisgICAg
RVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goc3RkOjptYWtlX3R1cGxlKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoZW1wdHlIYXNoLCBjb21wdXRlSGFzaChzdGQ6OmFycmF5PGludCwgMD4geyB9
KSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4geyB9
KSk7CisgICAgRVhQRUNUX0VRKGVtcHR5SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludCwgMT4g
eyB9KSk7CisKKyAgICBFWFBFQ1RfRVEoemVybzMyQml0SGFzaCwgY29tcHV0ZUhhc2goc3RkOjph
cnJheTxpbnQsIDE+IHsgeyAwIH0gfSkpOworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRIYXNoLCBj
b21wdXRlSGFzaChWZWN0b3I8aW50PiB7IDAgfSkpOworICAgIEVYUEVDVF9FUSh6ZXJvMzJCaXRI
YXNoLCBjb21wdXRlSGFzaChWZWN0b3I8aW50LCAxPiB7IDAgfSkpOworICAgIEVYUEVDVF9FUSh6
ZXJvMzJCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om9wdGlvbmFsPGludD4geyBzdGQ6Om51bGxv
cHQgfSkpOworCisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goMSwgMCkp
OworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6bWFrZV90dXBs
ZSgxLCAwKSkpOworICAgIEVYUEVDVF9FUShvbmU2NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHN0ZDo6
bWFrZV9wYWlyKDEsIDApKSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhh
c2goc3RkOjphcnJheTxpbnQsIDI+IHsgeyAxLCAwIH0gfSkpOworICAgIEVYUEVDVF9FUShvbmU2
NEJpdEhhc2gsIGNvbXB1dGVIYXNoKHsgMSwgMCB9KSk7CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0
SGFzaCwgY29tcHV0ZUhhc2goc3RkOjpvcHRpb25hbDxpbnQ+IHsgMCB9KSk7CisgICAgRVhQRUNU
X0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludD4geyB7IDEsIDAgfSB9KSk7
CisgICAgRVhQRUNUX0VRKG9uZTY0Qml0SGFzaCwgY29tcHV0ZUhhc2goVmVjdG9yPGludCwgMT4g
eyB7IDEsIDAgfSB9KSk7CisKKyAgICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFz
aChzdGQ6Om1ha2VfdHVwbGUoMSksIHN0ZDo6YXJyYXk8aW50LCAxPiB7IHsgMCB9IH0pKTsKKyAg
ICBFWFBFQ1RfRVEob25lNjRCaXRIYXNoLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfdHVwbGUoc3Rk
OjptYWtlX3R1cGxlKDEpLCBzdGQ6OmFycmF5PGludCwgMT4geyB7IDAgfSB9KSkpOworCisgICAg
RVhQRUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaCgxLCAyLCAzLCA0KSk7CisgICAgRVhQ
RUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChzdGQ6Om1ha2VfdHVwbGUoMSwgMiwgMywg
NCkpKTsKKyAgICBFWFBFQ1RfRVEoMTY1MjM1MjMyMVUsIGNvbXB1dGVIYXNoKHN0ZDo6bWFrZV9w
YWlyKHN0ZDo6bWFrZV9wYWlyKDEsIDIpLCBzdGQ6Om1ha2VfcGFpcigzLCA0KSkpKTsKK30KKwor
c3RydWN0IEhhc2hlckFkZEN1c3RvbTEgeyB9OworCit2b2lkIGFkZChIYXNoZXImIGhhc2hlciwg
Y29uc3QgSGFzaGVyQWRkQ3VzdG9tMSYpCit7CisgICAgYWRkKGhhc2hlciwgMSwgMiwgMywgNCk7
Cit9CisKK3N0cnVjdCBIYXNoZXJBZGRDdXN0b20yIHsgfTsKKwordm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IEhhc2hlckFkZEN1c3RvbTImKQoreworICAgIGFkZChoYXNoZXIsIHsgMSwg
MiwgMywgNCB9KTsKK30KKworVEVTVChXVEYsIEhhc2hlcl9jdXN0b20pCit7CisgICAgRVhQRUNU
X0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChIYXNoZXJBZGRDdXN0b20xIHsgfSkpOworICAg
IEVYUEVDVF9FUSgxNjUyMzUyMzIxVSwgY29tcHV0ZUhhc2goSGFzaGVyQWRkQ3VzdG9tMiB7IH0p
KTsKK30KKworI2lmIDAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB0dXBsZS1saWtlIGNsYXNz
ZXMuCisKK3N0cnVjdCBIYXNoZXJBZGRUdXBsZUxpa2VDbGFzczEgeworICAgIHN0ZDo6YXJyYXk8
aW50LCA0PiBhcnJheSB7IHsgMSwgMiwgMywgNCB9IH07CisgICAgdGVtcGxhdGU8c2l6ZV90IGk+
IGludCBnZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxpPihhcnJheSk7IH0KK307CisKK3N0
cnVjdCBIYXNoZXJBZGRUdXBsZUxpa2VDbGFzczIgeworICAgIHN0ZDo6YXJyYXk8aW50LCA0PiBh
cnJheSB7IHsgMSwgMiwgMywgNCB9IH07Cit9OworCit9CisKK25hbWVzcGFjZSBzdGQgeworCisv
LyBGSVhNRTogRG9jdW1lbnRhdGlvbiBhdCBjcHByZWZlcmVuY2UuY3BwIHNheXMgc3RkOjp0dXBs
ZV9zaXplIGlzIGEgc3RydWN0LCBidXQgaXQncyBhIGNsYXNzIGluIGN1cnJlbnQgbWFjT1MgdG9v
bHMuCisvLyBGSVhNRTogSXQncyBpbmVsZWdhbnQgdG8gaW5qZWN0IHRoaXMgaW50byB0aGUgc3Rk
IG5hbWVzcGFjZS4gSXMgdGhhdCByZWFsbHkgaG93IGEgdHVwbGUtbGlrZSBjbGFzcyBuZWVkcyB0
byBiZSBkZWZpbmVkPworLy8gRklYTUU6IFRoaXMgaXMgc28gaW5jb252ZW5pZW50IHRoYXQgSSBh
bSBub3Qgc3VyZSBpdCdzIHNvbWV0aGluZyB3ZSB3YW50IHRvIGRvIGZvciBsb3RzIG9mIGNsYXNz
ZXMgaW4gV2ViS2l0LgordGVtcGxhdGU8PiBjbGFzcyBzdGQ6OnR1cGxlX3NpemU8VGVzdFdlYktp
dEFQSTo6SGFzaGVyQWRkVHVwbGVMaWtlQ2xhc3MxPiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2Nv
bnN0YW50PHNpemVfdCwgc3RkOjp0dXBsZV9zaXplPGRlY2x0eXBlKFRlc3RXZWJLaXRBUEk6Okhh
c2hlckFkZFR1cGxlTGlrZUNsYXNzMTo6YXJyYXkpPjo6dmFsdWU+IHsgfTsKKwordGVtcGxhdGU8
PiBjbGFzcyBzdGQ6OnR1cGxlX3NpemU8VGVzdFdlYktpdEFQSTo6SGFzaGVyQWRkVHVwbGVMaWtl
Q2xhc3MyPiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgc3RkOjp0dXBs
ZV9zaXplPGRlY2x0eXBlKFRlc3RXZWJLaXRBUEk6Okhhc2hlckFkZFR1cGxlTGlrZUNsYXNzMjo6
YXJyYXkpPjo6dmFsdWU+IHsgfTsKKworfQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
Ky8vIEZJWE1FOiBJcyBpdCBPSyBmb3IgdGhlIGdldCB0byBiZSBpbiB0aGUgY2xhc3MncyBuYW1l
c3BhY2UgYW5kIHJlbHkgb24gYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cD8KKy8vIE9yIGRvZXMg
dGhpcyBmdW5jdGlvbiB0ZW1wbGF0ZSBuZWVkIHRvIGJlIG1vdmVkIGludG8gdGhlIHN0ZCBuYW1l
c3BhY2UgbGlrZSB0aGUgdHVwbGVfc2l6ZSBzcGVjaWFsaXphdGlvbj8KK3RlbXBsYXRlPHNpemVf
dCBpPiBpbnQgZ2V0KGNvbnN0IEhhc2hlckFkZFR1cGxlTGlrZUNsYXNzMiYgb2JqZWN0KQorewor
ICAgIHJldHVybiBnZXQ8aT4ob2JqZWN0LmFycmF5KTsKK30KKworVEVTVChXVEYsIEhhc2hlcl90
dXBsZUxpa2UpCit7CisgICAgRVhQRUNUX0VRKDE2NTIzNTIzMjFVLCBjb21wdXRlSGFzaChIYXNo
ZXJBZGRUdXBsZUxpa2VDbGFzczEgeyB9KSk7CisgICAgRVhQRUNUX0VRKDE2NTIzNTIzMjFVLCBj
b21wdXRlSGFzaChIYXNoZXJBZGRUdXBsZUxpa2VDbGFzczIgeyB9KSk7Cit9CisKKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcAppbmRleCA1OTg1YjAyNmE4MTFkNGIyZTU5ZDRjMDA2
MDQyNDZkZDU0MGQ5MjUyLi5hMDlmNDFhMzg0OTA4ZDkzYjk3YjQ0ZTJkYzI5YWY5MGQ5YzdmYjQy
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdIYXNoZXIu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0hhc2hlci5jcHAK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8d3Rm
L0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogCiBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>