<?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>164526</bug_id>
          
          <creation_ts>2016-11-08 15:14:32 -0800</creation_ts>
          <short_desc>Implement WTF::Expected</short_desc>
          <delta_ts>2016-12-13 12:10:14 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jfbastien</cc>
    
    <cc>sam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1249140</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-08 15:14:32 -0800</bug_when>
    <thetext>As described in http://wg21.link/p0323r1

std::expected isn&apos;t in C++17, and may be in C++20. It&apos;s a nice complement to std::any / std::optional because it&apos;s a type-tagged union which has a single expected result but could also contain an error.

This would be useful in the WebAssembly parser, for example.

Using this implementation will allow us to provide feedback to the standards committee and guide std::expected&apos;s design before it gets standardized. I&apos;ve already sent a bunch of feedback to the author based on my experience implementing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249171</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-08 16:02:23 -0800</bug_when>
    <thetext>Yusuke points out:
  WTF::Expect is something like Either&lt;V, E&gt;, right? I think you can propose changing ExceptionOr thingy to your WTF::Expect. Binding refactoring with ExceptionOr is ongoing right now!
  template&lt;typename T&gt; using ExceptionOr&lt;T&gt; = WTF::Expect&lt;T, SomeExceptionClass&gt;;

I&apos;d searched around WTF but failed to see this. I&apos;ll upload what I currently have, and then see how compatible these are. Either way (ha!) we may want to feedback these differences to the committee.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249173</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-08 16:06:26 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Yusuke points out:
&gt;   WTF::Expect is something like Either&lt;V, E&gt;, right? I think you can propose
&gt; changing ExceptionOr thingy to your WTF::Expect. Binding refactoring with
&gt; ExceptionOr is ongoing right now!
&gt;   template&lt;typename T&gt; using ExceptionOr&lt;T&gt; = WTF::Expect&lt;T,
&gt; SomeExceptionClass&gt;;
&gt; 
&gt; I&apos;d searched around WTF but failed to see this. I&apos;ll upload what I currently
&gt; have, and then see how compatible these are. Either way (ha!) we may want to
&gt; feedback these differences to the committee.

You can find it in WebCore/dom/ExceptionOr.h.
It seems like std::expected is nice for ExceptionOr. It has what we want, like, std::expected&lt;void, error&gt; specialization!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249197</commentid>
    <comment_count>3</comment_count>
      <attachid>294206</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-08 17:36:01 -0800</bug_when>
    <thetext>Created attachment 294206
patch

Proposed patch.

It is currently very close to what&apos;s proposed in http://wg21.link/p0323r1 except:

 - Follows WebKit naming convention (except where required, e.g. for std::hash).
 - Has a few check-webkit-style fails because I think check-webkit-style is wrong (I&apos;ve read all the warnings and don&apos;t think they&apos;re relevant, let me know if that&apos;s not the case).
 - A few APIs are missing. I&apos;ve left them as commented-out lines for now. They don&apos;t seem critical to getting this off the ground.
 - A few new APIs are available, in every case I&apos;ve documented this and sent feedback to the author.
 - A few things are different e.g. std::nullopt_t is the default (the current proposal is missing a default here).
 - No exceptions. It instead calls RELEASE_ASSERT_NOT_REACHED. Note that not all accessors do this! It&apos;s what the current proposal does. I could have debug asserts for these?
 - No [[nodiscard]] for now. I think it would be nice to add.

I&apos;ve been running the tests using the cmake build:
  (cd current/ &amp;&amp; ninja TestWTF &amp;&amp; ./bin/TestWTF --gtest_filter=&quot;*xpected*&quot; ; echo $?)

Note that this patch is very careful about constexpr+literal types, as well as supporting non-literal types. If something is weird that may be why.

If you like the current patch I can look at what we could do w.r.t. WTF::Either and WTF::ExceptionOr. How much can we replace, and how much of the proposal should we change to give us more of what we want? Let me know, I&apos;ve been providing feedback to the committee.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249198</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-08 17:37:09 -0800</bug_when>
    <thetext>Attachment 294206 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:339:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:340:  Consider using EXPECT_NE instead of EXPECT_TRUE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:340:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:341:  Consider using EXPECT_LT instead of EXPECT_TRUE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:342:  Consider using EXPECT_GT instead of EXPECT_TRUE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:343:  Consider using EXPECT_LE instead of EXPECT_TRUE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:344:  Consider using EXPECT_GE instead of EXPECT_TRUE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:345:  Consider using EXPECT_LE instead of EXPECT_TRUE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:346:  Consider using EXPECT_GE instead of EXPECT_TRUE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:348:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:348:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:349:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:350:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:351:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:352:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:353:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:355:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:356:  Consider using EXPECT_NE instead of EXPECT_TRUE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:357:  Consider using EXPECT_LT instead of EXPECT_TRUE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:358:  Consider using EXPECT_GT instead of EXPECT_TRUE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:359:  Consider using EXPECT_LE instead of EXPECT_TRUE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:360:  Consider using EXPECT_GE instead of EXPECT_TRUE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:361:  Consider using EXPECT_LE instead of EXPECT_TRUE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:362:  Consider using EXPECT_GE instead of EXPECT_TRUE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:364:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:365:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:366:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:367:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:368:  Consider using EXPECT_GT instead of EXPECT_FALSE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:369:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Source/WTF/wtf/Expected.h:47:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:69:  Do not use unnamed namespaces in header files.  See http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces for more information.  [build/namespaces] [4]
ERROR: Source/WTF/wtf/Expected.h:170:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:172:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:216:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:253:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:264:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:265:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:267:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:273:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:277:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:278:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:282:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:283:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:294:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:295:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:308:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:335:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:337:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:342:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:346:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:350:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Expected.h:421:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Expected.h:427:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 54 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249503</commentid>
    <comment_count>5</comment_count>
      <attachid>294206</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-09 14:17:46 -0800</bug_when>
    <thetext>Comment on attachment 294206
patch

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

r=me. I think the name is OK. Current WTF::Expected is slightly different from std::experimental::expected proposal. So leaving it as WTF::Expected is reasonable to me.

&gt; Source/WTF/wtf/Expected.h:47
&gt; +    constexpr explicit UnexpectedType(E&amp;&amp; e) : val(std::move(e)) { }

Since this implementation is written for WTF tree, we can use WTFMove instead of std::move here.

&gt; Source/WTF/wtf/Expected.h:231
&gt; +&gt;::type;

Can we use WTF::Variant as a base of this WTF::Expected implementation? If we can&apos;t, why?

&gt; Source/WTF/wtf/Expected.h:433
&gt; +using WTF::Nullopt;

This line is not necessary. It is done by Optional.h.

&gt; Tools/ChangeLog:23
&gt; +2016-11-08  JF Bastien  &lt;jfbastien@apple.com&gt;
&gt; +
&gt; +        Implement WTF::Expected
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=164526
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * TestWebKitAPI/CMakeLists.txt:
&gt; +        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
&gt; +        * TestWebKitAPI/Tests/WTF/Expected.cpp: Added.
&gt; +        (TestWebKitAPI::TEST):

ChangeLog is duplicated.

&gt; Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:290
&gt; +    EXPECT_TRUE(Ex(42) == Ex(42));

Let&apos;s use EXPECT_EQ and address the warnings reported by webkit-check-style :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249678</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-09 21:15:28 -0800</bug_when>
    <thetext>I like the idea of replacing ExceptionOr with std::experimental::expected. The concepts are the same.

The idioms and naming are quite different; because of that I don’t think we should use template typedef. It’s probably a moderately big project to modify all the recently-minted ExceptionOr call sites to use the new syntax so we probably would want to do in stages. I presume we would add functions to ExceptionOr that match the names and semantics of the std::experimental::expected functions, then migrate to the new functions, and then move to template typedef, then finally consider actually moving to std::experimental::expected.

The proposal does include &quot;expected void&quot;, which is good, since ExceptionOr&lt;void&gt; seems to be working well.

I think most of the learning about this will come from trying to use it at all the call sites and seeing if the code gets more readable or more confusing.

The proposal throws exceptions when functions are called incorrectly. That won’t work for us; we want it to assert or abort in those cases.

I’m a little sad to learn about this only after I converted all our code to ExceptionOr; could have switched directly to this instead of having to revisit everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249685</commentid>
    <comment_count>7</comment_count>
      <attachid>294336</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-09 21:38:49 -0800</bug_when>
    <thetext>Created attachment 294336
patch

I&apos;ve addressed the following comments:

 - Remove Nullopt (which I was already getting from Optional, used to define my own).
 - Remove duplicate ChangeLog entry.
 - Use WTFMove, and remove erroneous copy-paste const on move ctor.
 - Implement operator&lt;&lt;(stream) to use EXPECT_* and silence warnings. It&apos;s purposefully not in the proposal, but having it in the test does make things simpler. check-webkit-style will still be sad when I use EXPECT_FALSE, please ignore it, it&apos;s silly.

I still have to try out WTF::Variant. I&apos;ll do this soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249686</commentid>
    <comment_count>8</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-09 21:41:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I like the idea of replacing ExceptionOr with std::experimental::expected.
&gt; The concepts are the same.
&gt; 
&gt; The idioms and naming are quite different; because of that I don’t think we
&gt; should use template typedef. It’s probably a moderately big project to
&gt; modify all the recently-minted ExceptionOr call sites to use the new syntax
&gt; so we probably would want to do in stages. I presume we would add functions
&gt; to ExceptionOr that match the names and semantics of the
&gt; std::experimental::expected functions, then migrate to the new functions,
&gt; and then move to template typedef, then finally consider actually moving to
&gt; std::experimental::expected.

That sounds fine, I&apos;m happy to do this asynchronously.


&gt; The proposal does include &quot;expected void&quot;, which is good, since
&gt; ExceptionOr&lt;void&gt; seems to be working well.
&gt; 
&gt; I think most of the learning about this will come from trying to use it at
&gt; all the call sites and seeing if the code gets more readable or more
&gt; confusing.

Right, I think the window is *way* open to make sure the C++20 version is nice.

 
&gt; The proposal throws exceptions when functions are called incorrectly. That
&gt; won’t work for us; we want it to assert or abort in those cases.

My implementation aborts instead of throwing.


&gt; I’m a little sad to learn about this only after I converted all our code to
&gt; ExceptionOr; could have switched directly to this instead of having to
&gt; revisit everything.

Sorry? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249899</commentid>
    <comment_count>9</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-10 12:04:53 -0800</bug_when>
    <thetext>I&apos;ve been playing with WTF::Variant as the storage, and I don&apos;t think it&apos;s a great fit:

 - Variant is designed to hold an unbounded number of values, so the index has to be implemented in a clever manner to fit in the smallest storage (potentially within the end-pad of what&apos;s held). I can just use a bit (I&apos;m using a byte right now because it&apos;s easier to read and realistically is OK).
 - There&apos;s gymnastics around &quot;valueless by exception&quot; which Expected just avoids.
 - Expected&lt;T, T&gt; is sensible, whereas Variant&lt;T, T&gt; is weird. It&apos;s allowed but is weird.
 - Expected&lt;void, E&gt; seems easier here, but I may have implementor&apos;s bias.

Further, I want std::expected to become more opinionated when something unexpected happens: I think destroying a std::expected which contains an error, without having retrieved the error first, should throw (abort for us). That&apos;s easy to do in my current implementation (&quot;bool has&quot; can be made into a bitmask), but I need extra storage if I use Variant (I can&apos;t hijack its index for that purpose). I&apos;ve already proposed this to the committee, but need to try it out at scale to see how useful / impactful it is.


What do you think Yusuke?


I think the next step is for me to clean up the Windows and GTK builds. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249908</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-10 12:22:13 -0800</bug_when>
    <thetext>OK, I think it is reasonable.
In particular, Variant&lt;T, T&gt; v.s. Expected&lt;T, T&gt; is a good reason to use WTF::Expected&apos;s own storage here.

(In reply to comment #9)
&gt; I&apos;ve been playing with WTF::Variant as the storage, and I don&apos;t think it&apos;s a
&gt; great fit:
&gt; 
&gt;  - Variant is designed to hold an unbounded number of values, so the index
&gt; has to be implemented in a clever manner to fit in the smallest storage
&gt; (potentially within the end-pad of what&apos;s held). I can just use a bit (I&apos;m
&gt; using a byte right now because it&apos;s easier to read and realistically is OK).

Yup.

&gt;  - There&apos;s gymnastics around &quot;valueless by exception&quot; which Expected just
&gt; avoids.

Is just hiding these methods behind the WTF::Expected enough?

&gt;  - Expected&lt;T, T&gt; is sensible, whereas Variant&lt;T, T&gt; is weird. It&apos;s allowed
&gt; but is weird.

That&apos;s good point!! Yeah, it should be allowed in WTF::Expected. But it is weird in WTF::Variant.

&gt;  - Expected&lt;void, E&gt; seems easier here, but I may have implementor&apos;s bias.

In that case, we can just use the WTF::Optional for the storage of Expected&lt;void, E&gt; case in the future. (I need to land WTF::Optional patch, working on that.)

&gt; 
&gt; Further, I want std::expected to become more opinionated when something
&gt; unexpected happens: I think destroying a std::expected which contains an
&gt; error, without having retrieved the error first, should throw (abort for
&gt; us). That&apos;s easy to do in my current implementation (&quot;bool has&quot; can be made
&gt; into a bitmask), but I need extra storage if I use Variant (I can&apos;t hijack
&gt; its index for that purpose). I&apos;ve already proposed this to the committee,
&gt; but need to try it out at scale to see how useful / impactful it is.
&gt; 

Interesting. Yeah, in that case, managing the own storage can save some bytes.

&gt; 
&gt; What do you think Yusuke?
&gt; 
&gt; 
&gt; I think the next step is for me to clean up the Windows and GTK builds. :-)

GTK build seems related to move accessors &amp; reference accessors. They are not supported in the old gcc.
Due to some distributions, we need to stick on old GCC, that&apos;s so sad :(.
https://lists.webkit.org/pipermail/webkit-dev/2016-September/028438.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250169</commentid>
    <comment_count>11</comment_count>
      <attachid>294473</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-10 22:24:13 -0800</bug_when>
    <thetext>Created attachment 294473
patch

Address some of the GTK bot&apos;s complaints:
 - Avoid anonymous namespace.
 - Add RELAXED_CONSTEXPR because GTK&apos;s version of GCC (4.9 or earlier?) doesn&apos;t support C++14 relaxed constant expressions.

I don&apos;t think this fixes all of GTK&apos;s sads, but it&apos;ll fix some. I&apos;ll have to look at whatever falls out of GTK next, and Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250248</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-11 09:03:47 -0800</bug_when>
    <thetext>Attachment 294473 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:374:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:374:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:375:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:376:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:377:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:378:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:379:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:390:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:391:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:392:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:393:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:394:  Consider using EXPECT_GT instead of EXPECT_FALSE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:395:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Source/WTF/wtf/Expected.h:230:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Expected.h:274:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:343:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:422:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Expected.h:428:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 18 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250533</commentid>
    <comment_count>13</comment_count>
      <attachid>294570</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-11 17:23:12 -0800</bug_when>
    <thetext>Created attachment 294570
patch

GTK was happy in the last patch, and MSVC got happier. Try to resolve the last MSVC issue (I think it doesn&apos;t like explicitly destroying trivially-destructible types).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250534</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-11 17:24:31 -0800</bug_when>
    <thetext>Attachment 294570 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:374:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:374:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:375:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:376:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:377:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:378:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:379:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:390:  Consider using EXPECT_NE instead of EXPECT_FALSE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:391:  Consider using EXPECT_EQ instead of EXPECT_FALSE(a != b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:392:  Consider using EXPECT_GE instead of EXPECT_FALSE(a &lt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:393:  Consider using EXPECT_LE instead of EXPECT_FALSE(a &gt; b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:394:  Consider using EXPECT_GT instead of EXPECT_FALSE(a &lt;= b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:395:  Consider using EXPECT_LT instead of EXPECT_FALSE(a &gt;= b)  [readability/check] [2]
ERROR: Source/WTF/wtf/Expected.h:233:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Expected.h:277:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:346:  Use &apos;using namespace std;&apos; instead of &apos;using std::swap;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/Expected.h:425:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Expected.h:431:  result_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 18 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250584</commentid>
    <comment_count>15</comment_count>
      <attachid>294570</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-11 20:22:27 -0800</bug_when>
    <thetext>Comment on attachment 294570
patch

Wooh! GTK and MSVC pass :-)
Good to go?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250606</commentid>
    <comment_count>16</comment_count>
      <attachid>294570</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 22:57:40 -0800</bug_when>
    <thetext>Comment on attachment 294570
patch

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

r=me with comments. Nice.

&gt; Source/WTF/ChangeLog:4
&gt; +        Implement WTF::Expected
&gt; +

This is not necessary

&gt; Source/WTF/ChangeLog:18
&gt; +        std::expected isn&apos;t in C++17, and may be in C++20. It&apos;s a nice
&gt; +        complement to std::any / std::optional because it&apos;s a type-tagged
&gt; +        union which has a single expected result but could also contain an
&gt; +        error.
&gt; +
&gt; +        This would be useful in the WebAssembly parser, for example.
&gt; +
&gt; +        Using this implementation will allow us to provide feedback to the
&gt; +        standards committee and guide std::expected&apos;s design before it
&gt; +        gets standardized. I&apos;ve already sent a bunch of feedback to the
&gt; +        author based on my experience implementing this.
&gt; +
&gt; +        This could supplement WTF::Either and WTF::ExceptionOr.
&gt; +

These lines should be L23~.

&gt; Tools/ChangeLog:22
&gt; +        Implement WTF::Expected
&gt; +
&gt; +        std::expected isn&apos;t in C++17, and may be in C++20. It&apos;s a nice
&gt; +        complement to std::any / std::optional because it&apos;s a type-tagged
&gt; +        union which has a single expected result but could also contain an
&gt; +        error.
&gt; +
&gt; +        This would be useful in the WebAssembly parser, for example.
&gt; +
&gt; +        Using this implementation will allow us to provide feedback to the
&gt; +        standards committee and guide std::expected&apos;s design before it
&gt; +        gets standardized. I&apos;ve already sent a bunch of feedback to the
&gt; +        author based on my experience implementing this.
&gt; +
&gt; +        This could supplement WTF::Either and WTF::ExceptionOr.
&gt; +
&gt; +        Implement WTF::Expected
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=164526
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Ditto.

&gt; Tools/TestWebKitAPI/Tests/WTF/Expected.cpp:88
&gt; +}

Can you add a test to ensure the correct destructor is called?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250841</commentid>
    <comment_count>17</comment_count>
      <attachid>294670</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-13 10:56:26 -0800</bug_when>
    <thetext>Created attachment 294670
patch

Address comments:

 - Fix ChangeLog.
 - Add destructor test.

Also fix CMake build which was broken by:
  https://bugs.webkit.org/show_bug.cgi?id=164595</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250849</commentid>
    <comment_count>18</comment_count>
      <attachid>294670</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-13 11:31:45 -0800</bug_when>
    <thetext>Comment on attachment 294670
patch

Clearing flags on attachment: 294670

Committed r208670: &lt;http://trac.webkit.org/changeset/208670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250850</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-13 11:31:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294206</attachid>
            <date>2016-11-08 17:36:01 -0800</date>
            <delta_ts>2016-11-09 21:38:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Implement-WTF-Expected.patch</filename>
            <type>text/plain</type>
            <size>49038</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBhNGUxZTlkMzkxZmQ4MjkyZWI4NjM2ZjAzNjcxNDhiNzJmM2QwMmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDggTm92IDIwMTYgMTc6MjM6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1l
bnQgV1RGOjpFeHBlY3RlZAoKc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1heSBi
ZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKY29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0
aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xl
IGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCmVycm9yLgoKVGhpcyB3
b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCgpV
c2luZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYWxsb3cgdXMgdG8gcHJvdmlkZSBmZWVkYmFj
ayB0byB0aGUKc3RhbmRhcmRzIGNvbW1pdHRlZSBhbmQgZ3VpZGUgc3RkOjpleHBlY3RlZCdzIGRl
c2lnbiBiZWZvcmUgaXQKZ2V0cyBzdGFuZGFyZGl6ZWQuIEkndmUgYWxyZWFkeSBzZW50IGEgYnVu
Y2ggb2YgZmVlZGJhY2sgdG8gdGhlCmF1dGhvciBiYXNlZCBvbiBteSBleHBlcmllbmNlIGltcGxl
bWVudGluZyB0aGlzLgoKVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6
OkV4Y2VwdGlvbk9yLgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDQ3ICsrKwogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiAgICAgICAgICAgfCAgIDQgKwogU291cmNlL1dURi93dGYvRXhwZWN0ZWQuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCA0MzkgKysrKysrKysrKysrKysrKysrKysrCiBUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArKwogVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgfCAgIDIgKwog
Li4uL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgfCAgIDQg
KwogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRXhwZWN0ZWQuY3BwICAgICAgICAgfCA0
MTMgKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA5MzMgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IDM5ZGJiOGIuLmUzNDgwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTYtMTEtMDggIEpG
IEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBXVEY6
OkV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQ1MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBzdGQ6OmV4cGVjdGVkIGlzbid0IGluIEMrKzE3LCBhbmQgbWF5IGJlIGluIEMrKzIwLiBJdCdz
IGEgbmljZQorICAgICAgICBjb21wbGVtZW50IHRvIHN0ZDo6YW55IC8gc3RkOjpvcHRpb25hbCBi
ZWNhdXNlIGl0J3MgYSB0eXBlLXRhZ2dlZAorICAgICAgICB1bmlvbiB3aGljaCBoYXMgYSBzaW5n
bGUgZXhwZWN0ZWQgcmVzdWx0IGJ1dCBjb3VsZCBhbHNvIGNvbnRhaW4gYW4KKyAgICAgICAgZXJy
b3IuCisKKyAgICAgICAgVGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBh
cnNlciwgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgVXNpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiB3
aWxsIGFsbG93IHVzIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdGhlCisgICAgICAgIHN0YW5kYXJk
cyBjb21taXR0ZWUgYW5kIGd1aWRlIHN0ZDo6ZXhwZWN0ZWQncyBkZXNpZ24gYmVmb3JlIGl0Cisg
ICAgICAgIGdldHMgc3RhbmRhcmRpemVkLiBJJ3ZlIGFscmVhZHkgc2VudCBhIGJ1bmNoIG9mIGZl
ZWRiYWNrIHRvIHRoZQorICAgICAgICBhdXRob3IgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSBpbXBs
ZW1lbnRpbmcgdGhpcy4KKworICAgICAgICBUaGlzIGNvdWxkIHN1cHBsZW1lbnQgV1RGOjpFaXRo
ZXIgYW5kIFdURjo6RXhjZXB0aW9uT3IuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRXhwZWN0ZWQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlVuZXhwZWN0ZWRUeXBlOjpVbmV4cGVjdGVkVHlwZSk6CisgICAgICAgIChXVEY6OlVuZXhw
ZWN0ZWRUeXBlOjp2YWx1ZSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjptYWtlVW5leHBlY3RlZCk6CisgICAgICAgIChX
VEY6OkV4cGVjdGVkOjpFeHBlY3RlZCk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6c3dhcCk6CisgICAgICAgIChXVEY6OkV4cGVj
dGVkOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6Om9wZXJhdG9yKik6Cisg
ICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6RXhw
ZWN0ZWQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OnZhbHVlKToKKyAgICAg
ICAgKFdURjo6RXhwZWN0ZWQ6OmVycm9yKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OmdldFVu
ZXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6dmFsdWVPcik6CisgICAgICAgIChX
VEY6OnN3YXApOgorICAgICAgICAoV1RGOjptYWtlRXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpt
YWtlRXhwZWN0ZWRGcm9tRXJyb3IpOgorCiAyMDE2LTExLTA1ICBLb25zdGFudGluIFRva2FyZXYg
IDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBGaXhlZCBjb21waWxhdGlvbiBvZiBMTElu
dCB3aXRoIE1pbkdXCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBjNjYyOGM1Li5mMDU3OTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTMyOCw2ICszMjgsNyBAQAogCQlBOEE0NzQ4NjE1MUE4MjVCMDA0MTIzRkYgLyog
V1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi87
IH07CiAJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3QjE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovOyB9OwogCQlBOEE0NzQ4QzE1MUE4MjY0MDA0
MTIzRkYgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi87IH07CisJCUFE
N0M0MzRCMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4
cGVjdGVkLmggKi87IH07CiAJCUIzOEZEN0JEMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVm
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjM4
RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi87IH07CiAJCUM0RjhB
OTM3MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9w
d2F0Y2guaCAqLzsgfTsKIAkJQzhCMEUxQTFFMDFBNDg2RUI5NUUwRDExIC8qIEluZGV4U2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM3RTFEN0RC
RDg0QUMzOEZBRTREMzQgLyogSW5kZXhTZXQuaCAqLzsgfTsKQEAgLTY5NSw2ICs2OTYsNyBAQAog
CQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVh
ZERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYg
LyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyog
RXhwZWN0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwZWN0ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8q
IEZlYXR1cmVEZWZpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1
cmVEZWZpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVF
QjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcHdhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTQ5N0FBMTU4
NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg0OCw2ICs4NTAsNyBAQAogCQlBODc2REJENjE1MTgxNkU1MDBEQURCOTUgLyogd3RmICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBRDdDNDM0QTFERDJB
NEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCAqLywKIAkJCQkyQ0RFRDBGMDE4MTE1QzNGMDA0REJB
NzAgLyogY2YgKi8sCiAJCQkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovLAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLApAQCAtMTQ1Nyw2ICsxNDYw
LDcgQEAKIAkJCQlBOEE0NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdF
eHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDdDNDM0QjFERDJBNEE3MDAyNjg4OEIg
LyogRXhwZWN0ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRD
QiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQx
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ0MjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nT3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmggYi9Tb3VyY2UvV1RGL3d0Zi9F
eHBlY3RlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTU2NzcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FeHBlY3RlZC5oCkBAIC0wLDAgKzEsNDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gV1RGOjpFeHBlY3RlZCBpcyBiYXNlZCBvbiBzdGQ6OmV4cGVj
dGVkLCBhcyBkZXNjcmliZWQgaGVyZTogaHR0cDovL3dnMjEubGluay9wMDMyM3IxCisvLyBUaGUg
c3BlY2lmaWNhdGlvbiBleHBlY3RzIHRvIHRocm93LiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNu
J3Qgc3VwcG9ydCBleGNlcHRpb25zLCB1c2VzIFJFTEVBU0VfQVNTRVJUIGluc3RlYWQuCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5j
bHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlIDxjbGFzcyBFPgorY2xhc3MgVW5leHBlY3RlZFR5cGUgeworcHVi
bGljOgorICAgIFVuZXhwZWN0ZWRUeXBlKCkgPSBkZWxldGU7CisgICAgY29uc3RleHByIGV4cGxp
Y2l0IFVuZXhwZWN0ZWRUeXBlKGNvbnN0IEUmIGUpIDogdmFsKGUpIHsgfQorICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBVbmV4cGVjdGVkVHlwZShFJiYgZSkgOiB2YWwoc3RkOjptb3ZlKGUpKSB7IH0K
KyAgICBjb25zdGV4cHIgY29uc3QgRSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWw7IH0KKyAg
ICBjb25zdGV4cHIgRSYgdmFsdWUoKSB7IHJldHVybiB2YWw7IH0KKworcHJpdmF0ZToKKyAgICBF
IHZhbDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBy
aHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpID09IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xh
c3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYg
bGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSAh
PSByaHMudmFsdWUoKTsgfQordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPChjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxF
PiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSA8IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8
Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+
JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgp
ID4gcmhzLnZhbHVlKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBl
PEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpIDw9IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0
ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBVbmV4cGVjdGVkVHlw
ZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFs
dWUoKSA+PSByaHMudmFsdWUoKTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIFVu
ZXhwZWN0ZWRUeXBlPHN0ZDo6ZGVjYXlfdDxFPj4gbWFrZVVuZXhwZWN0ZWQoRSYmIHYpIHsgcmV0
dXJuIFVuZXhwZWN0ZWRUeXBlPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RT46OnR5cGU+KHN0ZDo6Zm9y
d2FyZDxFPih2KSk7IH0KKworc3RydWN0IFVuZXhwZWN0VGFnIHsKKyAgICBVbmV4cGVjdFRhZygp
ID0gZGVsZXRlOworfTsKK2NvbnN0ZXhwciBVbmV4cGVjdFRhZyBVbmV4cGVjdCB7IH07CisKK25h
bWVzcGFjZSB7CisKKy8vIEludm9rZWQgd2hlcmUgc3RkOjpFeHBlY3RlZCB3b3VsZCBpbnN0ZWFk
IHRocm93LgorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIEV4cGVjdGVkVGhyb3coKSB7IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworc3RhdGljIGNvbnN0ZXhwciBlbnVtIGNs
YXNzIEV4cGVjdGVkVmFsdWVUYWdUeXBlIHsgfSBFeHBlY3RlZFZhbHVlVGFnIHsgfTsKK3N0YXRp
YyBjb25zdGV4cHIgZW51bSBjbGFzcyBFeHBlY3RlZEVycm9yVGFnVHlwZSB7IH0gRXhwZWN0ZWRF
cnJvclRhZyB7IH07CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgordW5pb24gRXhwZWN0
ZWRDb25zdGV4cHJTdG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVk
ZWYgRSBFcnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5cGUgdmFsOworICAg
IEVycm9yVHlwZSBlcnI7CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZSgp
IDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJTdG9yYWdlKEV4
cGVjdGVkVmFsdWVUYWdUeXBlKSA6IHZhbCgpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZENv
bnN0ZXhwclN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9CisgICAgY29u
c3RleHByIEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZShFeHBlY3RlZFZhbHVlVGFnVHlwZSwgY29u
c3QgVmFsdWVUeXBlJiB2KSA6IHZhbCh2KSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25z
dGV4cHJTdG9yYWdlKEV4cGVjdGVkRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGUpIDog
ZXJyKGUpIHsgfQorICAgIH5FeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2UoKSA9IGRlZmF1bHQ7Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3VuaW9uIEV4cGVjdGVkU3RvcmFnZSB7
CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAg
IGNoYXIgZHVtbXk7CisgICAgVmFsdWVUeXBlIHZhbDsKKyAgICBFcnJvclR5cGUgZXJyOworICAg
IGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoKSA6IGR1bW15KCkgeyB9CisgICAgY29uc3RleHBy
IEV4cGVjdGVkU3RvcmFnZShFeHBlY3RlZFZhbHVlVGFnVHlwZSkgOiB2YWwoKSB7IH0KKyAgICBj
b25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdlKEV4cGVjdGVkRXJyb3JUYWdUeXBlKSA6IGVycigpIHsg
fQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoRXhwZWN0ZWRWYWx1ZVRhZ1R5cGUsIGNv
bnN0IFZhbHVlVHlwZSYgdmFsKSA6IHZhbCh2YWwpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3Rl
ZFN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IGVy
cihlcnIpIHsgfQorICAgIH5FeHBlY3RlZFN0b3JhZ2UoKSB7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBFPgordW5pb24gRXhwZWN0ZWRDb25zdGV4cHJTdG9yYWdlPHZvaWQsIEU+IHsKKyAgICB0
eXBlZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgY2hh
ciBkdW1teTsKKyAgICBFcnJvclR5cGUgZXJyOworICAgIGNvbnN0ZXhwciBFeHBlY3RlZENvbnN0
ZXhwclN0b3JhZ2UoKSA6IGR1bW15KCkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3Rl
eHByU3RvcmFnZShFeHBlY3RlZFZhbHVlVGFnVHlwZSkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0
ZXhwciBFeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUpIDogZXJy
KCkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZShFeHBlY3RlZEVy
cm9yVGFnVHlwZSwgY29uc3QgRXJyb3JUeXBlJiBlKSA6IGVycihlKSB7IH0KKyAgICB+RXhwZWN0
ZWRDb25zdGV4cHJTdG9yYWdlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+
Cit1bmlvbiBFeHBlY3RlZFN0b3JhZ2U8dm9pZCwgRT4geworICAgIHR5cGVkZWYgdm9pZCBWYWx1
ZVR5cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBjaGFyIGR1bW15OworICAgIEVy
cm9yVHlwZSBlcnI7CisgICAgY29uc3RleHByIEV4cGVjdGVkU3RvcmFnZSgpIDogZHVtbXkoKSB7
IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdlKEV4cGVjdGVkVmFsdWVUYWdUeXBlKSA6
IGR1bW15KCkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkU3RvcmFnZShFeHBlY3RlZEVycm9y
VGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdlKEV4cGVj
dGVkRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBlcnIoZXJyKSB7IH0KKyAg
ICB+RXhwZWN0ZWRTdG9yYWdlKCkgeyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4KK3N0cnVjdCBFeHBlY3RlZENvbnN0ZXhwckJhc2UgeworICAgIHR5cGVkZWYgVCBWYWx1ZVR5
cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBFeHBlY3RlZENvbnN0ZXhwclN0b3Jh
Z2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7CisgICAgYm9vbCBoYXM7CisgICAgY29uc3RleHBy
IEV4cGVjdGVkQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3Rl
eHByIEV4cGVjdGVkQ29uc3RleHByQmFzZShFeHBlY3RlZFZhbHVlVGFnVHlwZSB0YWcpIDogcyh0
YWcpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByQmFzZShF
eHBlY3RlZEVycm9yVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNv
bnN0ZXhwciBFeHBlY3RlZENvbnN0ZXhwckJhc2UoRXhwZWN0ZWRWYWx1ZVRhZ1R5cGUgdGFnLCBj
b25zdCBWYWx1ZVR5cGUmIHZhbCkgOiBzKHRhZywgdmFsKSwgaGFzKHRydWUpIHsgfQorICAgIGNv
bnN0ZXhwciBFeHBlY3RlZENvbnN0ZXhwckJhc2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUgdGFnLCBj
b25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZhbHNlKSB7IH0KKyAgICB+
RXhwZWN0ZWRDb25zdGV4cHJCYXNlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEU+CitzdHJ1Y3QgRXhwZWN0ZWRCYXNlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVU
eXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgRXhwZWN0ZWRTdG9yYWdlPFZhbHVl
VHlwZSwgRXJyb3JUeXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBFeHBlY3Rl
ZEJhc2UoKSA6IHMoKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZEJhc2Uo
RXhwZWN0ZWRWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFzKHRydWUpIHsgfQorICAgIGNv
bnN0ZXhwciBFeHBlY3RlZEJhc2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFnKSwg
aGFzKGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRCYXNlKEV4cGVjdGVkVmFsdWVU
YWdUeXBlIHRhZywgY29uc3QgVmFsdWVUeXBlJiB2YWwpIDogcyh0YWcsIHZhbCksIGhhcyh0cnVl
KSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRCYXNlKEV4cGVjdGVkRXJyb3JUYWdUeXBlIHRh
ZywgY29uc3QgRXJyb3JUeXBlJiBlcnIpIDogcyh0YWcsIGVyciksIGhhcyhmYWxzZSkgeyB9Cisg
ICAgRXhwZWN0ZWRCYXNlKGNvbnN0IEV4cGVjdGVkQmFzZSYgbykKKyAgICAgICAgOiBoYXMoby5o
YXMpCisgICAgeworICAgICAgICBpZiAoaGFzKQorICAgICAgICAgICAgOjpuZXcgKCZzLnZhbCkg
VmFsdWVUeXBlKG8ucy52YWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICA6Om5ldyAoJnMu
ZXJyKSBFcnJvclR5cGUoby5zLmVycik7CisgICAgfQorICAgIEV4cGVjdGVkQmFzZShjb25zdCBF
eHBlY3RlZEJhc2UmJiBvKQorICAgICAgICA6IGhhcyhvLmhhcykKKyAgICB7CisgICAgICAgIGlm
IChoYXMpCisgICAgICAgICAgICA6Om5ldyAoJnMudmFsKSBWYWx1ZVR5cGUoc3RkOjptb3ZlKG8u
cy52YWwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgOjpuZXcgKCZzLmVycikgRXJyb3JU
eXBlKHN0ZDo6bW92ZShvLnMuZXJyKSk7CisgICAgfQorICAgIH5FeHBlY3RlZEJhc2UoKQorICAg
IHsKKyAgICAgICAgaWYgKGhhcykKKyAgICAgICAgICAgIHMudmFsLlZhbHVlVHlwZTo6flZhbHVl
VHlwZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzLmVyci5FcnJvclR5cGU6On5FcnJv
clR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK3N0cnVjdCBFeHBlY3Rl
ZENvbnN0ZXhwckJhc2U8dm9pZCwgRT4geworICAgIHR5cGVkZWYgdm9pZCBWYWx1ZVR5cGU7Cisg
ICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBFeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2U8VmFs
dWVUeXBlLCBFcnJvclR5cGU+IHM7CisgICAgYm9vbCBoYXM7CisgICAgY29uc3RleHByIEV4cGVj
dGVkQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIEV4
cGVjdGVkQ29uc3RleHByQmFzZShFeHBlY3RlZFZhbHVlVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBo
YXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByQmFzZShFeHBlY3Rl
ZEVycm9yVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNvbnN0ZXhw
ciBFeHBlY3RlZENvbnN0ZXhwckJhc2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUgdGFnLCBjb25zdCBF
cnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZhbHNlKSB7IH0KKyAgICB+RXhwZWN0
ZWRDb25zdGV4cHJCYXNlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+Citz
dHJ1Y3QgRXhwZWN0ZWRCYXNlPHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgRXhwZWN0ZWRTdG9yYWdlPFZhbHVlVHlw
ZSwgRXJyb3JUeXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBFeHBlY3RlZEJh
c2UoKSA6IHMoKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZEJhc2UoRXhw
ZWN0ZWRWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0
ZXhwciBFeHBlY3RlZEJhc2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFz
KGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRCYXNlKEV4cGVjdGVkRXJyb3JUYWdU
eXBlIHRhZywgY29uc3QgRXJyb3JUeXBlJiBlcnIpIDogcyh0YWcsIGVyciksIGhhcyhmYWxzZSkg
eyB9CisgICAgRXhwZWN0ZWRCYXNlKGNvbnN0IEV4cGVjdGVkQmFzZSYgbykKKyAgICAgICAgOiBo
YXMoby5oYXMpCisgICAgeworICAgICAgICBpZiAoIWhhcykKKyAgICAgICAgICAgIDo6bmV3ICgm
cy5lcnIpIEVycm9yVHlwZShvLnMuZXJyKTsKKyAgICB9CisgICAgRXhwZWN0ZWRCYXNlKGNvbnN0
IEV4cGVjdGVkQmFzZSYmIG8pCisgICAgICAgIDogaGFzKG8uaGFzKQorICAgIHsKKyAgICAgICAg
aWYgKCFoYXMpCisgICAgICAgICAgICA6Om5ldyAoJnMuZXJyKSBFcnJvclR5cGUoc3RkOjptb3Zl
KG8ucy5lcnIpKTsKKyAgICB9CisgICAgfkV4cGVjdGVkQmFzZSgpCisgICAgeworICAgICAgICBp
ZiAoIWhhcykKKyAgICAgICAgICAgIHMuZXJyLkVycm9yVHlwZTo6fkVycm9yVHlwZSgpOworICAg
IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgordXNpbmcgRXhwZWN0ZWRCYXNl
U2VsZWN0ID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAoKHN0ZDo6aXNfdm9pZDxU
Pjo6dmFsdWUgfHwgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKKyAg
ICAgICAgJiYgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEU+Ojp2YWx1ZSksCisgICAg
RXhwZWN0ZWRDb25zdGV4cHJCYXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBl
LCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxFPjo6dHlwZT4sCisgICAgRXhwZWN0ZWRCYXNl
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlLCB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9jb25zdDxFPjo6dHlwZT4KKz46OnR5cGU7CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK2NsYXNzIEV4cGVjdGVkIDogcHJpdmF0ZSBF
eHBlY3RlZEJhc2VTZWxlY3Q8VCwgRT4geworICAgIHR5cGVkZWYgRXhwZWN0ZWRCYXNlU2VsZWN0
PFQsIEU+IGJhc2U7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2U6OlZhbHVl
VHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpFcnJvclR5cGUgRXJy
b3JUeXBlOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgRXhwZWN0ZWQ8VmFsdWVUeXBlLCBFcnJv
clR5cGU+IHR5cGU7CisKK3B1YmxpYzoKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RydWN0
IHJlYmluZCB7IHVzaW5nIHR5cGUgPSBFeHBlY3RlZDxVLCBFcnJvclR5cGU+OyB9OworCisgICAg
Y29uc3RleHByIEV4cGVjdGVkKCkgOiBiYXNlKEV4cGVjdGVkVmFsdWVUYWcpIHsgfQorICAgIEV4
cGVjdGVkKGNvbnN0IEV4cGVjdGVkJikgPSBkZWZhdWx0OworICAgIEV4cGVjdGVkKEV4cGVjdGVk
JiYpID0gZGVmYXVsdDsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoY29uc3QgVmFsdWVUeXBlJiBl
KSA6IGJhc2UoRXhwZWN0ZWRWYWx1ZVRhZywgZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVk
KFZhbHVlVHlwZSYmIGUpIDogYmFzZShFeHBlY3RlZFZhbHVlVGFnLCBzdGQ6Om1vdmUoZSkpIHsg
fQorICAgIC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhw
ZWN0ZWQoaW5fcGxhY2VfdCwgQXJncyYmLi4uKTsKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MgVSwg
Y2xhc3MuLi4gQXJncz4gY29uc3RleHByIGV4cGxpY2l0IEV4cGVjdGVkKGluX3BsYWNlX3QsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKyAgICBjb25zdGV4cHIgRXhwZWN0
ZWQoVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPiBjb25zdCYgdSkgOiBiYXNlKEV4cGVjdGVkRXJy
b3JUYWcsIHUudmFsdWUoKSkgeyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEVycj4gY29uc3RleHBy
IEV4cGVjdGVkKFVuZXhwZWN0ZWRUeXBlPEVycj4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZEVy
cm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorICAgIC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBj
b25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQoVW5leHBlY3RUYWcsIEFyZ3MmJi4uLik7CisgICAg
Ly8gdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGNvbnN0ZXhwciBleHBsaWNpdCBF
eHBlY3RlZChVbmV4cGVjdFRhZywgc3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4p
OworCisgICAgfkV4cGVjdGVkKCkgPSBkZWZhdWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9y
PShjb25zdCBFeHBlY3RlZCYgZSkgeyB0eXBlKGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7
IH0KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KEV4cGVjdGVkJiYgZSkgeyB0eXBlKHN0ZDo6bW92
ZShlKSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBV
PiBFeHBlY3RlZCYgb3BlcmF0b3I9KFUmJiB1KSB7IHR5cGUoc3RkOjptb3ZlKHUpKS5zd2FwKCp0
aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBVbmV4
cGVjdGVkVHlwZTxFcnJvclR5cGU+JiB1KSB7IHR5cGUodSkuc3dhcCgqdGhpcyk7IHJldHVybiAq
dGhpczsgfQorICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBl
PiYmIHUpIHsgdHlwZShzdGQ6Om1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0K
KyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4gdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLik7
CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgZW1wbGFjZShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB2b2lkIHN3YXAoRXhw
ZWN0ZWQmIG8pCisgICAgeworICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CisgICAgICAgIGlmIChi
YXNlOjpoYXMgJiYgby5oYXMpCisgICAgICAgICAgICBzd2FwKGJhc2U6OnMudmFsLCBvLnMudmFs
KTsKKyAgICAgICAgZWxzZSBpZiAoYmFzZTo6aGFzICYmICFvLmhhcykgeworICAgICAgICAgICAg
RXJyb3JUeXBlIGUoc3RkOjptb3ZlKG8ucy5lcnIpKTsKKyAgICAgICAgICAgIDo6bmV3ICgmby5z
LnZhbCkgVmFsdWVUeXBlKHN0ZDo6bW92ZShiYXNlOjpzLnZhbCkpOworICAgICAgICAgICAgOjpu
ZXcgKCZiYXNlOjpzLmVycikgRXJyb3JUeXBlKGUpOworICAgICAgICAgICAgc3dhcChiYXNlOjpo
YXMsIG8uaGFzKTsKKyAgICAgICAgfSBlbHNlIGlmICghYmFzZTo6aGFzICYmIG8uaGFzKSB7Cisg
ICAgICAgICAgICBWYWx1ZVR5cGUgdihzdGQ6Om1vdmUoby5zLnZhbCkpOworICAgICAgICAgICAg
OjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoc3RkOjptb3ZlKGJhc2U6OnMuZXJyKSk7CisgICAg
ICAgICAgICA6Om5ldyAoJmJhc2U6OnMudmFsKSBWYWx1ZVR5cGUodik7CisgICAgICAgICAgICBz
d2FwKGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN3YXAo
YmFzZTo6cy5lcnIsIG8ucy5lcnIpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBjb25zdCBWYWx1
ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmYmFzZTo6cy52YWw7IH0KKyAgICBW
YWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmYmFzZTo6cy52YWw7IH0KKyAgICBjb25z
dGV4cHIgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCAmIHsgcmV0dXJuIGJhc2U6
OnMudmFsOyB9CisgICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSAmIHsgcmV0dXJuIGJhc2U6OnMu
dmFsOyB9CisgICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSYmIG9wZXJhdG9yKigpIGNvbnN0
ICYmIHsgcmV0dXJuIHN0ZDo6bW92ZShiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIgVmFs
dWVUeXBlJiYgb3BlcmF0b3IqKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKGJhc2U6OnMudmFsKTsg
fQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
YmFzZTo6aGFzOyB9CisgICAgY29uc3RleHByIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVy
biBiYXNlOjpoYXM7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSgpIGNv
bnN0ICYgeyByZXR1cm4gYmFzZTo6aGFzID8gYmFzZTo6cy52YWwgOiAoRXhwZWN0ZWRUaHJvdygp
LCBiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIgVmFsdWVUeXBlJiB2YWx1ZSgpICYgeyBy
ZXR1cm4gYmFzZTo6aGFzID8gYmFzZTo6cy52YWwgOiAoRXhwZWN0ZWRUaHJvdygpLCBiYXNlOjpz
LnZhbCk7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlJiYgdmFsdWUoKSBjb25zdCAm
JiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNlOjpzLnZhbCA6IChFeHBlY3RlZFRocm93KCksIGJh
c2U6OnMudmFsKTsgfQorICAgIGNvbnN0ZXhwciBWYWx1ZVR5cGUmJiB2YWx1ZSgpICYmIHsgcmV0
dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkVGhyb3coKSwgYmFzZTo6cy52
YWwpOyB9CisgICAgY29uc3RleHByIGNvbnN0IEVycm9yVHlwZSYgZXJyb3IoKSBjb25zdCAmIHsg
cmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6
OnMuZXJyKTsgfQorICAgIEVycm9yVHlwZSYgZXJyb3IoKSAmIHsgcmV0dXJuICFiYXNlOjpoYXMg
PyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNv
bnN0ZXhwciBFcnJvclR5cGUmJiBlcnJvcigpICYmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNl
OjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhw
ciBjb25zdCBFcnJvclR5cGUmJiBlcnJvcigpIGNvbnN0ICYmIHsgcmV0dXJuICFiYXNlOjpoYXMg
PyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNv
bnN0ZXhwciBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+KGJhc2U6OnMuZXJyKTsgfQorICAgIHRl
bXBsYXRlIDxjbGFzcyBVPiBjb25zdGV4cHIgVmFsdWVUeXBlIHZhbHVlT3IoVSYmIHUpIGNvbnN0
ICYgeyByZXR1cm4gYmFzZTo6aGFzID8gKip0aGlzIDogc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihz
dGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFZhbHVlVHlwZSB2
YWx1ZU9yKFUmJiB1KSAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBzdGQ6Om1vdmUoKip0aGlzKSA6
IHN0YXRpY19jYXN0PFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFU+KHUpKTsgfQorfTsKKwordGVt
cGxhdGUgPGNsYXNzIEU+CitjbGFzcyBFeHBlY3RlZDx2b2lkLCBFPiA6IHByaXZhdGUgRXhwZWN0
ZWRCYXNlU2VsZWN0PHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIEV4cGVjdGVkQmFzZVNlbGVjdDx2
b2lkLCBFPiBiYXNlOworCitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpWYWx1
ZVR5cGUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6RXJyb3JUeXBlIEVy
cm9yVHlwZTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJy
b3JUeXBlPiB0eXBlOworCitwdWJsaWM6CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVj
dCByZWJpbmQgeyB0eXBlZGVmIEV4cGVjdGVkPFUsIEVycm9yVHlwZT4gdHlwZTsgfTsKKworICAg
IGNvbnN0ZXhwciBFeHBlY3RlZCgpIDogYmFzZShFeHBlY3RlZFZhbHVlVGFnKSB7IH0KKyAgICBF
eHBlY3RlZChjb25zdCBFeHBlY3RlZCYpID0gZGVmYXVsdDsKKyAgICBFeHBlY3RlZChFeHBlY3Rl
ZCYmKSA9IGRlZmF1bHQ7CisgICAgLy8gY29uc3RleHByIGV4cGxpY2l0IEV4cGVjdGVkKGluX3Bs
YWNlX3QpOworICAgIGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFPiBjb25zdCYg
dSkgOiBiYXNlKEV4cGVjdGVkRXJyb3JUYWcsIHUudmFsdWUoKSkgeyB9CisgICAgdGVtcGxhdGUg
PGNsYXNzIEVycj4gY29uc3RleHByIEV4cGVjdGVkKFVuZXhwZWN0ZWRUeXBlPEVycj4gY29uc3Qm
IHUpIDogYmFzZShFeHBlY3RlZEVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorCisgICAgfkV4cGVj
dGVkKCkgPSBkZWZhdWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBFeHBlY3Rl
ZCYgZSkgeyB0eXBlKGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBlY3Rl
ZCYgb3BlcmF0b3I9KEV4cGVjdGVkJiYgZSkgeyB0eXBlKHN0ZDo6bW92ZShlKSkuc3dhcCgqdGhp
cyk7IHJldHVybiAqdGhpczsgfQorICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgVW5leHBl
Y3RlZFR5cGU8RT4mIHUpIHsgdHlwZSh1KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9IC8v
IE5vdCBpbiB0aGUgY3VycmVudCBwYXBlci4KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KFVuZXhw
ZWN0ZWRUeXBlPEU+JiYgdSkgeyB0eXBlKHN0ZDo6bW92ZSh1KSkuc3dhcCgqdGhpcyk7IHJldHVy
biAqdGhpczsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisgICAgLy8gdm9pZCBlbXBs
YWNlKCk7CisKKyAgICB2b2lkIHN3YXAoRXhwZWN0ZWQmIG8pCisgICAgeworICAgICAgICB1c2lu
ZyBzdGQ6OnN3YXA7CisgICAgICAgIGlmIChiYXNlOjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAg
ICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0gZWxzZSBpZiAoYmFzZTo6aGFzICYmICFvLmhh
cykgeworICAgICAgICAgICAgRXJyb3JUeXBlIGUoc3RkOjptb3ZlKG8ucy5lcnIpKTsKKyAgICAg
ICAgICAgIDo6bmV3ICgmYmFzZTo6cy5lcnIpIEVycm9yVHlwZShlKTsKKyAgICAgICAgICAgIHN3
YXAoYmFzZTo6aGFzLCBvLmhhcyk7CisgICAgICAgIH0gZWxzZSBpZiAoIWJhc2U6OmhhcyAmJiBv
LmhhcykgeworICAgICAgICAgICAgOjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoc3RkOjptb3Zl
KGJhc2U6OnMuZXJyKSk7CisgICAgICAgICAgICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN3YXAoYmFzZTo6cy5lcnIsIG8ucy5lcnIpOworICAg
IH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gYmFzZTo6aGFzOyB9CisgICAgY29uc3RleHByIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBiYXNlOjpoYXM7IH0KKyAgICB2b2lkIHZhbHVlKCkgY29uc3QgeyAhYmFzZTo6aGFzID8g
RXhwZWN0ZWRUaHJvdygpIDogdm9pZCgpOyB9CisgICAgY29uc3RleHByIGNvbnN0IEUmIGVycm9y
KCkgY29uc3QgJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWRU
aHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBFJiBlcnJvcigpICYgeyByZXR1cm4gIWJhc2U6
OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkVGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9IC8v
IE5vdCBpbiB0aGUgY3VycmVudCBwYXBlci4KKyAgICBjb25zdGV4cHIgRSYmIGVycm9yKCkgJiYg
eyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkVGhyb3coKSwgYmFz
ZTo6cy5lcnIpOyB9CisgICAgY29uc3RleHByIGNvbnN0IEUmJiBlcnJvcigpIGNvbnN0ICYmIHsg
cmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6
OnMuZXJyKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisgICAgLy8gY29uc3RleHBy
IEUmIGVycm9yKCkgJjsKKyAgICBjb25zdGV4cHIgVW5leHBlY3RlZFR5cGU8RT4gZ2V0VW5leHBl
Y3RlZCgpIGNvbnN0IHsgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPEU+KGJhc2U6OnMuZXJyKTsgfQor
fTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJl
dHVybiBib29sKHgpID09IGJvb2woeSkgJiYgKHggPyB4LnZhbHVlKCkgPT0geS52YWx1ZSgpIDog
eC5lcnJvcigpID09IHkuZXJyb3IoKSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBF
eHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gISh4ID09IHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gKCFib29sKHgpICYmIGJvb2wo
eSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYgIWJvb2woeSkpID8gdHJ1ZSA6ICgoYm9vbCh4KSAm
JiBib29sKHkpKSA/IHgudmFsdWUoKSA8IHkudmFsdWUoKSA6IHguZXJyb3IoKSA8IHkuZXJyb3Io
KSkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gISh4ID09IHkpICYmICEoeCA8IHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICh4ID09IHkpIHx8ICh4IDwgeSk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gKHgg
PT0geSkgfHwgKHggPiB5KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8dm9p
ZCwgRT4mIHkpIHsgcmV0dXJuIGJvb2woeCkgPT0gYm9vbCh5KSAmJiAoeCA/IHRydWUgOiB4LmVy
cm9yKCkgPT0geS5lcnJvcigpKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCit0ZW1w
bGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4cGVjdGVkPHZv
aWQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeSkgeyByZXR1cm4gKCFib29sKHgp
ICYmIGJvb2woeSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYgIWJvb2woeSkpID8gdHJ1ZSA6ICgo
Ym9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogeC5lcnJvcigpIDwgeS5lcnJvcigpKSk7IH0g
Ly8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVCYgeSkgeyByZXR1cm4geCA9PSBFeHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgeCwgY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID09IHk7IH0K
K3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ICE9IEV4cGVjdGVk
PFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4g
RXhwZWN0ZWQ8VCwgRT4oeCkgIT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYg
eSkgeyByZXR1cm4geCA8IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA8IHk7IH0KK3RlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4IDw9IEV4cGVjdGVkPFQsIEU+KHkp
OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8
VCwgRT4oeCkgPD0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1
cm4geCA+IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ID49IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBU
JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkg
Pj0geTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4m
IHkpIHsgcmV0dXJuIHggPT0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVuZXhwZWN0ZWRUeXBl
PEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4o
eCkgPT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+
JiB5KSB7IHJldHVybiB4ICE9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBVbmV4cGVjdGVkVHlw
ZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+
KHgpICE9IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcjwoY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+
JiB5KSB7IHJldHVybiB4IDwgRXhwZWN0ZWQ8VCwgRT4oeSk7IH0gIAordGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBVbmV4cGVjdGVkVHlw
ZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgIHJldHVybiBFeHBlY3RlZDxULCBF
Pih4KSA8IHk7IH0gIAordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBl
PEU+JiB5KSB7IHJldHVybiB4IDw9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBVbmV4cGVjdGVk
VHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQs
IEU+KHgpIDw9IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj4oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBl
PEU+JiB5KSB7IHJldHVybiB4ID4gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0gIAordGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBVbmV4cGVjdGVk
VHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQs
IEU+KHgpID4geTsgfSAgCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVW5leHBlY3RlZFR5
cGU8RT4mIHkpIHsgcmV0dXJuIHggPj0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFVuZXhwZWN0
ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8
VCwgRT4oeCkgPj0geTsgfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRT4gdm9p
ZCBzd2FwKEV4cGVjdGVkPFQsIEU+JiB4LCBFeHBlY3RlZDxULCBFPiYgeSkgeyB4LnN3YXAoeSk7
IH0KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEUgPSBXVEY6Ok51bGxvcHRUYWc+IGNvbnN0
ZXhwciBFeHBlY3RlZDxzdGQ6OmRlY2F5X3Q8VD4sIEU+IG1ha2VFeHBlY3RlZChUJiYgdikKK3sK
KyAgICByZXR1cm4gRXhwZWN0ZWQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgRT4oc3Rk
Ojpmb3J3YXJkPFQ+KHYpKTsKK30KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4
cHIgRXhwZWN0ZWQ8VCwgc3RkOjpkZWNheV90PEU+PiBtYWtlRXhwZWN0ZWRGcm9tRXJyb3IoRSYm
IGUpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIHN0ZDo6ZGVjYXlfdDxFPj4obWFrZVVuZXhwZWN0ZWQo
ZSkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRSwgY2xhc3MgVT4gY29uc3RleHByIEV4
cGVjdGVkPFQsIEU+IG1ha2VFeHBlY3RlZEZyb21FcnJvcihVJiYgdSkgeyByZXR1cm4gRXhwZWN0
ZWQ8VCwgRT4obWFrZVVuZXhwZWN0ZWQoRSB7IHN0ZDo6Zm9yd2FyZDxVPih1KSB9ICkpOyB9Cisv
LyB0ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3MgRSA9IFdURjo6TnVsbG9wdFRhZz4gY29uc3RleHBy
IEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPEY+Ojp0eXBlLCBFPiBtYWtlRXhwZWN0
ZWRfZnJvbV9jYWxsKEYgZik7CisKK0V4cGVjdGVkPHZvaWQsIFdURjo6TnVsbG9wdFRhZz4gbWFr
ZUV4cGVjdGVkKCkgeyByZXR1cm4gRXhwZWN0ZWQ8dm9pZCwgV1RGOjpOdWxsb3B0VGFnPigpOyB9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIEU+IHN0cnVjdCBoYXNoPFdURjo6RXhwZWN0ZWQ8VCwgRT4+IHsKKyAgICB0
eXBlZGVmIFdURjo6RXhwZWN0ZWQ8VCwgRT4gYXJndW1lbnRfdHlwZTsKKyAgICB0eXBlZGVmIHN0
ZDo6c2l6ZV90IHJlc3VsdF90eXBlOworICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1l
bnRfdHlwZSBjb25zdCYgZSkgY29uc3QgeyByZXR1cm4gZSA/IGhhc2g8dHlwZW5hbWUgYXJndW1l
bnRfdHlwZTo6VmFsdWVUeXBlPiB7IH0gKGUudmFsdWUoKSkgOiBoYXNoPHR5cGVuYW1lIGFyZ3Vt
ZW50X3R5cGU6OkVycm9yVHlwZT4geyB9IChlLmVycm9yKCkpOyB9Cit9OworCit0ZW1wbGF0ZSA8
Y2xhc3MgRT4gc3RydWN0IGhhc2g8V1RGOjpFeHBlY3RlZDx2b2lkLCBFPj4geworICAgIHR5cGVk
ZWYgV1RGOjpFeHBlY3RlZDx2b2lkLCBFPiBhcmd1bWVudF90eXBlOworICAgIHR5cGVkZWYgc3Rk
OjpzaXplX3QgcmVzdWx0X3R5cGU7CisgICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVu
dF90eXBlIGNvbnN0JiBlKSBjb25zdCB7IHJldHVybiBlID8gMCA6IGhhc2g8dHlwZW5hbWUgYXJn
dW1lbnRfdHlwZTo6RXJyb3JUeXBlPiB7IH0gKGUuZXJyb3IoKSk7IH0KK307CisKK30KKwordXNp
bmcgV1RGOjpOdWxsb3B0OwordXNpbmcgV1RGOjpVbmV4cGVjdGVkVHlwZTsKK3VzaW5nIFdURjo6
bWFrZVVuZXhwZWN0ZWQ7Cit1c2luZyBXVEY6OlVuZXhwZWN0OwordXNpbmcgV1RGOjpFeHBlY3Rl
ZDsKK3VzaW5nIFdURjo6bWFrZUV4cGVjdGVkOwordXNpbmcgV1RGOjptYWtlRXhwZWN0ZWRGcm9t
RXJyb3I7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMmEwN2Q4Mi4uMDM5ZDg4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTExLTA4ICBKRiBCYXN0aWVuICA8
amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV1RGOjpFeHBlY3RlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTI2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0V4cGVjdGVkLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKworMjAxNi0xMS0wOCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTYtMTEtMDQgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEY6OlBhcmtpbmdMb3Qg
c2hvdWxkIHN0b3AgdXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRp
b24gY2FzdHMgYXJlIHByb25lIHRvIG92ZXJmbG93cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQKaW5kZXggZmI2MjJjNS4uODk3YjBlZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CkBAIC01MCw2ICs1MCw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvRGF0ZU1hdGguY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL0RlcXVlLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9F
bnVtVHJhaXRzLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9FeHBlY3Rl
ZC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvSGFzaENvdW50ZWRTZXQu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hNYXAuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hTZXQuY3BwCkBAIC02MSw2ICs2Miw3
IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvTWVkaWFUaW1lLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZXRh
QWxsb2NhdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9OYWtlZFB0
ci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL09wdGlvblNldC5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBiY2NhOGUxLi5lMDQ1MTM5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDQ3
LDYgKzQ0Nyw3IEBACiAJCUFENTdBQzIwMURBNzQ2NTAwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFt
ZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDU3QUMxRTFEQTc0NjREMDBGRjFCREUgLyogRGlk
UmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwICovOyB9OwogCQlB
RDU3QUMyMTFEQTc0NjVCMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBh
Z2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDU3QUMxRjFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJ
blBhZ2VDYWNoZS5jcHAgKi87IH07CiAJCUFENTdBQzIyMURBNzQ2NkUwMEZGMUJERSAvKiBtYW55
LWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBRDU3QUMxRDFEQTc0NjM4MDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwg
Ki87IH07CisJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDdDNDM0QzFERDJBNTQ3
MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3BwICovOyB9OwogCQlBRENFQkJBNjFEOUFFMjI5MDAyRTI4
M0EgLyogQ29uc3VtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRENFQkJBNTFEOTlENENGMDAyRTI4M0EgLyogQ29uc3VtZS5jcHAgKi87IH07CiAJ
CUI1NUFEMUQ1MTc5RjNCMzAwMEFDMTQ5NCAvKiBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNp
emluZ19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjU1QUQxRDMxNzlGM0FCRjAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0
b1Jlc2l6aW5nX0J1bmRsZS5jcHAgKi87IH07CiAJCUI1NUYxMUI3MTUxN0QwMzMwMDkxNTkxNiAv
KiBhdHRyaWJ1dGVkU3RyaW5nQ3VzdG9tRm9udC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUYxMUIwMTUxN0EyQzQwMDkxNTkxNiAv
KiBhdHRyaWJ1dGVkU3RyaW5nQ3VzdG9tRm9udC5odG1sICovOyB9OwpAQCAtMTA5Nyw2ICsxMDk4
LDcgQEAKIAkJQUQ1N0FDMUQxREE3NDYzODAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1hbnktaWZyYW1lcy5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1N0FDMUUxREE3NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92
ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2Fj
aGVfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1N0FDMUYxREE3
NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkUmVtb3ZlRnJhbWVGcm9t
SGllYXJjaHlJblBhZ2VDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
N0M0MzRDMUREMkE1NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeHBlY3RlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN1bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCNDAzOUY5QzE1RTZEOEIzMDA3MjU1RDYgLyogTWF0aEV4dHJhcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXRoRXh0cmFzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1QUQxRDExNzlGMzM2NjAwQUMxNDk0IC8qIFBy
ZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
UHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmcubW07IHBhdGggPSBXZWJLaXQyT2JqQy9Q
cmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE3ODAsNiArMTc4Miw3IEBACiAJCUJDOTA5NjQ2MTI1NTYxODkwMDA4Mzc1NiAv
KiBXVEYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFE
N0M0MzRDMUREMkE1NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi8sCiAJCQkJQzA5OTFDNEYx
NDNDN0Q2ODAwNzk5OEYyIC8qIGNmICovLAogCQkJCTdDQkJBMDc1MTlCQjhBMDkwMEJCRjAyNSAv
KiBkYXJ3aW4gKi8sCiAJCQkJQkMwMjlCMUExNDg2QjIzODAwODE3REE5IC8qIG5zICovLApAQCAt
MjMxMCw2ICsyMzEzLDcgQEAKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQ
dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9w
dGlvbmFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEQ0VCQkE2MUQ5QUUyMjkwMDJFMjgzQSAv
KiBDb25zdW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4
QiAvKiBFeHBlY3RlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBG
RUJDRjMgLyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGNTkxRDBB
NTkwQzAwRkVCQ0YzIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RG
MTMxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MDI2NGVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRXhwZWN0ZWQuY3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitjb25zdGV4cHIgY29uc3QgY2hhciogb29wcyA9ICJvb3Bz
IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyKiBmb29mID0gImZvb2YiOworCitURVNUKFdURl9FeHBl
Y3RlZCwgVW5leHBlY3RlZFR5cGUpCit7CisgICAgeworICAgICAgICBhdXRvIHUgPSBVbmV4cGVj
dGVkVHlwZTxpbnQ+KDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKHUudmFsdWUoKSwgNDIpOworICAg
ICAgICBjb25zdGV4cHIgYXV0byBjID0gbWFrZVVuZXhwZWN0ZWQoNDIpOworICAgICAgICBFWFBF
Q1RfRVEoYy52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9UUlVFKHUgPT0gYyk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRSh1ICE9IGMpOworICAgICAgICBFWFBFQ1RfRkFMU0UodSA8IGMpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UodSA+IGMpOworICAgICAgICBFWFBFQ1RfVFJVRSh1IDw9IGMp
OworICAgICAgICBFWFBFQ1RfVFJVRSh1ID49IGMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1
dG8gYyA9IG1ha2VVbmV4cGVjdGVkKG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZSgp
LCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHMgPSBtYWtlVW5leHBlY3RlZChz
dGQ6OnN0cmluZyhvb3BzKSk7CisgICAgICAgIEVYUEVDVF9FUShzLnZhbHVlKCksIG9vcHMpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHMwID0gbWFrZVVuZXhwZWN0ZWQo
b29wcyk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHMxKHMwKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoczAgPT0gczEpOworICAgIH0KK30KKworVEVTVChXVEZfRXhwZWN0ZWQsIGV4cGVjdGVkKQor
eworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25zdCBjaGFyKj4gRTsKKyAgICB0eXBlZGVm
IEV4cGVjdGVkPGludCwgY29uc3Qgdm9pZCo+IEVWOworICAgIHN0cnVjdCBmb28geworICAgICAg
ICBpbnQgdjsKKyAgICAgICAgZm9vKGludCB2KQorICAgICAgICAgICAgOiB2KHYpCisgICAgICAg
IHsgfQorICAgICAgICB+Zm9vKCkgeyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBm
b28mIHkpIGNvbnN0IHsgcmV0dXJuIHYgPT0geS52OyB9CisgICAgfTsKKyAgICB0eXBlZGVmIEV4
cGVjdGVkPGZvbywgY29uc3QgY2hhcio+IEZvb0NoYXI7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxm
b28sIHN0ZDo6c3RyaW5nPiBGb29TdHJpbmc7CisgICAgeworICAgICAgICBhdXRvIGUgPSBFKCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShl
LnZhbHVlKCksIDApOworICAgICAgICBFWFBFQ1RfRVEoZS52YWx1ZU9yKDMuMTQpLCAwKTsKKyAg
ICB9CisgICAgeworICAgICAgICBjb25zdGV4cHIgRSBlOworICAgICAgICBFWFBFQ1RfVFJVRShl
Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS52YWx1ZSgpLCAwKTsKKyAgICAgICAg
RVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0
byBlID0gRSg0Mik7CisgICAgICAgIEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUoKSk7CisgICAgICAg
IEVYUEVDVF9FUShlLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigz
LjE0KSwgNDIpOworICAgICAgICBjb25zdCBhdXRvIGUyKGUpOworICAgICAgICBFWFBFQ1RfVFJV
RShlMi5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUyLnZhbHVlKCksIDQyKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGUyLnZhbHVlT3IoMy4xNCksIDQyKTsKKyAgICAgICAgRSBlMzsKKyAg
ICAgICAgZTMgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTMuaGFzVmFsdWUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShlMy52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShlMy52YWx1
ZU9yKDMuMTQpLCA0Mik7CisgICAgICAgIGNvbnN0IEUgZTQgPSBlMjsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZTQuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlNC52YWx1ZSgpLCA0Mik7
CisgICAgICAgIEVYUEVDVF9FUShlNC52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgfQorICAgIHsK
KyAgICAgICAgY29uc3RleHByIEUgYyg0Mik7CisgICAgICAgIEVYUEVDVF9UUlVFKGMuaGFzVmFs
dWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShjLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNU
X0VRKGMudmFsdWVPcigzLjE0KSwgNDIpOworICAgICAgICBjb25zdGV4cHIgY29uc3QgYXV0byBj
MihjKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYzIuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVD
VF9FUShjMi52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShjMi52YWx1ZU9yKDMuMTQp
LCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1ID0gRShtYWtlVW5leHBlY3RlZChv
b3BzKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBF
Q1RfRVEodS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHUuZ2V0VW5leHBlY3Rl
ZCgpLnZhbHVlKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEodS52YWx1ZU9yKDMuMTQpLCAz
KTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHV2ID0gRVYobWFrZVVuZXhwZWN0ZWQob29w
cykpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXYuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVD
VF9FUSh1di5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LmdldFVuZXhwZWN0
ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LnZhbHVlT3IoMy4xNCks
IDMpOworICAgIH0KKyAgICB7CisgICAgICAgIEUgZSA9IG1ha2VVbmV4cGVjdGVkKG9vcHMpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUu
ZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1
ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7CisgICAg
fQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPGludCwgY29u
c3QgY2hhcio+KG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdl
dFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVP
cigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVk
RnJvbUVycm9yPGludCwgY29uc3Qgdm9pZCo+KG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
ZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAg
ICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAg
RVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0
byBlID0gRm9vQ2hhcig0Mik7CisgICAgICAgIEVYUEVDVF9FUShlLT52LCA0Mik7CisgICAgICAg
IEVYUEVDVF9FUSgoKmUpLnYsIDQyKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0g
RSg0Mik7CisgICAgICAgIGF1dG8gZTEgPSBFKDEwMjQpOworICAgICAgICBzd2FwKGUwLCBlMSk7
CisgICAgICAgIEVYUEVDVF9FUShlMC52YWx1ZSgpLCAxMDI0KTsKKyAgICAgICAgRVhQRUNUX0VR
KGUxLnZhbHVlKCksIDQyKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0gRShtYWtl
VW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIGF1dG8gZTEgPSBFKG1ha2VVbmV4cGVjdGVkKGZv
b2YpKTsKKyAgICAgICAgc3dhcChlMCwgZTEpOworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJyb3Io
KSwgZm9vZik7CisgICAgICAgIEVYUEVDVF9FUShlMS5lcnJvcigpLCBvb3BzKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBGb29DaGFyIGMoZm9vKDQyKSk7CisgICAgICAgIEVYUEVDVF9FUShjLT52
LCA0Mik7CisgICAgICAgIEVYUEVDVF9FUSgoKmMpLnYsIDQyKTsKKyAgICB9CisgICAgeworICAg
ICAgICBGb29TdHJpbmcgcyhmb28oNDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHMtPnYsIDQyKTsK
KyAgICAgICAgRVhQRUNUX0VRKCgqcykudiwgNDIpOworICAgICAgICBjb25zdCBjaGFyKiBtZXNz
YWdlID0gInZlcnkgbG9uZyBmYWlsdXJlIHN0cmluZywgZm9yIHZlcnkgYmFkIGZhaWx1cmUgY2Fz
ZXMiOworICAgICAgICBGb29TdHJpbmcgZTAobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1l
c3NhZ2UpKTsKKyAgICAgICAgRm9vU3RyaW5nIGUxKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5n
PihtZXNzYWdlKSk7CisgICAgICAgIEZvb1N0cmluZyBlMihtYWtlVW5leHBlY3RlZDxzdGQ6OnN0
cmluZz4oc3RkOjpzdHJpbmcoKSkpOworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJyb3IoKSwgc3Rk
OjpzdHJpbmcobWVzc2FnZSkpOworICAgICAgICBFWFBFQ1RfVFJVRShlMCA9PSBlMSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGUwICE9IGUyKTsKKyAgICAgICAgRm9vU3RyaW5nKiBlNCA9IG5ldyBG
b29TdHJpbmcobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAg
Rm9vU3RyaW5nKiBlNSA9IG5ldyBGb29TdHJpbmcoKmU0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
ZTAgPT0gKmU0KTsKKyAgICAgICAgZGVsZXRlIGU0OworICAgICAgICBFWFBFQ1RfVFJVRShlMCA9
PSAqZTUpOworICAgICAgICBkZWxldGUgZTU7CisgICAgfQorfQorCitURVNUKFdURl9FeHBlY3Rl
ZCwgRXhwZWN0ZWRfdm9pZCkKK3sKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIGNvbnN0IGNo
YXIqPiBFOworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgY29uc3Qgdm9pZCo+IEVWOworICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgc3RkOjpzdHJpbmc+IFN0cmluZzsKKyAgICB7CisgICAg
ICAgIGF1dG8gZSA9IEUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZS5oYXNWYWx1ZSgpKTsKKyAg
ICAgICAgY29uc3QgYXV0byBlMihlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTIuaGFzVmFsdWUo
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGUgPT0gZTIpOworICAgICAgICBFIGUzOworICAgICAg
ICBlMyA9IGUyOworICAgICAgICBFWFBFQ1RfVFJVRShlMy5oYXNWYWx1ZSgpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoZSA9PSBlMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3RleHByIEUg
YzsKKyAgICAgICAgRVhQRUNUX1RSVUUoYy5oYXNWYWx1ZSgpKTsKKyAgICAgICAgY29uc3RleHBy
IGNvbnN0IGF1dG8gYzIoYyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGMyLmhhc1ZhbHVlKCkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShjID09IGMyKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRv
IHUgPSBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHUuaGFz
VmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1LmVycm9yKCksIG9vcHMpOworICAgICAgICBF
WFBFQ1RfRVEodS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byB1diA9IEVWKG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKHV2Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEodXYuZXJyb3IoKSwg
b29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1di5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29w
cyk7CisgICAgfQorICAgIHsKKyAgICAgICAgRSBlID0gbWFrZVVuZXhwZWN0ZWQob29wcyk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5l
cnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVl
KCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gZSA9IG1ha2VFeHBlY3RlZEZy
b21FcnJvcjx2b2lkLCBjb25zdCBjaGFyKj4ob29wcyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShl
Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAg
ICB7CisgICAgICAgIGF1dG8gZSA9IG1ha2VFeHBlY3RlZEZyb21FcnJvcjx2b2lkLCBjb25zdCB2
b2lkKj4ob29wcyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5l
eHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gZTAg
PSBFKCk7CisgICAgICAgIGF1dG8gZTEgPSBFKCk7CisgICAgICAgIHN3YXAoZTAsIGUxKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZTAgPT0gZTEpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
ZTAgPSBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgYXV0byBlMSA9IEUobWFrZVVu
ZXhwZWN0ZWQoZm9vZikpOworICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVDVF9F
UShlMC5lcnJvcigpLCBmb29mKTsKKyAgICAgICAgRVhQRUNUX0VRKGUxLmVycm9yKCksIG9vcHMp
OworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAidmVyeSBsb25n
IGZhaWx1cmUgc3RyaW5nLCBmb3IgdmVyeSBiYWQgZmFpbHVyZSBjYXNlcyI7CisgICAgICAgIFN0
cmluZyBlMChtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4obWVzc2FnZSkpOworICAgICAgICBT
dHJpbmcgZTEobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAg
U3RyaW5nIGUyKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihzdGQ6OnN0cmluZygpKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShlMC5lcnJvcigpLCBzdGQ6OnN0cmluZyhtZXNzYWdlKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGUwID09IGUxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTAgIT0gZTIp
OworICAgICAgICBTdHJpbmcqIGU0ID0gbmV3IFN0cmluZyhtYWtlVW5leHBlY3RlZDxzdGQ6OnN0
cmluZz4obWVzc2FnZSkpOworICAgICAgICBTdHJpbmcqIGU1ID0gbmV3IFN0cmluZygqZTQpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShlMCA9PSAqZTQpOworICAgICAgICBkZWxldGUgZTQ7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGUwID09ICplNSk7CisgICAgICAgIGRlbGV0ZSBlNTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBjb21wYXJpc29uKQoreworICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8aW50LCBjb25zdCBjaGFyKj4gRXg7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGludD4g
RXI7CisKKyAgICAvLyBUd28gRXhwZWN0ZWQsIG5vIGVycm9ycy4KKyAgICBFWFBFQ1RfVFJVRShF
eCg0MikgPT0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCg0MikgIT0gRXgoMTAyNCkpOwor
ICAgIEVYUEVDVF9UUlVFKEV4KDQyKSA8IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCgx
MDI0KSA+IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoRXgoNDIpIDw9IEV4KDQyKSk7CisgICAg
RVhQRUNUX1RSVUUoRXgoNDIpID49IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoRXgoNDIpIDw9
IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCgxMDI0KSA+PSBFeCg0MikpOworCisgICAg
RVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQy
KSAhPSBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8IEV4KDQyKSk7CisgICAg
RVhQRUNUX0ZBTFNFKEV4KDQyKSA+IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoMTAy
NCkgPCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0gRXgoMTAyNCkpOworCisg
ICAgLy8gVHdvIEV4cGVjdGVkLCBoYWxmIGVycm9ycy4KKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIp
ID09IEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7CisgICAgRVhQRUNUX1RSVUUoRXgoNDIpICE9
IEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7CisgICAgRVhQRUNUX1RSVUUoRXgoNDIpIDwgRXgo
bWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID4gRXgobWFr
ZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCg0MikgPD0gRXgobWFrZVVu
ZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID49IEV4KG1ha2VVbmV4
cGVjdGVkKG9vcHMpKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29w
cykpID09IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoRXgobWFrZVVuZXhwZWN0ZWQob29wcykp
ICE9IEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSA8
IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpID4gRXgo
NDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpIDw9IEV4KDQy
KSk7CisgICAgRVhQRUNUX1RSVUUoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpID49IEV4KDQyKSk7
CisKKyAgICAvLyBUd28gRXhwZWN0ZWQsIGFsbCBlcnJvcnMuCisgICAgRVhQRUNUX1RSVUUoRXIo
NDIpID09IEVyKDQyKSk7CisgICAgRVhQRUNUX1RSVUUoRXIoNDIpICE9IEVyKDEwMjQpKTsKKyAg
ICBFWFBFQ1RfVFJVRShFcig0MikgPCBFcigxMDI0KSk7CisgICAgRVhQRUNUX1RSVUUoRXIoMTAy
NCkgPiBFcig0MikpOworICAgIEVYUEVDVF9UUlVFKEVyKDQyKSA8PSBFcig0MikpOworICAgIEVY
UEVDVF9UUlVFKEVyKDQyKSA+PSBFcig0MikpOworICAgIEVYUEVDVF9UUlVFKEVyKDQyKSA8PSBF
cigxMDI0KSk7CisgICAgRVhQRUNUX1RSVUUoRXIoMTAyNCkgPj0gRXIoNDIpKTsKKworICAgIEVY
UEVDVF9GQUxTRShFcig0MikgPT0gRXIoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRShFcig0Mikg
IT0gRXIoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXIoMTAyNCkgPCBFcig0MikpOworICAgIEVY
UEVDVF9GQUxTRShFcig0MikgPiBFcigxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNFKEVyKDEwMjQp
IDw9IEVyKDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEVyKDQyKSA+PSBFcigxMDI0KSk7CisKKyAg
ICAvLyBPbmUgRXhwZWN0ZWQsIG9uZSB2YWx1ZS4KKyAgICBFWFBFQ1RfVFJVRShFeCg0MikgPT0g
NDIpOworICAgIEVYUEVDVF9UUlVFKEV4KDQyKSAhPSAwKTsKKyAgICBFWFBFQ1RfVFJVRShFeCg0
MikgPCAxMDI0KTsKKyAgICBFWFBFQ1RfVFJVRShFeCgxMDI0KSA+IDQyKTsKKyAgICBFWFBFQ1Rf
VFJVRShFeCg0MikgPD0gNDIpOworICAgIEVYUEVDVF9UUlVFKEV4KDQyKSA+PSA0Mik7CisgICAg
RVhQRUNUX1RSVUUoRXgoNDIpIDw9IDEwMjQpOworICAgIEVYUEVDVF9UUlVFKEV4KDEwMjQpID49
IDQyKTsKKworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPT0gMCk7CisgICAgRVhQRUNUX0ZBTFNF
KEV4KDQyKSAhPSA0Mik7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDEwMjQpIDwgNDIpOworICAgIEVY
UEVDVF9GQUxTRShFeCg0MikgPiAxMDI0KTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoMTAyNCkgPCA0
Mik7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+PSAxMDI0KTsKKworICAgIEVYUEVDVF9UUlVF
KDQyID09IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoNDIgIT0gRXgoMTAyNCkpOworICAgIEVY
UEVDVF9UUlVFKDQyIDwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9UUlVFKDEwMjQgPiBFeCg0Mikp
OworICAgIEVYUEVDVF9UUlVFKDQyIDw9IEV4KDQyKSk7CisgICAgRVhQRUNUX1RSVUUoNDIgPj0g
RXgoNDIpKTsKKyAgICBFWFBFQ1RfVFJVRSg0MiA8PSBFeCgxMDI0KSk7CisgICAgRVhQRUNUX1RS
VUUoMTAyNCA+PSBFeCg0MikpOworCisgICAgRVhQRUNUX0ZBTFNFKDQyID09IEV4KDEwMjQpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoNDIgIT0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoMTAyNCA8
IEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKDQyID4gRXgoMTAyNCkpOworICAgIEVYUEVDVF9G
QUxTRSgxMDI0IDw9IEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKDQyID49IEV4KDEwMjQpKTsK
KworICAgIC8vIE9uZSBFeHBlY3RlZCwgb25lIHVuZXhwZWN0ZWQuCisgICAgRVhQRUNUX0ZBTFNF
KEV4KDQyKSA9PSBtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNUX1RSVUUoRXgoNDIp
ICE9IG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCg0MikgPCBtYWtl
VW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IG1ha2VVbmV4cGVj
dGVkKG9vcHMpKTsKKyAgICBFWFBFQ1RfVFJVRShFeCg0MikgPD0gbWFrZVVuZXhwZWN0ZWQob29w
cykpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0gbWFrZVVuZXhwZWN0ZWQob29wcykpOwor
CisgICAgRVhQRUNUX0ZBTFNFKG1ha2VVbmV4cGVjdGVkKG9vcHMpID09IEV4KDQyKSk7CisgICAg
RVhQRUNUX1RSVUUobWFrZVVuZXhwZWN0ZWQob29wcykgIT0gRXgoNDIpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UobWFrZVVuZXhwZWN0ZWQob29wcykgPCBFeCg0MikpOworICAgIEVYUEVDVF9UUlVFKG1h
a2VVbmV4cGVjdGVkKG9vcHMpID4gRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UobWFrZVVuZXhw
ZWN0ZWQob29wcykgPD0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfVFJVRShtYWtlVW5leHBlY3RlZChv
b3BzKSA+PSBFeCg0MikpOworfQorCitURVNUKFdURl9FeHBlY3RlZCwgaGFzaCkKK3sKKyAgICB0
eXBlZGVmIEV4cGVjdGVkPGludCwgY29uc3QgY2hhcio+IEU7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPEUsIGludD4gbTsKKyAgICBtLmluc2VydCh7IEUoNDIpLCA0MiB9KTsKKyAgICBtLmluc2Vy
dCh7IEUobWFrZVVuZXhwZWN0ZWQob29wcykpLCA1IH0pOworICAgIG0uaW5zZXJ0KHsgRSgxMDI0
KSwgMTAyNCB9KTsKKyAgICBtLmluc2VydCh7IEUobWFrZVVuZXhwZWN0ZWQoZm9vZikpLCAweGYw
MGYgfSk7CisgICAgRVhQRUNUX0VRKG1bRSg0MildLCA0Mik7CisgICAgRVhQRUNUX0VRKG1bRSgx
MDI0KV0sIDEwMjQpOworICAgIEVYUEVDVF9FUShtW0UobWFrZVVuZXhwZWN0ZWQob29wcykpXSwg
NSk7CisgICAgRVhQRUNUX0VRKG1bRShtYWtlVW5leHBlY3RlZChmb29mKSldLCAweGYwMGYpOwor
fQorCitURVNUKFdURl9FeHBlY3RlZCwgaGFzaF92b2lkKQoreworICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8dm9pZCwgY29uc3QgY2hhcio+IEU7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPEUsIGludD4g
bTsKKyAgICBtLmluc2VydCh7IEUoKSwgNDIgfSk7CisgICAgbS5pbnNlcnQoeyBFKG1ha2VVbmV4
cGVjdGVkKG9vcHMpKSwgNSB9KTsKKyAgICBtLmluc2VydCh7IEUobWFrZVVuZXhwZWN0ZWQoZm9v
ZikpLCAweGYwMGYgfSk7CisgICAgRVhQRUNUX0VRKG1bRSgpXSwgNDIpOworICAgIEVYUEVDVF9F
UShtW0UobWFrZVVuZXhwZWN0ZWQob29wcykpXSwgNSk7CisgICAgRVhQRUNUX0VRKG1bRShtYWtl
VW5leHBlY3RlZChmb29mKSldLCAweGYwMGYpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
a2l0QVBJCi0tIAoyLjkuMwoK
</data>
<flag name="review"
          id="316933"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294336</attachid>
            <date>2016-11-09 21:38:49 -0800</date>
            <delta_ts>2016-11-10 22:24:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Implement-WTF-Expected.patch</filename>
            <type>text/plain</type>
            <size>48954</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBiOWVhNDc4NTAwN2YwZDA4Nzc5NWZjOGMzNDZiMmZmNzk1MjJkOWJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDggTm92IDIwMTYgMTc6MjM6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1l
bnQgV1RGOjpFeHBlY3RlZAoKc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1heSBi
ZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKY29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0
aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xl
IGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCmVycm9yLgoKVGhpcyB3
b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCgpV
c2luZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYWxsb3cgdXMgdG8gcHJvdmlkZSBmZWVkYmFj
ayB0byB0aGUKc3RhbmRhcmRzIGNvbW1pdHRlZSBhbmQgZ3VpZGUgc3RkOjpleHBlY3RlZCdzIGRl
c2lnbiBiZWZvcmUgaXQKZ2V0cyBzdGFuZGFyZGl6ZWQuIEkndmUgYWxyZWFkeSBzZW50IGEgYnVu
Y2ggb2YgZmVlZGJhY2sgdG8gdGhlCmF1dGhvciBiYXNlZCBvbiBteSBleHBlcmllbmNlIGltcGxl
bWVudGluZyB0aGlzLgoKVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6
OkV4Y2VwdGlvbk9yLgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDQ3ICsrKwogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiAgICAgICAgICAgfCAgIDQgKwogU291cmNlL1dURi93dGYvRXhwZWN0ZWQuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCA0MzggKysrKysrKysrKysrKysrKysrKysKIFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsKIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgIHwgICAyICsKIC4u
Li9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgIHwgICA0ICsK
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCAgICAgICAgIHwgNDM5
ICsrKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA5NDYgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmlu
ZGV4IGJmZjllOGUuLjBkNDI3N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTYtMTEtMDggIEpG
IEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBXVEY6
OkV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQ1MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBzdGQ6OmV4cGVjdGVkIGlzbid0IGluIEMrKzE3LCBhbmQgbWF5IGJlIGluIEMrKzIwLiBJdCdz
IGEgbmljZQorICAgICAgICBjb21wbGVtZW50IHRvIHN0ZDo6YW55IC8gc3RkOjpvcHRpb25hbCBi
ZWNhdXNlIGl0J3MgYSB0eXBlLXRhZ2dlZAorICAgICAgICB1bmlvbiB3aGljaCBoYXMgYSBzaW5n
bGUgZXhwZWN0ZWQgcmVzdWx0IGJ1dCBjb3VsZCBhbHNvIGNvbnRhaW4gYW4KKyAgICAgICAgZXJy
b3IuCisKKyAgICAgICAgVGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBh
cnNlciwgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgVXNpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiB3
aWxsIGFsbG93IHVzIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdGhlCisgICAgICAgIHN0YW5kYXJk
cyBjb21taXR0ZWUgYW5kIGd1aWRlIHN0ZDo6ZXhwZWN0ZWQncyBkZXNpZ24gYmVmb3JlIGl0Cisg
ICAgICAgIGdldHMgc3RhbmRhcmRpemVkLiBJJ3ZlIGFscmVhZHkgc2VudCBhIGJ1bmNoIG9mIGZl
ZWRiYWNrIHRvIHRoZQorICAgICAgICBhdXRob3IgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSBpbXBs
ZW1lbnRpbmcgdGhpcy4KKworICAgICAgICBUaGlzIGNvdWxkIHN1cHBsZW1lbnQgV1RGOjpFaXRo
ZXIgYW5kIFdURjo6RXhjZXB0aW9uT3IuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRXhwZWN0ZWQuaDogQWRkZWQuCisgICAgICAgIChX
VEY6OlVuZXhwZWN0ZWRUeXBlOjpVbmV4cGVjdGVkVHlwZSk6CisgICAgICAgIChXVEY6OlVuZXhw
ZWN0ZWRUeXBlOjp2YWx1ZSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6
Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjptYWtlVW5leHBlY3RlZCk6CisgICAgICAgIChX
VEY6OkV4cGVjdGVkOjpFeHBlY3RlZCk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6c3dhcCk6CisgICAgICAgIChXVEY6OkV4cGVj
dGVkOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6Om9wZXJhdG9yKik6Cisg
ICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6RXhw
ZWN0ZWQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OnZhbHVlKToKKyAgICAg
ICAgKFdURjo6RXhwZWN0ZWQ6OmVycm9yKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OmdldFVu
ZXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6dmFsdWVPcik6CisgICAgICAgIChX
VEY6OnN3YXApOgorICAgICAgICAoV1RGOjptYWtlRXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpt
YWtlRXhwZWN0ZWRGcm9tRXJyb3IpOgorCiAyMDE2LTExLTA5ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWxsb3cgUmVmUHRycyBvZiBjb25z
dCBUaHJlYWRTYWZlUmVmQ291bnRlZCB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYzY2MjhjNS4uZjA1NzkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjgsNiArMzI4LDcgQEAKIAkJQThBNDc0ODYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRo
cmVhZERhdGEuY3BwICovOyB9OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhy
ZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsgfTsKIAkJQThB
NDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZp
Zy5oICovOyB9OworCQlBRDdDNDM0QjFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEN0M0MzRBMUREMkE0
QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovOyB9OwogCQlCMzhGRDdCRDE2ODk1M0U4MDA2NUM5
NjkgLyogRmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIzOEZEN0JDMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5o
ICovOyB9OwogCQlDNEY4QTkzNzE5QzY1RUI0MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY4QTkzNjE5QzY1RUI0
MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggKi87IH07CiAJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQx
MSAvKiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi87IH07CkBAIC02
OTUsNiArNjk2LDcgQEAKIAkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGVGhyZWFkRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzdCMTUxQTgyNUIwMDQx
MjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdURlRocmVhZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDc0OEIx
NTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ3QzQzNEExREQy
QTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4cGVjdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIzOEZEN0JDMTY4
OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNEY4QTkzNjE5QzY1RUI0MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3B3YXRjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRDU0OTdBQTE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NDgsNiArODUwLDcgQEAKIAkJQTg3NkRCRDYxNTE4MTZFNTAwREFE
Qjk1IC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJMkNERUQw
RjAxODExNUMzRjAwNERCQTcwIC8qIGNmICovLAogCQkJCUU0QTBBRDNCMUE5NjI1MTkwMDUzNkRG
NiAvKiBjb2NvYSAqLywKIAkJCQlBOEE0NzI4MTE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYSAqLywK
QEAgLTE0NTcsNiArMTQ2MCw3IEBACiAJCQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0NvbmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRjE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ3QzQzNEIx
REQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1
NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ09wZXJhdG9ycy5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9FeHBlY3RlZC5oIGIv
U291cmNlL1dURi93dGYvRXhwZWN0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41OTI3OThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvRXhwZWN0ZWQu
aApAQCAtMCwwICsxLDQzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFdURjo6RXhwZWN0ZWQgaXMgYmFz
ZWQgb24gc3RkOjpleHBlY3RlZCwgYXMgZGVzY3JpYmVkIGhlcmU6IGh0dHA6Ly93ZzIxLmxpbmsv
cDAzMjNyMQorLy8gVGhlIHNwZWNpZmljYXRpb24gZXhwZWN0cyB0byB0aHJvdy4gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgZXhjZXB0aW9ucywgdXNlcyBSRUxFQVNFX0FTU0VS
VCBpbnN0ZWFkLgorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK2NsYXNzIFVuZXhw
ZWN0ZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBVbmV4cGVjdGVkVHlwZSgpID0gZGVsZXRlOworICAg
IGNvbnN0ZXhwciBleHBsaWNpdCBVbmV4cGVjdGVkVHlwZShjb25zdCBFJiBlKSA6IHZhbChlKSB7
IH0KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgVW5leHBlY3RlZFR5cGUoRSYmIGUpIDogdmFsKFdU
Rk1vdmUoZSkpIHsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBFJiB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHZhbDsgfQorICAgIGNvbnN0ZXhwciBFJiB2YWx1ZSgpIHsgcmV0dXJuIHZhbDsgfQorCitw
cml2YXRlOgorICAgIEUgdmFsOworfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBl
Y3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4gbGhzLnZhbHVlKCkgPT0gcmhzLnZhbHVlKCk7IH0K
K3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJu
IGxocy52YWx1ZSgpICE9IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVu
ZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpIDwgcmhzLnZhbHVlKCk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVW5l
eHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1
cm4gbGhzLnZhbHVlKCkgPiByaHMudmFsdWUoKTsgfQordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3Qg
VW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4gbGhzLnZhbHVlKCkgPD0gcmhzLnZhbHVl
KCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsg
cmV0dXJuIGxocy52YWx1ZSgpID49IHJocy52YWx1ZSgpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBF
PiBjb25zdGV4cHIgVW5leHBlY3RlZFR5cGU8c3RkOjpkZWNheV90PEU+PiBtYWtlVW5leHBlY3Rl
ZChFJiYgdikgeyByZXR1cm4gVW5leHBlY3RlZFR5cGU8dHlwZW5hbWUgc3RkOjpkZWNheTxFPjo6
dHlwZT4oc3RkOjpmb3J3YXJkPEU+KHYpKTsgfQorCitzdHJ1Y3QgVW5leHBlY3RUYWcgeworICAg
IFVuZXhwZWN0VGFnKCkgPSBkZWxldGU7Cit9OworY29uc3RleHByIFVuZXhwZWN0VGFnIFVuZXhw
ZWN0IHsgfTsKKworbmFtZXNwYWNlIHsKKworLy8gSW52b2tlZCB3aGVyZSBzdGQ6OkV4cGVjdGVk
IHdvdWxkIGluc3RlYWQgdGhyb3cuCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgRXhwZWN0
ZWRUaHJvdygpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitzdGF0aWMgY29u
c3RleHByIGVudW0gY2xhc3MgRXhwZWN0ZWRWYWx1ZVRhZ1R5cGUgeyB9IEV4cGVjdGVkVmFsdWVU
YWcgeyB9Oworc3RhdGljIGNvbnN0ZXhwciBlbnVtIGNsYXNzIEV4cGVjdGVkRXJyb3JUYWdUeXBl
IHsgfSBFeHBlY3RlZEVycm9yVGFnIHsgfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+
Cit1bmlvbiBFeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2UgeworICAgIHR5cGVkZWYgVCBWYWx1ZVR5
cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBjaGFyIGR1bW15OworICAgIFZhbHVl
VHlwZSB2YWw7CisgICAgRXJyb3JUeXBlIGVycjsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25z
dGV4cHJTdG9yYWdlKCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZENvbnN0
ZXhwclN0b3JhZ2UoRXhwZWN0ZWRWYWx1ZVRhZ1R5cGUpIDogdmFsKCkgeyB9CisgICAgY29uc3Rl
eHByIEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZShFeHBlY3RlZEVycm9yVGFnVHlwZSkgOiBlcnIo
KSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJTdG9yYWdlKEV4cGVjdGVkVmFs
dWVUYWdUeXBlLCBjb25zdCBWYWx1ZVR5cGUmIHYpIDogdmFsKHYpIHsgfQorICAgIGNvbnN0ZXhw
ciBFeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUsIGNvbnN0IEVy
cm9yVHlwZSYgZSkgOiBlcnIoZSkgeyB9CisgICAgfkV4cGVjdGVkQ29uc3RleHByU3RvcmFnZSgp
ID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgordW5pb24gRXhw
ZWN0ZWRTdG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBF
cnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5cGUgdmFsOworICAgIEVycm9y
VHlwZSBlcnI7CisgICAgY29uc3RleHByIEV4cGVjdGVkU3RvcmFnZSgpIDogZHVtbXkoKSB7IH0K
KyAgICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdlKEV4cGVjdGVkVmFsdWVUYWdUeXBlKSA6IHZh
bCgpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5
cGUpIDogZXJyKCkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkU3RvcmFnZShFeHBlY3RlZFZh
bHVlVGFnVHlwZSwgY29uc3QgVmFsdWVUeXBlJiB2YWwpIDogdmFsKHZhbCkgeyB9CisgICAgY29u
c3RleHByIEV4cGVjdGVkU3RvcmFnZShFeHBlY3RlZEVycm9yVGFnVHlwZSwgY29uc3QgRXJyb3JU
eXBlJiBlcnIpIDogZXJyKGVycikgeyB9CisgICAgfkV4cGVjdGVkU3RvcmFnZSgpIHsgfQorfTsK
KwordGVtcGxhdGUgPGNsYXNzIEU+Cit1bmlvbiBFeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2U8dm9p
ZCwgRT4geworICAgIHR5cGVkZWYgdm9pZCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBFIEVycm9y
VHlwZTsKKyAgICBjaGFyIGR1bW15OworICAgIEVycm9yVHlwZSBlcnI7CisgICAgY29uc3RleHBy
IEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZSgpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIg
RXhwZWN0ZWRDb25zdGV4cHJTdG9yYWdlKEV4cGVjdGVkVmFsdWVUYWdUeXBlKSA6IGR1bW15KCkg
eyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByU3RvcmFnZShFeHBlY3RlZEVycm9y
VGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJTdG9y
YWdlKEV4cGVjdGVkRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGUpIDogZXJyKGUpIHsg
fQorICAgIH5FeHBlY3RlZENvbnN0ZXhwclN0b3JhZ2UoKSA9IGRlZmF1bHQ7Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRT4KK3VuaW9uIEV4cGVjdGVkU3RvcmFnZTx2b2lkLCBFPiB7CisgICAgdHlw
ZWRlZiB2b2lkIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNoYXIg
ZHVtbXk7CisgICAgRXJyb3JUeXBlIGVycjsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdl
KCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoRXhwZWN0ZWRW
YWx1ZVRhZ1R5cGUpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdl
KEV4cGVjdGVkRXJyb3JUYWdUeXBlKSA6IGVycigpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3Rl
ZFN0b3JhZ2UoRXhwZWN0ZWRFcnJvclRhZ1R5cGUsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IGVy
cihlcnIpIHsgfQorICAgIH5FeHBlY3RlZFN0b3JhZ2UoKSB7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBFPgorc3RydWN0IEV4cGVjdGVkQ29uc3RleHByQmFzZSB7CisgICAgdHlw
ZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIEV4cGVjdGVk
Q29uc3RleHByU3RvcmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhhczsK
KyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJCYXNlKCkgOiBzKCksIGhhcyh0cnVlKSB7
IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJCYXNlKEV4cGVjdGVkVmFsdWVUYWdU
eXBlIHRhZykgOiBzKHRhZyksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRD
b25zdGV4cHJCYXNlKEV4cGVjdGVkRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxz
ZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByQmFzZShFeHBlY3RlZFZhbHVl
VGFnVHlwZSB0YWcsIGNvbnN0IFZhbHVlVHlwZSYgdmFsKSA6IHModGFnLCB2YWwpLCBoYXModHJ1
ZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQ29uc3RleHByQmFzZShFeHBlY3RlZEVycm9y
VGFnVHlwZSB0YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFs
c2UpIHsgfQorICAgIH5FeHBlY3RlZENvbnN0ZXhwckJhc2UoKSA9IGRlZmF1bHQ7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3N0cnVjdCBFeHBlY3RlZEJhc2UgeworICAgIHR5
cGVkZWYgVCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBFeHBlY3Rl
ZFN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7CisgICAgYm9vbCBoYXM7CisgICAgY29u
c3RleHByIEV4cGVjdGVkQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHBy
IEV4cGVjdGVkQmFzZShFeHBlY3RlZFZhbHVlVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXModHJ1
ZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQmFzZShFeHBlY3RlZEVycm9yVGFnVHlwZSB0
YWcpIDogcyh0YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZEJhc2Uo
RXhwZWN0ZWRWYWx1ZVRhZ1R5cGUgdGFnLCBjb25zdCBWYWx1ZVR5cGUmIHZhbCkgOiBzKHRhZywg
dmFsKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZEJhc2UoRXhwZWN0ZWRF
cnJvclRhZ1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFz
KGZhbHNlKSB7IH0KKyAgICBFeHBlY3RlZEJhc2UoY29uc3QgRXhwZWN0ZWRCYXNlJiBvKQorICAg
ICAgICA6IGhhcyhvLmhhcykKKyAgICB7CisgICAgICAgIGlmIChoYXMpCisgICAgICAgICAgICA6
Om5ldyAoJnMudmFsKSBWYWx1ZVR5cGUoby5zLnZhbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlwZShvLnMuZXJyKTsKKyAgICB9CisgICAgRXhwZWN0
ZWRCYXNlKEV4cGVjdGVkQmFzZSYmIG8pCisgICAgICAgIDogaGFzKG8uaGFzKQorICAgIHsKKyAg
ICAgICAgaWYgKGhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy52YWwpIFZhbHVlVHlwZShXVEZN
b3ZlKG8ucy52YWwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgOjpuZXcgKCZzLmVycikg
RXJyb3JUeXBlKFdURk1vdmUoby5zLmVycikpOworICAgIH0KKyAgICB+RXhwZWN0ZWRCYXNlKCkK
KyAgICB7CisgICAgICAgIGlmIChoYXMpCisgICAgICAgICAgICBzLnZhbC5WYWx1ZVR5cGU6On5W
YWx1ZVR5cGUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcy5lcnIuRXJyb3JUeXBlOjp+
RXJyb3JUeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+CitzdHJ1Y3QgRXhw
ZWN0ZWRDb25zdGV4cHJCYXNlPHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgRXhwZWN0ZWRDb25zdGV4cHJTdG9yYWdl
PFZhbHVlVHlwZSwgRXJyb3JUeXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBF
eHBlY3RlZENvbnN0ZXhwckJhc2UoKSA6IHMoKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhw
ciBFeHBlY3RlZENvbnN0ZXhwckJhc2UoRXhwZWN0ZWRWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFn
KSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBFeHBlY3RlZENvbnN0ZXhwckJhc2UoRXhw
ZWN0ZWRFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFzKGZhbHNlKSB7IH0KKyAgICBjb25z
dGV4cHIgRXhwZWN0ZWRDb25zdGV4cHJCYXNlKEV4cGVjdGVkRXJyb3JUYWdUeXBlIHRhZywgY29u
c3QgRXJyb3JUeXBlJiBlcnIpIDogcyh0YWcsIGVyciksIGhhcyhmYWxzZSkgeyB9CisgICAgfkV4
cGVjdGVkQ29uc3RleHByQmFzZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBF
Pgorc3RydWN0IEV4cGVjdGVkQmFzZTx2b2lkLCBFPiB7CisgICAgdHlwZWRlZiB2b2lkIFZhbHVl
VHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIEV4cGVjdGVkU3RvcmFnZTxWYWx1
ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhhczsKKyAgICBjb25zdGV4cHIgRXhwZWN0
ZWRCYXNlKCkgOiBzKCksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWRCYXNl
KEV4cGVjdGVkVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyh0cnVlKSB7IH0KKyAgICBj
b25zdGV4cHIgRXhwZWN0ZWRCYXNlKEV4cGVjdGVkRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyks
IGhhcyhmYWxzZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkQmFzZShFeHBlY3RlZEVycm9y
VGFnVHlwZSB0YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFs
c2UpIHsgfQorICAgIEV4cGVjdGVkQmFzZShjb25zdCBFeHBlY3RlZEJhc2UmIG8pCisgICAgICAg
IDogaGFzKG8uaGFzKQorICAgIHsKKyAgICAgICAgaWYgKCFoYXMpCisgICAgICAgICAgICA6Om5l
dyAoJnMuZXJyKSBFcnJvclR5cGUoby5zLmVycik7CisgICAgfQorICAgIEV4cGVjdGVkQmFzZShF
eHBlY3RlZEJhc2UmJiBvKQorICAgICAgICA6IGhhcyhvLmhhcykKKyAgICB7CisgICAgICAgIGlm
ICghaGFzKQorICAgICAgICAgICAgOjpuZXcgKCZzLmVycikgRXJyb3JUeXBlKFdURk1vdmUoby5z
LmVycikpOworICAgIH0KKyAgICB+RXhwZWN0ZWRCYXNlKCkKKyAgICB7CisgICAgICAgIGlmICgh
aGFzKQorICAgICAgICAgICAgcy5lcnIuRXJyb3JUeXBlOjp+RXJyb3JUeXBlKCk7CisgICAgfQor
fTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+Cit1c2luZyBFeHBlY3RlZEJhc2VTZWxl
Y3QgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAorICAgICgoc3RkOjppc192b2lkPFQ+Ojp2
YWx1ZSB8fCBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlKQorICAgICAg
ICAmJiBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RT46OnZhbHVlKSwKKyAgICBFeHBl
Y3RlZENvbnN0ZXhwckJhc2U8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUsIHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PEU+Ojp0eXBlPiwKKyAgICBFeHBlY3RlZEJhc2U8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PEU+Ojp0eXBlPgorPjo6dHlwZTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgorY2xhc3MgRXhwZWN0ZWQgOiBwcml2YXRlIEV4cGVj
dGVkQmFzZVNlbGVjdDxULCBFPiB7CisgICAgdHlwZWRlZiBFeHBlY3RlZEJhc2VTZWxlY3Q8VCwg
RT4gYmFzZTsKKworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6VmFsdWVUeXBl
IFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2U6OkVycm9yVHlwZSBFcnJvclR5
cGU7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBFeHBlY3RlZDxWYWx1ZVR5cGUsIEVycm9yVHlw
ZT4gdHlwZTsKKworcHVibGljOgorICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgcmVi
aW5kIHsgdXNpbmcgdHlwZSA9IEV4cGVjdGVkPFUsIEVycm9yVHlwZT47IH07CisKKyAgICBjb25z
dGV4cHIgRXhwZWN0ZWQoKSA6IGJhc2UoRXhwZWN0ZWRWYWx1ZVRhZykgeyB9CisgICAgRXhwZWN0
ZWQoY29uc3QgRXhwZWN0ZWQmKSA9IGRlZmF1bHQ7CisgICAgRXhwZWN0ZWQoRXhwZWN0ZWQmJikg
PSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBFeHBlY3RlZChjb25zdCBWYWx1ZVR5cGUmIGUpIDog
YmFzZShFeHBlY3RlZFZhbHVlVGFnLCBlKSB7IH0KKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVmFs
dWVUeXBlJiYgZSkgOiBiYXNlKEV4cGVjdGVkVmFsdWVUYWcsIFdURk1vdmUoZSkpIHsgfQorICAg
IC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQo
aW5fcGxhY2VfdCwgQXJncyYmLi4uKTsKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3Mu
Li4gQXJncz4gY29uc3RleHByIGV4cGxpY2l0IEV4cGVjdGVkKGluX3BsYWNlX3QsIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVW5l
eHBlY3RlZFR5cGU8RXJyb3JUeXBlPiBjb25zdCYgdSkgOiBiYXNlKEV4cGVjdGVkRXJyb3JUYWcs
IHUudmFsdWUoKSkgeyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEVycj4gY29uc3RleHByIEV4cGVj
dGVkKFVuZXhwZWN0ZWRUeXBlPEVycj4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZEVycm9yVGFn
LCB1LnZhbHVlKCkpIHsgfQorICAgIC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4
cHIgZXhwbGljaXQgRXhwZWN0ZWQoVW5leHBlY3RUYWcsIEFyZ3MmJi4uLik7CisgICAgLy8gdGVt
cGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGNvbnN0ZXhwciBleHBsaWNpdCBFeHBlY3Rl
ZChVbmV4cGVjdFRhZywgc3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgfkV4cGVjdGVkKCkgPSBkZWZhdWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25z
dCBFeHBlY3RlZCYgZSkgeyB0eXBlKGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAg
ICBFeHBlY3RlZCYgb3BlcmF0b3I9KEV4cGVjdGVkJiYgZSkgeyB0eXBlKFdURk1vdmUoZSkpLnN3
YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gRXhwZWN0
ZWQmIG9wZXJhdG9yPShVJiYgdSkgeyB0eXBlKFdURk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1
cm4gKnRoaXM7IH0KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0ZWRUeXBl
PEVycm9yVHlwZT4mIHUpIHsgdHlwZSh1KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+JiYgdSkgeyB0
eXBlKFdURk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAvLyB0ZW1w
bGF0ZSA8Y2xhc3MuLi4gQXJncz4gdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLik7CisgICAgLy8gdGVt
cGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgZW1wbGFjZShzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB2b2lkIHN3YXAoRXhwZWN0ZWQmIG8pCisg
ICAgeworICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CisgICAgICAgIGlmIChiYXNlOjpoYXMgJiYg
by5oYXMpCisgICAgICAgICAgICBzd2FwKGJhc2U6OnMudmFsLCBvLnMudmFsKTsKKyAgICAgICAg
ZWxzZSBpZiAoYmFzZTo6aGFzICYmICFvLmhhcykgeworICAgICAgICAgICAgRXJyb3JUeXBlIGUo
V1RGTW92ZShvLnMuZXJyKSk7CisgICAgICAgICAgICA6Om5ldyAoJm8ucy52YWwpIFZhbHVlVHlw
ZShXVEZNb3ZlKGJhc2U6OnMudmFsKSk7CisgICAgICAgICAgICA6Om5ldyAoJmJhc2U6OnMuZXJy
KSBFcnJvclR5cGUoZSk7CisgICAgICAgICAgICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAg
ICAgICB9IGVsc2UgaWYgKCFiYXNlOjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAgICAgIFZhbHVl
VHlwZSB2KFdURk1vdmUoby5zLnZhbCkpOworICAgICAgICAgICAgOjpuZXcgKCZvLnMuZXJyKSBF
cnJvclR5cGUoV1RGTW92ZShiYXNlOjpzLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNl
OjpzLnZhbCkgVmFsdWVUeXBlKHYpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFz
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzd2FwKGJhc2U6OnMuZXJyLCBvLnMuZXJy
KTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gJmJhc2U6OnMudmFsOyB9CisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+
KCkgeyByZXR1cm4gJmJhc2U6OnMudmFsOyB9CisgICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlw
ZSYgb3BlcmF0b3IqKCkgY29uc3QgJiB7IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIFZhbHVl
VHlwZSYgb3BlcmF0b3IqKCkgJiB7IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIGNvbnN0ZXhw
ciBjb25zdCBWYWx1ZVR5cGUmJiBvcGVyYXRvciooKSBjb25zdCAmJiB7IHJldHVybiBXVEZNb3Zl
KGJhc2U6OnMudmFsKTsgfQorICAgIGNvbnN0ZXhwciBWYWx1ZVR5cGUmJiBvcGVyYXRvciooKSAm
JiB7IHJldHVybiBXVEZNb3ZlKGJhc2U6OnMudmFsKTsgfQorICAgIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gYmFzZTo6aGFzOyB9CisgICAgY29uc3Rl
eHByIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICBjb25z
dGV4cHIgY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSgpIGNvbnN0ICYgeyByZXR1cm4gYmFzZTo6aGFz
ID8gYmFzZTo6cy52YWwgOiAoRXhwZWN0ZWRUaHJvdygpLCBiYXNlOjpzLnZhbCk7IH0KKyAgICBj
b25zdGV4cHIgVmFsdWVUeXBlJiB2YWx1ZSgpICYgeyByZXR1cm4gYmFzZTo6aGFzID8gYmFzZTo6
cy52YWwgOiAoRXhwZWN0ZWRUaHJvdygpLCBiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIg
Y29uc3QgVmFsdWVUeXBlJiYgdmFsdWUoKSBjb25zdCAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBi
YXNlOjpzLnZhbCA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMudmFsKTsgfQorICAgIGNvbnN0
ZXhwciBWYWx1ZVR5cGUmJiB2YWx1ZSgpICYmIHsgcmV0dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMu
dmFsIDogKEV4cGVjdGVkVGhyb3coKSwgYmFzZTo6cy52YWwpOyB9CisgICAgY29uc3RleHByIGNv
bnN0IEVycm9yVHlwZSYgZXJyb3IoKSBjb25zdCAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNl
OjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIEVycm9yVHlw
ZSYgZXJyb3IoKSAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3Rl
ZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhwciBFcnJvclR5cGUmJiBlcnJv
cigpICYmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93
KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBFcnJvclR5cGUmJiBlcnJv
cigpIGNvbnN0ICYmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3Rl
ZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhwciBVbmV4cGVjdGVkVHlwZTxF
cnJvclR5cGU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBVbmV4cGVjdGVkVHlwZTxF
cnJvclR5cGU+KGJhc2U6OnMuZXJyKTsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBVPiBjb25zdGV4
cHIgVmFsdWVUeXBlIHZhbHVlT3IoVSYmIHUpIGNvbnN0ICYgeyByZXR1cm4gYmFzZTo6aGFzID8g
Kip0aGlzIDogc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VT4odSkpOyB9Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIFU+IFZhbHVlVHlwZSB2YWx1ZU9yKFUmJiB1KSAmJiB7IHJldHVy
biBiYXNlOjpoYXMgPyBXVEZNb3ZlKCoqdGhpcykgOiBzdGF0aWNfY2FzdDxWYWx1ZVR5cGU+KHN0
ZDo6Zm9yd2FyZDxVPih1KSk7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBFPgorY2xhc3MgRXhw
ZWN0ZWQ8dm9pZCwgRT4gOiBwcml2YXRlIEV4cGVjdGVkQmFzZVNlbGVjdDx2b2lkLCBFPiB7Cisg
ICAgdHlwZWRlZiBFeHBlY3RlZEJhc2VTZWxlY3Q8dm9pZCwgRT4gYmFzZTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIGJhc2U6OkVycm9yVHlwZSBFcnJvclR5cGU7CisKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBFeHBlY3RlZDxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gdHlwZTsKKworcHVibGljOgor
ICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBFeHBlY3Rl
ZDxVLCBFcnJvclR5cGU+IHR5cGU7IH07CisKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoKSA6IGJh
c2UoRXhwZWN0ZWRWYWx1ZVRhZykgeyB9CisgICAgRXhwZWN0ZWQoY29uc3QgRXhwZWN0ZWQmKSA9
IGRlZmF1bHQ7CisgICAgRXhwZWN0ZWQoRXhwZWN0ZWQmJikgPSBkZWZhdWx0OworICAgIC8vIGNv
bnN0ZXhwciBleHBsaWNpdCBFeHBlY3RlZChpbl9wbGFjZV90KTsKKyAgICBjb25zdGV4cHIgRXhw
ZWN0ZWQoVW5leHBlY3RlZFR5cGU8RT4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZEVycm9yVGFn
LCB1LnZhbHVlKCkpIHsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBFcnI+IGNvbnN0ZXhwciBFeHBl
Y3RlZChVbmV4cGVjdGVkVHlwZTxFcnI+IGNvbnN0JiB1KSA6IGJhc2UoRXhwZWN0ZWRFcnJvclRh
ZywgdS52YWx1ZSgpKSB7IH0KKworICAgIH5FeHBlY3RlZCgpID0gZGVmYXVsdDsKKworICAgIEV4
cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgRXhwZWN0ZWQmIGUpIHsgdHlwZShlKS5zd2FwKCp0aGlz
KTsgcmV0dXJuICp0aGlzOyB9CisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShFeHBlY3RlZCYmIGUp
IHsgdHlwZShXVEZNb3ZlKGUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgRXhw
ZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgdSkgeyB0eXBlKHUpLnN3
YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgor
ICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oVW5leHBlY3RlZFR5cGU8RT4mJiB1KSB7IHR5cGUoV1RG
TW92ZSh1KSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfSAvLyBOb3QgaW4gdGhlIGN1cnJl
bnQgcGFwZXIuCisgICAgLy8gdm9pZCBlbXBsYWNlKCk7CisKKyAgICB2b2lkIHN3YXAoRXhwZWN0
ZWQmIG8pCisgICAgeworICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CisgICAgICAgIGlmIChiYXNl
OjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0g
ZWxzZSBpZiAoYmFzZTo6aGFzICYmICFvLmhhcykgeworICAgICAgICAgICAgRXJyb3JUeXBlIGUo
V1RGTW92ZShvLnMuZXJyKSk7CisgICAgICAgICAgICA6Om5ldyAoJmJhc2U6OnMuZXJyKSBFcnJv
clR5cGUoZSk7CisgICAgICAgICAgICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9
IGVsc2UgaWYgKCFiYXNlOjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAgICAgIDo6bmV3ICgmby5z
LmVycikgRXJyb3JUeXBlKFdURk1vdmUoYmFzZTo6cy5lcnIpKTsKKyAgICAgICAgICAgIHN3YXAo
YmFzZTo6aGFzLCBvLmhhcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3dhcChiYXNl
OjpzLmVyciwgby5zLmVycik7CisgICAgfQorCisgICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICBjb25zdGV4cHIgYm9v
bCBoYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6OmhhczsgfQorICAgIHZvaWQgdmFsdWUo
KSBjb25zdCB7ICFiYXNlOjpoYXMgPyBFeHBlY3RlZFRocm93KCkgOiB2b2lkKCk7IH0KKyAgICBj
b25zdGV4cHIgY29uc3QgRSYgZXJyb3IoKSBjb25zdCAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBi
YXNlOjpzLmVyciA6IChFeHBlY3RlZFRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIEUmIGVy
cm9yKCkgJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWRUaHJv
dygpLCBiYXNlOjpzLmVycik7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgorICAgIGNv
bnN0ZXhwciBFJiYgZXJyb3IoKSAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIg
OiAoRXhwZWN0ZWRUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBjb25zdGV4cHIgY29uc3Qg
RSYmIGVycm9yKCkgY29uc3QgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDog
KEV4cGVjdGVkVGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9IC8vIE5vdCBpbiB0aGUgY3VycmVudCBw
YXBlci4KKyAgICAvLyBjb25zdGV4cHIgRSYgZXJyb3IoKSAmOworICAgIGNvbnN0ZXhwciBVbmV4
cGVjdGVkVHlwZTxFPiBnZXRVbmV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4gVW5leHBlY3RlZFR5
cGU8RT4oYmFzZTo6cy5lcnIpOyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3Qg
RXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIGJvb2woeCkgPT0gYm9vbCh5KSAmJiAoeCA/IHgu
dmFsdWUoKSA9PSB5LnZhbHVlKCkgOiB4LmVycm9yKCkgPT0geS5lcnJvcigpKTsgfQordGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiAhKHggPT0g
eSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cjwoY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJl
dHVybiAoIWJvb2woeCkgJiYgYm9vbCh5KSkgPyBmYWxzZSA6ICgoYm9vbCh4KSAmJiAhYm9vbCh5
KSkgPyB0cnVlIDogKChib29sKHgpICYmIGJvb2woeSkpID8geC52YWx1ZSgpIDwgeS52YWx1ZSgp
IDogeC5lcnJvcigpIDwgeS5lcnJvcigpKSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBF
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiAhKHggPT0geSkgJiYgISh4IDwgeSk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gKHgg
PT0geSkgfHwgKHggPCB5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVk
PFQsIEU+JiB5KSB7IHJldHVybiAoeCA9PSB5KSB8fCAoeCA+IHkpOyB9CisKK3RlbXBsYXRlIDxj
bGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+
JiB4LCBjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeSkgeyByZXR1cm4gYm9vbCh4KSA9PSBib29s
KHkpICYmICh4ID8gdHJ1ZSA6IHguZXJyb3IoKSA9PSB5LmVycm9yKCkpOyB9IC8vIE5vdCBpbiB0
aGUgY3VycmVudCBwYXBlci4KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjwoY29uc3QgRXhwZWN0ZWQ8dm9pZCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+
JiB5KSB7IHJldHVybiAoIWJvb2woeCkgJiYgYm9vbCh5KSkgPyBmYWxzZSA6ICgoYm9vbCh4KSAm
JiAhYm9vbCh5KSkgPyB0cnVlIDogKChib29sKHgpICYmIGJvb2woeSkpID8gZmFsc2UgOiB4LmVy
cm9yKCkgPCB5LmVycm9yKCkpKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisKK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ID09IEV4cGVjdGVkPFQs
IEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhw
ZWN0ZWQ8VCwgRT4oeCkgPT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkp
IHsgcmV0dXJuIHggIT0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSAhPSB5OyB9Cit0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4IDwgRXhwZWN0ZWQ8VCwgRT4oeSk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQs
IEU+KHgpIDwgeTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJu
IHggPD0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA8PSB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ID4gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYg
eCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID4g
eTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
Pj0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPj0gRXhw
ZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJl
dHVybiBFeHBlY3RlZDxULCBFPih4KSA+PSB5OyB9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA9PSBFeHBlY3RlZDxULCBFPih5
KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PT0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7
IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA9PSB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwg
Y29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggIT0gRXhwZWN0ZWQ8VCwgRT4o
eSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkg
eyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgIT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwg
Y29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPCBFeHBlY3RlZDxULCBFPih5
KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PChjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsg
IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA8IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA8PSBFeHBlY3RlZDxULCBFPih5
KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7
IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA8PSB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA+IEV4cGVjdGVkPFQsIEU+KHkp
OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPiB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPj0gRXhwZWN0ZWQ8VCwgRT4oeSk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPj0geTsgfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRT4gdm9pZCBzd2FwKEV4cGVjdGVkPFQsIEU+JiB4LCBFeHBlY3RlZDxULCBFPiYg
eSkgeyB4LnN3YXAoeSk7IH0KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEUgPSBXVEY6Ok51
bGxvcHRUYWc+IGNvbnN0ZXhwciBFeHBlY3RlZDxzdGQ6OmRlY2F5X3Q8VD4sIEU+IG1ha2VFeHBl
Y3RlZChUJiYgdikKK3sKKyAgICByZXR1cm4gRXhwZWN0ZWQ8dHlwZW5hbWUgc3RkOjpkZWNheTxU
Pjo6dHlwZSwgRT4oc3RkOjpmb3J3YXJkPFQ+KHYpKTsKK30KK3RlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBFPiBjb25zdGV4cHIgRXhwZWN0ZWQ8VCwgc3RkOjpkZWNheV90PEU+PiBtYWtlRXhwZWN0
ZWRGcm9tRXJyb3IoRSYmIGUpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIHN0ZDo6ZGVjYXlfdDxFPj4o
bWFrZVVuZXhwZWN0ZWQoZSkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRSwgY2xhc3Mg
VT4gY29uc3RleHByIEV4cGVjdGVkPFQsIEU+IG1ha2VFeHBlY3RlZEZyb21FcnJvcihVJiYgdSkg
eyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4obWFrZVVuZXhwZWN0ZWQoRSB7IHN0ZDo6Zm9yd2FyZDxV
Pih1KSB9ICkpOyB9CisvLyB0ZW1wbGF0ZSA8Y2xhc3MgRiwgY2xhc3MgRSA9IFdURjo6TnVsbG9w
dFRhZz4gY29uc3RleHByIEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPEY+Ojp0eXBl
LCBFPiBtYWtlRXhwZWN0ZWRfZnJvbV9jYWxsKEYgZik7CisKK0V4cGVjdGVkPHZvaWQsIFdURjo6
TnVsbG9wdFRhZz4gbWFrZUV4cGVjdGVkKCkgeyByZXR1cm4gRXhwZWN0ZWQ8dm9pZCwgV1RGOjpO
dWxsb3B0VGFnPigpOyB9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsK
KwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IHN0cnVjdCBoYXNoPFdURjo6RXhwZWN0ZWQ8
VCwgRT4+IHsKKyAgICB0eXBlZGVmIFdURjo6RXhwZWN0ZWQ8VCwgRT4gYXJndW1lbnRfdHlwZTsK
KyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHJlc3VsdF90eXBlOworICAgIHJlc3VsdF90eXBlIG9w
ZXJhdG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYgZSkgY29uc3QgeyByZXR1cm4gZSA/IGhhc2g8
dHlwZW5hbWUgYXJndW1lbnRfdHlwZTo6VmFsdWVUeXBlPiB7IH0gKGUudmFsdWUoKSkgOiBoYXNo
PHR5cGVuYW1lIGFyZ3VtZW50X3R5cGU6OkVycm9yVHlwZT4geyB9IChlLmVycm9yKCkpOyB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gc3RydWN0IGhhc2g8V1RGOjpFeHBlY3RlZDx2b2lkLCBF
Pj4geworICAgIHR5cGVkZWYgV1RGOjpFeHBlY3RlZDx2b2lkLCBFPiBhcmd1bWVudF90eXBlOwor
ICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgcmVzdWx0X3R5cGU7CisgICAgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBlKSBjb25zdCB7IHJldHVybiBlID8gMCA6IGhh
c2g8dHlwZW5hbWUgYXJndW1lbnRfdHlwZTo6RXJyb3JUeXBlPiB7IH0gKGUuZXJyb3IoKSk7IH0K
K307CisKK30KKwordXNpbmcgV1RGOjpVbmV4cGVjdGVkVHlwZTsKK3VzaW5nIFdURjo6bWFrZVVu
ZXhwZWN0ZWQ7Cit1c2luZyBXVEY6OlVuZXhwZWN0OwordXNpbmcgV1RGOjpFeHBlY3RlZDsKK3Vz
aW5nIFdURjo6bWFrZUV4cGVjdGVkOwordXNpbmcgV1RGOjptYWtlRXhwZWN0ZWRGcm9tRXJyb3I7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzUz
ODZiOS4uZGIyZmU0NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTExLTA4ICBKRiBCYXN0aWVuICA8amZiYXN0
aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV1RGOjpFeHBlY3RlZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTI2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0V4cGVjdGVkLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KwogMjAxNi0xMS0wOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFtNYWNdIFN0b3AgdXNpbmcgZGVwcmVjYXRlZCBBcHBLaXQgZW51bWVyYXRpb24gdmFsdWVzCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCBmYjYyMmM1Li44OTdiMGVkIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTUwLDYgKzUwLDcgQEAgc2V0KFRlc3RXVEZfU09V
UkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvRGVxdWUuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL0VudW1UcmFpdHMuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0V4cGVjdGVkLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvSGFz
aFNldC5jcHAKQEAgLTYxLDYgKzYyLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRpbWUuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL05ha2VkUHRyLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9PcHRpb25hbC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
T3B0aW9uU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9QYXJraW5n
TG90LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9SZWRCbGFja1RyZWUu
Y3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJjY2E4ZTEuLmUwNDUxMzkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00NDcsNiArNDQ3LDcgQEAKIAkJQUQ1N0FDMjAxREE3NDY1MDAw
RkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENTdBQzFF
MURBNzQ2NEQwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hl
X0J1bmRsZS5jcHAgKi87IH07CiAJCUFENTdBQzIxMURBNzQ2NUIwMEZGMUJERSAvKiBEaWRSZW1v
dmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENTdBQzFGMURBNzQ2NEQwMEZGMUJERSAvKiBEaWRS
ZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJQUQ1N0FDMjIx
REE3NDY2RTAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENTdBQzFEMURBNzQ2MzgwMEZGMUJE
RSAvKiBtYW55LWlmcmFtZXMuaHRtbCAqLzsgfTsKKwkJQUQ3QzQzNEQxREQyQTU0RTAwMjY4ODhC
IC8qIEV4cGVjdGVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEN0M0MzRDMUREMkE1NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi87IH07CiAJ
CUFEQ0VCQkE2MUQ5QUUyMjkwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAv
KiBDb25zdW1lLmNwcCAqLzsgfTsKIAkJQjU1QUQxRDUxNzlGM0IzMDAwQUMxNDk0IC8qIFByZXZl
bnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVBRDFEMzE3OUYzQUJGMDBBQzE0OTQgLyog
UHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmdfQnVuZGxlLmNwcCAqLzsgfTsKIAkJQjU1
RjExQjcxNTE3RDAzMzAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1
RjExQjAxNTE3QTJDNDAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwg
Ki87IH07CkBAIC0xMDk3LDYgKzEwOTgsNyBAQAogCQlBRDU3QUMxRDFEQTc0NjM4MDBGRjFCREUg
LyogbWFueS1pZnJhbWVzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibWFueS1p
ZnJhbWVzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDU3QUMxRTFEQTc0
NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkUmVtb3ZlRnJh
bWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRDU3QUMxRjFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9t
SGllYXJjaHlJblBhZ2VDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ3QzQzNEMxREQyQTU0NzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cGVjdGVkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURDRUJCQTUxRDk5RDRDRjAwMkUyODNBIC8q
IENvbnN1bWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3Vt
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI0MDM5RjlDMTVFNkQ4QjMwMDcy
NTVENiAvKiBNYXRoRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hdGhFeHRyYXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVBRDFE
MTE3OUYzMzY2MDBBQzE0OTQgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmcubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZy5t
bTsgcGF0aCA9IFdlYktpdDJPYmpDL1ByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4MCw2ICsxNzgyLDcgQEAKIAkJQkM5
MDk2NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ3QzQzNEMxREQyQTU0NzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmNwcCAqLywKIAkJCQlDMDk5MUM0RjE0M0M3RDY4MDA3OTk4RjIgLyogY2YgKi8sCiAJCQkJN0NC
QkEwNzUxOUJCOEEwOTAwQkJGMDI1IC8qIGRhcndpbiAqLywKIAkJCQlCQzAyOUIxQTE0ODZCMjM4
MDA4MTdEQTkgLyogbnMgKi8sCkBAIC0yMzEwLDYgKzIzMTMsNyBAQAogCQkJCTdDODNERUZFMUQw
QTU5MEMwMEZFQkNGMyAvKiBOYWtlZFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYw
MTFEMEE1OTBDMDBGRUJDRjMgLyogT3B0aW9uYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURD
RUJCQTYxRDlBRTIyOTAwMkUyODNBIC8qIENvbnN1bWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QUQ3QzQzNEQxREQyQTU0RTAwMjY4ODhCIC8qIEV4cGVjdGVkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREY1OTFEMEE1OTBDMDBGRUJDRjMgLyogUGFya2luZ0xvdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREYxMzFEMEE1OTBDMDBGRUJDRjMgLyogUmVkQmxhY2tUcmVl
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvRXhwZWN0ZWQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRXhwZWN0
ZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmMzNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAK
QEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPGNsYXNzIEU+IHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBVbmV4cGVjdGVk
VHlwZTxFPiYgdSkKK3sKKyAgICByZXR1cm4gb3MgPDwgdS52YWx1ZSgpOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVh
bSYgb3MsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiBlKQoreworICAgIGlmIChlLmhhc1ZhbHVlKCkp
CisgICAgICAgIHJldHVybiBvcyA8PCBlLnZhbHVlKCk7CisgICAgcmV0dXJuIG9zIDw8IGUuZXJy
b3IoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIEU+IHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgZSkKK3sKKyAgICBpZiAo
ZS5oYXNWYWx1ZSgpKQorICAgICAgICByZXR1cm4gb3MgPDwgIiI7CisgICAgcmV0dXJuIG9zIDw8
IGUuZXJyb3IoKTsKK30KKworfQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NvbnN0
ZXhwciBjb25zdCBjaGFyKiBvb3BzID0gIm9vcHMiOworY29uc3RleHByIGNvbnN0IGNoYXIqIGZv
b2YgPSAiZm9vZiI7CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBVbmV4cGVjdGVkVHlwZSkKK3sKKyAg
ICB7CisgICAgICAgIGF1dG8gdSA9IFVuZXhwZWN0ZWRUeXBlPGludD4oNDIpOworICAgICAgICBF
WFBFQ1RfRVEodS52YWx1ZSgpLCA0Mik7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIGMgPSBtYWtl
VW5leHBlY3RlZCg0Mik7CisgICAgICAgIEVYUEVDVF9FUShjLnZhbHVlKCksIDQyKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHUsIGMpOworICAgICAgICBFWFBFQ1RfRkFMU0UodSAhPSBjKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHUgPCBjKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHUgPiBjKTsKKyAg
ICAgICAgRVhQRUNUX0xFKHUsIGMpOworICAgICAgICBFWFBFQ1RfR0UodSwgYyk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgYXV0byBjID0gbWFrZVVuZXhwZWN0ZWQob29wcyk7CisgICAgICAgIEVY
UEVDVF9FUShjLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gcyA9
IG1ha2VVbmV4cGVjdGVkKHN0ZDo6c3RyaW5nKG9vcHMpKTsKKyAgICAgICAgRVhQRUNUX0VRKHMu
dmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3RleHByIGF1dG8gczAg
PSBtYWtlVW5leHBlY3RlZChvb3BzKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gczEoczApOwor
ICAgICAgICBFWFBFQ1RfRVEoczAsIHMxKTsKKyAgICB9Cit9CisKK3N0cnVjdCBmb28geworICAg
IGludCB2OworICAgIGZvbyhpbnQgdikKKyAgICAgICAgOiB2KHYpCisgICAgeyB9CisgICAgfmZv
bygpIHsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBmb28mIHkpIGNvbnN0IHsgcmV0dXJu
IHYgPT0geS52OyB9CisgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mLCBjb25zdCBmb28mKTsKK307CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpv
c3RyZWFtJiBvcywgY29uc3QgZm9vJiBmKSB7IHJldHVybiBvcyA8PCBmLnY7IH0KKworVEVTVChX
VEZfRXhwZWN0ZWQsIGV4cGVjdGVkKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25z
dCBjaGFyKj4gRTsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPGludCwgY29uc3Qgdm9pZCo+IEVWOwor
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8Zm9vLCBjb25zdCBjaGFyKj4gRm9vQ2hhcjsKKyAgICB0eXBl
ZGVmIEV4cGVjdGVkPGZvbywgc3RkOjpzdHJpbmc+IEZvb1N0cmluZzsKKyAgICB7CisgICAgICAg
IGF1dG8gZSA9IEUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZS5oYXNWYWx1ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGUudmFsdWUoKSwgMCk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlT3Io
My4xNCksIDApOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBFIGU7CisgICAgICAg
IEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlKCks
IDApOworICAgICAgICBFWFBFQ1RfRVEoZS52YWx1ZU9yKDMuMTQpLCAwKTsKKyAgICB9CisgICAg
eworICAgICAgICBhdXRvIGUgPSBFKDQyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZS5oYXNWYWx1
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWUoKSwgNDIpOworICAgICAgICBFWFBFQ1Rf
RVEoZS52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgICAgIGNvbnN0IGF1dG8gZTIoZSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGUyLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZTIudmFs
dWUoKSwgNDIpOworICAgICAgICBFWFBFQ1RfRVEoZTIudmFsdWVPcigzLjE0KSwgNDIpOworICAg
ICAgICBFIGUzOworICAgICAgICBlMyA9IGUyOworICAgICAgICBFWFBFQ1RfVFJVRShlMy5oYXNW
YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUzLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGUzLnZhbHVlT3IoMy4xNCksIDQyKTsKKyAgICAgICAgY29uc3QgRSBlNCA9IGUyOwor
ICAgICAgICBFWFBFQ1RfVFJVRShlNC5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGU0
LnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGU0LnZhbHVlT3IoMy4xNCksIDQyKTsK
KyAgICB9CisgICAgeworICAgICAgICBjb25zdGV4cHIgRSBjKDQyKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoYy5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGMudmFsdWUoKSwgNDIpOwor
ICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgICAgIGNvbnN0ZXhw
ciBjb25zdCBhdXRvIGMyKGMpOworICAgICAgICBFWFBFQ1RfVFJVRShjMi5oYXNWYWx1ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKGMyLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGMy
LnZhbHVlT3IoMy4xNCksIDQyKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHUgPSBFKG1h
a2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHUuaGFzVmFsdWUoKSk7
CisgICAgICAgIEVYUEVDVF9FUSh1LmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEo
dS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1LnZh
bHVlT3IoMy4xNCksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdXYgPSBFVihtYWtl
VW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1di5oYXNWYWx1ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKHV2LmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEo
dXYuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEodXYu
dmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgRSBlID0gbWFrZVVuZXhw
ZWN0ZWQob29wcyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5l
eHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS52YWx1ZU9yKDMu
MTQpLCAzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUgPSBtYWtlRXhwZWN0ZWRGcm9t
RXJyb3I8aW50LCBjb25zdCBjaGFyKj4ob29wcyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShlLmhh
c1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAg
RVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgICAgICBFWFBF
Q1RfRVEoZS52YWx1ZU9yKDMuMTQpLCAzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUg
PSBtYWtlRXhwZWN0ZWRGcm9tRXJyb3I8aW50LCBjb25zdCB2b2lkKj4ob29wcyk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5lcnJvcigp
LCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9v
cHMpOworICAgICAgICBFWFBFQ1RfRVEoZS52YWx1ZU9yKDMuMTQpLCAzKTsKKyAgICB9CisgICAg
eworICAgICAgICBhdXRvIGUgPSBGb29DaGFyKDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGUtPnYs
IDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKCgqZSkudiwgNDIpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGF1dG8gZTAgPSBFKDQyKTsKKyAgICAgICAgYXV0byBlMSA9IEUoMTAyNCk7CisgICAgICAg
IHN3YXAoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLnZhbHVlKCksIDEwMjQpOworICAg
ICAgICBFWFBFQ1RfRVEoZTEudmFsdWUoKSwgNDIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1
dG8gZTAgPSBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgYXV0byBlMSA9IEUobWFr
ZVVuZXhwZWN0ZWQoZm9vZikpOworICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVD
VF9FUShlMC5lcnJvcigpLCBmb29mKTsKKyAgICAgICAgRVhQRUNUX0VRKGUxLmVycm9yKCksIG9v
cHMpOworICAgIH0KKyAgICB7CisgICAgICAgIEZvb0NoYXIgYyhmb28oNDIpKTsKKyAgICAgICAg
RVhQRUNUX0VRKGMtPnYsIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKCgqYykudiwgNDIpOworICAg
IH0KKyAgICB7CisgICAgICAgIEZvb1N0cmluZyBzKGZvbyg0MikpOworICAgICAgICBFWFBFQ1Rf
RVEocy0+diwgNDIpOworICAgICAgICBFWFBFQ1RfRVEoKCpzKS52LCA0Mik7CisgICAgICAgIGNv
bnN0IGNoYXIqIG1lc3NhZ2UgPSAidmVyeSBsb25nIGZhaWx1cmUgc3RyaW5nLCBmb3IgdmVyeSBi
YWQgZmFpbHVyZSBjYXNlcyI7CisgICAgICAgIEZvb1N0cmluZyBlMChtYWtlVW5leHBlY3RlZDxz
dGQ6OnN0cmluZz4obWVzc2FnZSkpOworICAgICAgICBGb29TdHJpbmcgZTEobWFrZVVuZXhwZWN0
ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAgRm9vU3RyaW5nIGUyKG1ha2VVbmV4
cGVjdGVkPHN0ZDo6c3RyaW5nPihzdGQ6OnN0cmluZygpKSk7CisgICAgICAgIEVYUEVDVF9FUShl
MC5lcnJvcigpLCBzdGQ6OnN0cmluZyhtZXNzYWdlKSk7CisgICAgICAgIEVYUEVDVF9FUShlMCwg
ZTEpOworICAgICAgICBFWFBFQ1RfTkUoZTAsIGUyKTsKKyAgICAgICAgRm9vU3RyaW5nKiBlNCA9
IG5ldyBGb29TdHJpbmcobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAg
ICAgICAgRm9vU3RyaW5nKiBlNSA9IG5ldyBGb29TdHJpbmcoKmU0KTsKKyAgICAgICAgRVhQRUNU
X0VRKGUwLCAqZTQpOworICAgICAgICBkZWxldGUgZTQ7CisgICAgICAgIEVYUEVDVF9FUShlMCwg
KmU1KTsKKyAgICAgICAgZGVsZXRlIGU1OworICAgIH0KK30KKworVEVTVChXVEZfRXhwZWN0ZWQs
IEV4cGVjdGVkX3ZvaWQpCit7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBjb25zdCBjaGFy
Kj4gRTsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIGNvbnN0IHZvaWQqPiBFVjsKKyAgICB0
eXBlZGVmIEV4cGVjdGVkPHZvaWQsIHN0ZDo6c3RyaW5nPiBTdHJpbmc7CisgICAgeworICAgICAg
ICBhdXRvIGUgPSBFKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUoKSk7CisgICAg
ICAgIGNvbnN0IGF1dG8gZTIoZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGUyLmhhc1ZhbHVlKCkp
OworICAgICAgICBFWFBFQ1RfRVEoZSwgZTIpOworICAgICAgICBFIGUzOworICAgICAgICBlMyA9
IGUyOworICAgICAgICBFWFBFQ1RfVFJVRShlMy5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKGUsIGUzKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdGV4cHIgRSBjOworICAgICAg
ICBFWFBFQ1RfVFJVRShjLmhhc1ZhbHVlKCkpOworICAgICAgICBjb25zdGV4cHIgY29uc3QgYXV0
byBjMihjKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYzIuaGFzVmFsdWUoKSk7CisgICAgICAgIEVY
UEVDVF9FUShjLCBjMik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1ID0gRShtYWtlVW5l
eHBlY3RlZChvb3BzKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1Lmhhc1ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfRVEodS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHUuZ2V0
VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
dXYgPSBFVihtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1di5o
YXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LmVycm9yKCksIG9vcHMpOworICAgICAg
ICBFWFBFQ1RfRVEodXYuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAg
ICB7CisgICAgICAgIEUgZSA9IG1ha2VVbmV4cGVjdGVkKG9vcHMpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7
CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAg
ICB9CisgICAgeworICAgICAgICBhdXRvIGUgPSBtYWtlRXhwZWN0ZWRGcm9tRXJyb3I8dm9pZCwg
Y29uc3QgY2hhcio+KG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShl
LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBh
dXRvIGUgPSBtYWtlRXhwZWN0ZWRGcm9tRXJyb3I8dm9pZCwgY29uc3Qgdm9pZCo+KG9vcHMpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUu
ZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1
ZSgpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0gRSgpOworICAgICAg
ICBhdXRvIGUxID0gRSgpOworICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVDVF9F
UShlMCwgZTEpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gZTAgPSBFKG1ha2VVbmV4cGVj
dGVkKG9vcHMpKTsKKyAgICAgICAgYXV0byBlMSA9IEUobWFrZVVuZXhwZWN0ZWQoZm9vZikpOwor
ICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVDVF9FUShlMC5lcnJvcigpLCBmb29m
KTsKKyAgICAgICAgRVhQRUNUX0VRKGUxLmVycm9yKCksIG9vcHMpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAidmVyeSBsb25nIGZhaWx1cmUgc3RyaW5nLCBm
b3IgdmVyeSBiYWQgZmFpbHVyZSBjYXNlcyI7CisgICAgICAgIFN0cmluZyBlMChtYWtlVW5leHBl
Y3RlZDxzdGQ6OnN0cmluZz4obWVzc2FnZSkpOworICAgICAgICBTdHJpbmcgZTEobWFrZVVuZXhw
ZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAgU3RyaW5nIGUyKG1ha2VVbmV4
cGVjdGVkPHN0ZDo6c3RyaW5nPihzdGQ6OnN0cmluZygpKSk7CisgICAgICAgIEVYUEVDVF9FUShl
MC5lcnJvcigpLCBzdGQ6OnN0cmluZyhtZXNzYWdlKSk7CisgICAgICAgIEVYUEVDVF9FUShlMCwg
ZTEpOworICAgICAgICBFWFBFQ1RfTkUoZTAsIGUyKTsKKyAgICAgICAgU3RyaW5nKiBlNCA9IG5l
dyBTdHJpbmcobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAg
U3RyaW5nKiBlNSA9IG5ldyBTdHJpbmcoKmU0KTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCAqZTQp
OworICAgICAgICBkZWxldGUgZTQ7CisgICAgICAgIEVYUEVDVF9FUShlMCwgKmU1KTsKKyAgICAg
ICAgZGVsZXRlIGU1OworICAgIH0KK30KKworVEVTVChXVEZfRXhwZWN0ZWQsIGNvbXBhcmlzb24p
Cit7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGNvbnN0IGNoYXIqPiBFeDsKKyAgICB0eXBl
ZGVmIEV4cGVjdGVkPGludCwgaW50PiBFcjsKKworICAgIC8vIFR3byBFeHBlY3RlZCwgbm8gZXJy
b3JzLgorICAgIEVYUEVDVF9FUShFeCg0MiksIEV4KDQyKSk7CisgICAgRVhQRUNUX05FKEV4KDQy
KSwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9MVChFeCg0MiksIEV4KDEwMjQpKTsKKyAgICBFWFBF
Q1RfR1QoRXgoMTAyNCksIEV4KDQyKSk7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgRXgoNDIpKTsK
KyAgICBFWFBFQ1RfR0UoRXgoNDIpLCBFeCg0MikpOworICAgIEVYUEVDVF9MRShFeCg0MiksIEV4
KDEwMjQpKTsKKyAgICBFWFBFQ1RfR0UoRXgoMTAyNCksIEV4KDQyKSk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UoRXgoNDIpID09IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpICE9IEV4
KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDEwMjQpIDwgRXgoNDIpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRXgoNDIpID4gRXgoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8IEV4
KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+PSBFeCgxMDI0KSk7CisKKyAgICAvLyBU
d28gRXhwZWN0ZWQsIGhhbGYgZXJyb3JzLgorICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPT0gRXgo
bWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfTkUoRXgoNDIpLCBFeChtYWtlVW5l
eHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9MVChFeCg0MiksIEV4KG1ha2VVbmV4cGVjdGVk
KG9vcHMpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IEV4KG1ha2VVbmV4cGVjdGVkKG9v
cHMpKSk7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgRXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID49IEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpID09IEV4KDQyKSk7Cisg
ICAgRVhQRUNUX05FKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgRXgoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpIDwgRXgoNDIpKTsKKyAgICBFWFBFQ1Rf
R1QoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpLCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShF
eChtYWtlVW5leHBlY3RlZChvb3BzKSkgPD0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfR0UoRXgobWFr
ZVVuZXhwZWN0ZWQob29wcykpLCBFeCg0MikpOworCisgICAgLy8gVHdvIEV4cGVjdGVkLCBhbGwg
ZXJyb3JzLgorICAgIEVYUEVDVF9FUShFcig0MiksIEVyKDQyKSk7CisgICAgRVhQRUNUX05FKEVy
KDQyKSwgRXIoMTAyNCkpOworICAgIEVYUEVDVF9MVChFcig0MiksIEVyKDEwMjQpKTsKKyAgICBF
WFBFQ1RfR1QoRXIoMTAyNCksIEVyKDQyKSk7CisgICAgRVhQRUNUX0xFKEVyKDQyKSwgRXIoNDIp
KTsKKyAgICBFWFBFQ1RfR0UoRXIoNDIpLCBFcig0MikpOworICAgIEVYUEVDVF9MRShFcig0Miks
IEVyKDEwMjQpKTsKKyAgICBFWFBFQ1RfR0UoRXIoMTAyNCksIEVyKDQyKSk7CisKKyAgICBFWFBF
Q1RfRkFMU0UoRXIoNDIpID09IEVyKDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXIoNDIpICE9
IEVyKDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEVyKDEwMjQpIDwgRXIoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXIoNDIpID4gRXIoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRShFcigxMDI0KSA8
PSBFcig0MikpOworICAgIEVYUEVDVF9GQUxTRShFcig0MikgPj0gRXIoMTAyNCkpOworCisgICAg
Ly8gT25lIEV4cGVjdGVkLCBvbmUgdmFsdWUuCisgICAgRVhQRUNUX0VRKEV4KDQyKSwgNDIpOwor
ICAgIEVYUEVDVF9ORShFeCg0MiksIDApOworICAgIEVYUEVDVF9MVChFeCg0MiksIDEwMjQpOwor
ICAgIEVYUEVDVF9HVChFeCgxMDI0KSwgNDIpOworICAgIEVYUEVDVF9MRShFeCg0MiksIDQyKTsK
KyAgICBFWFBFQ1RfR0UoRXgoNDIpLCA0Mik7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgMTAyNCk7
CisgICAgRVhQRUNUX0dFKEV4KDEwMjQpLCA0Mik7CisKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIp
ID09IDApOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgIT0gNDIpOworICAgIEVYUEVDVF9GQUxT
RShFeCgxMDI0KSA8IDQyKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID4gMTAyNCk7CisgICAg
RVhQRUNUX0ZBTFNFKEV4KDEwMjQpIDwgNDIpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0g
MTAyNCk7CisKKyAgICBFWFBFQ1RfRVEoNDIsIEV4KDQyKSk7CisgICAgRVhQRUNUX05FKDQyLCBF
eCgxMDI0KSk7CisgICAgRVhQRUNUX0xUKDQyLCBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0dUKDEw
MjQsIEV4KDQyKSk7CisgICAgRVhQRUNUX0xFKDQyLCBFeCg0MikpOworICAgIEVYUEVDVF9HRSg0
MiwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfTEUoNDIsIEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfR0Uo
MTAyNCwgRXgoNDIpKTsKKworICAgIEVYUEVDVF9GQUxTRSg0MiA9PSBFeCgxMDI0KSk7CisgICAg
RVhQRUNUX0ZBTFNFKDQyICE9IEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKDEwMjQgPCBFeCg0
MikpOworICAgIEVYUEVDVF9GQUxTRSg0MiA+IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
MTAyNCA8PSBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRSg0MiA+PSBFeCgxMDI0KSk7CisKKyAg
ICAvLyBPbmUgRXhwZWN0ZWQsIG9uZSB1bmV4cGVjdGVkLgorICAgIEVYUEVDVF9GQUxTRShFeCg0
MikgPT0gbWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgIEVYUEVDVF9ORShFeCg0MiksIG1ha2VV
bmV4cGVjdGVkKG9vcHMpKTsKKyAgICBFWFBFQ1RfTFQoRXgoNDIpLCBtYWtlVW5leHBlY3RlZChv
b3BzKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsK
KyAgICBFWFBFQ1RfTEUoRXgoNDIpLCBtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNU
X0ZBTFNFKEV4KDQyKSA+PSBtYWtlVW5leHBlY3RlZChvb3BzKSk7CisKKyAgICBFWFBFQ1RfRkFM
U0UobWFrZVVuZXhwZWN0ZWQob29wcykgPT0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfTkUobWFrZVVu
ZXhwZWN0ZWQob29wcyksIEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1ha2VVbmV4cGVjdGVk
KG9vcHMpIDwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfR1QobWFrZVVuZXhwZWN0ZWQob29wcyksIEV4
KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1ha2VVbmV4cGVjdGVkKG9vcHMpIDw9IEV4KDQyKSk7
CisgICAgRVhQRUNUX0dFKG1ha2VVbmV4cGVjdGVkKG9vcHMpLCBFeCg0MikpOworfQorCitURVNU
KFdURl9FeHBlY3RlZCwgaGFzaCkKK3sKKyAgICB0eXBlZGVmIEV4cGVjdGVkPGludCwgY29uc3Qg
Y2hhcio+IEU7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPEUsIGludD4gbTsKKyAgICBtLmluc2Vy
dCh7IEUoNDIpLCA0MiB9KTsKKyAgICBtLmluc2VydCh7IEUobWFrZVVuZXhwZWN0ZWQob29wcykp
LCA1IH0pOworICAgIG0uaW5zZXJ0KHsgRSgxMDI0KSwgMTAyNCB9KTsKKyAgICBtLmluc2VydCh7
IEUobWFrZVVuZXhwZWN0ZWQoZm9vZikpLCAweGYwMGYgfSk7CisgICAgRVhQRUNUX0VRKG1bRSg0
MildLCA0Mik7CisgICAgRVhQRUNUX0VRKG1bRSgxMDI0KV0sIDEwMjQpOworICAgIEVYUEVDVF9F
UShtW0UobWFrZVVuZXhwZWN0ZWQob29wcykpXSwgNSk7CisgICAgRVhQRUNUX0VRKG1bRShtYWtl
VW5leHBlY3RlZChmb29mKSldLCAweGYwMGYpOworfQorCitURVNUKFdURl9FeHBlY3RlZCwgaGFz
aF92b2lkKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgY29uc3QgY2hhcio+IEU7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPEUsIGludD4gbTsKKyAgICBtLmluc2VydCh7IEUoKSwgNDIg
fSk7CisgICAgbS5pbnNlcnQoeyBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgNSB9KTsKKyAgICBt
Lmluc2VydCh7IEUobWFrZVVuZXhwZWN0ZWQoZm9vZikpLCAweGYwMGYgfSk7CisgICAgRVhQRUNU
X0VRKG1bRSgpXSwgNDIpOworICAgIEVYUEVDVF9FUShtW0UobWFrZVVuZXhwZWN0ZWQob29wcykp
XSwgNSk7CisgICAgRVhQRUNUX0VRKG1bRShtYWtlVW5leHBlY3RlZChmb29mKSldLCAweGYwMGYp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Via2l0QVBJCi0tIAoyLjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294473</attachid>
            <date>2016-11-10 22:24:13 -0800</date>
            <delta_ts>2016-11-11 17:23:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Implement-WTF-Expected.patch</filename>
            <type>text/plain</type>
            <size>50572</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBhZjMzNTJkMjJiZjhhMmViZmM5MDM2M2VhN2U5MGM3YTgxMmU4NGMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDggTm92IDIwMTYgMTc6MjM6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1l
bnQgV1RGOjpFeHBlY3RlZAoKc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1heSBi
ZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKY29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0
aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xl
IGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCmVycm9yLgoKVGhpcyB3
b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCgpV
c2luZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYWxsb3cgdXMgdG8gcHJvdmlkZSBmZWVkYmFj
ayB0byB0aGUKc3RhbmRhcmRzIGNvbW1pdHRlZSBhbmQgZ3VpZGUgc3RkOjpleHBlY3RlZCdzIGRl
c2lnbiBiZWZvcmUgaXQKZ2V0cyBzdGFuZGFyZGl6ZWQuIEkndmUgYWxyZWFkeSBzZW50IGEgYnVu
Y2ggb2YgZmVlZGJhY2sgdG8gdGhlCmF1dGhvciBiYXNlZCBvbiBteSBleHBlcmllbmNlIGltcGxl
bWVudGluZyB0aGlzLgoKVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6
OkV4Y2VwdGlvbk9yLgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDU0ICsrKwogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiAgICAgICAgICAgfCAgIDQgKwogU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIFNvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDM5ICsrKysrKysrKysrKysrKysrKysrKwogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMgKysK
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgIHwgICAy
ICsKIC4uLi9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgIHwg
ICA0ICsKIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCAgICAgICAg
IHwgNDM5ICsrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA5OTAgaW5zZXJ0
aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYvd3Rm
L0V4cGVjdGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9FeHBlY3RlZC5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFhNDc5YzkuLjAxMTg0YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDUgKzEs
NTkgQEAKIDIwMTYtMTEtMTAgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCisg
ICAgICAgIEltcGxlbWVudCBXVEY6OkV4cGVjdGVkCisKKyAgICAgICAgc3RkOjpleHBlY3RlZCBp
c24ndCBpbiBDKysxNywgYW5kIG1heSBiZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKKyAgICAgICAg
Y29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlw
ZS10YWdnZWQKKyAgICAgICAgdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xlIGV4cGVjdGVkIHJlc3Vs
dCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCisgICAgICAgIGVycm9yLgorCisgICAgICAgIFRo
aXMgd291bGQgYmUgdXNlZnVsIGluIHRoZSBXZWJBc3NlbWJseSBwYXJzZXIsIGZvciBleGFtcGxl
LgorCisgICAgICAgIFVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBhbGxvdyB1cyB0byBw
cm92aWRlIGZlZWRiYWNrIHRvIHRoZQorICAgICAgICBzdGFuZGFyZHMgY29tbWl0dGVlIGFuZCBn
dWlkZSBzdGQ6OmV4cGVjdGVkJ3MgZGVzaWduIGJlZm9yZSBpdAorICAgICAgICBnZXRzIHN0YW5k
YXJkaXplZC4gSSd2ZSBhbHJlYWR5IHNlbnQgYSBidW5jaCBvZiBmZWVkYmFjayB0byB0aGUKKyAg
ICAgICAgYXV0aG9yIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UgaW1wbGVtZW50aW5nIHRoaXMuCisK
KyAgICAgICAgVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6OkV4Y2Vw
dGlvbk9yLgorCisgICAgICAgIEltcGxlbWVudCBXVEY6OkV4cGVjdGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1MjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9Db21waWxlci5oOiBBZGQgUkVMQVhFRF9DT05TVEVY
UFIKKyAgICAgICAgKiB3dGYvRXhwZWN0ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuZXhw
ZWN0ZWRUeXBlOjpVbmV4cGVjdGVkVHlwZSk6CisgICAgICAgIChXVEY6OlVuZXhwZWN0ZWRUeXBl
Ojp2YWx1ZSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3BlcmF0
b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pj0pOgorICAgICAgICAoV1RGOjptYWtlVW5leHBlY3RlZCk6CisgICAgICAgIChXVEY6OkV4cGVj
dGVkRGV0YWlsOjpUaHJvdyk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkRGV0YWlsOjpDb25zdGV4
cHJCYXNlOjpDb25zdGV4cHJCYXNlKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWREZXRhaWw6OkJh
c2U6OkJhc2UpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZERldGFpbDo6QmFzZTo6fkJhc2UpOgor
ICAgICAgICAoV1RGOjpFeHBlY3RlZDo6RXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpFeHBlY3Rl
ZDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OnN3YXApOgorICAgICAgICAo
V1RGOjpFeHBlY3RlZDo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVy
YXRvciopOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAg
IChXVEY6OkV4cGVjdGVkOjpoYXNWYWx1ZSk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjp2YWx1
ZSk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjplcnJvcik6CisgICAgICAgIChXVEY6OkV4cGVj
dGVkOjpnZXRVbmV4cGVjdGVkKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OnZhbHVlT3IpOgor
ICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAgICAgKFdURjo6bWFrZUV4cGVjdGVkKToKKyAgICAg
ICAgKFdURjo6bWFrZUV4cGVjdGVkRnJvbUVycm9yKToKKworMjAxNi0xMS0xMCAgSkYgQmFzdGll
biAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogbGVu
Z3RoID4gb2Zmc2V0IGVuY291bnRlcmVkIHdpdGggd2FzbS55YW1sL3dhc20vanMtYXBpL3Rlc3Rf
TW9kdWxlLmpzLmRlZmF1bHQtd2FzbQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0NTk3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGM2NjI4YzUuLmYwNTc5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMzI4LDYgKzMyOCw3IEBACiAJCUE4QTQ3NDg2MTUxQTgyNUIw
MDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWRE
YXRhLmNwcCAqLzsgfTsKIAkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi87IH07CiAJCUE4QTQ3NDhD
MTUxQTgyNjQwMDQxMjNGRiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhCMTUxQTgyNjQwMDQxMjNGRiAvKiBjb25maWcuaCAq
LzsgfTsKKwkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDdDNDM0QTFERDJBNEE3MDAy
Njg4OEIgLyogRXhwZWN0ZWQuaCAqLzsgfTsKIAkJQjM4RkQ3QkQxNjg5NTNFODAwNjVDOTY5IC8q
IEZlYXR1cmVEZWZpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMzhGRDdCQzE2ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCAqLzsg
fTsKIAkJQzRGOEE5MzcxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGOEE5MzYxOUM2NUVCNDAwQjJC
MTVEIC8qIFN0b3B3YXRjaC5oICovOyB9OwogCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEgLyog
SW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNldC5oICovOyB9OwpAQCAtNjk1LDYg
KzY5Niw3IEBACiAJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdURlRocmVhZERhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGVGhyZWFkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZU
aHJlYWREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3NDhCMTUxQTgy
NjQwMDQxMjNGRiAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEN0M0MzRBMUREMkE0QTcw
MDI2ODg4QiAvKiBFeHBlY3RlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eHBlY3RlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMzhGRDdCQzE2ODk1M0U4
MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmVhdHVyZURlZmluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzRG
OEE5MzYxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdG9wd2F0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q1NDk3QUExNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtODQ4LDYgKzg1MCw3IEBACiAJCUE4NzZEQkQ2MTUxODE2RTUwMERBREI5NSAv
KiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFE
N0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAogCQkJCTJDREVEMEYwMTgx
MTVDM0YwMDREQkE3MCAvKiBjZiAqLywKIAkJCQlFNEEwQUQzQjFBOTYyNTE5MDA1MzZERjYgLyog
Y29jb2EgKi8sCiAJCQkJQThBNDcyODExNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EgKi8sCkBAIC0x
NDU3LDYgKzE0NjAsNyBAQAogCQkJCUE4QTQ3NDNFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdD
b25jYXRlbmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0YxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCUFEN0M0MzRCMUREMkE0
QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTQxN0Ew
QkRBRTAwRkEwNENCIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDExNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDQyMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCBiL1NvdXJj
ZS9XVEYvd3RmL0NvbXBpbGVyLmgKaW5kZXggMjg4ZWI0YS4uYmZkZTcwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5o
CkBAIC03Miw3ICs3Miw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvLyBk
ZWZpbmVkKF9fY2xhbmdfXykKIAogLyogQ09NUElMRVIoR0NDX09SX0NMQU5HKSAtIEdOVSBDb21w
aWxlciBDb2xsZWN0aW9uIG9yIENsYW5nICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKQEAgLTE0
NCw2ICsxNDQsMjAgQEAKICNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX0VBQkkgMQogI2Vu
ZGlmCiAKKy8qIFJFTEFYRURfQ09OU1RFWFBSICovCisKKyNpZiBkZWZpbmVkKF9fY3BwX2NvbnN0
ZXhwcikgJiYgX19jcHBfY29uc3RleHByID49IDIwMTMwNAorI2RlZmluZSBXVEZfQ09NUElMRVJf
U1VQUE9SVFNfUkVMQVhFRF9DT05TVEVYUFIgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChSRUxB
WEVEX0NPTlNURVhQUikKKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhSRUxBWEVEX0NPTlNURVhQUikK
KyNkZWZpbmUgUkVMQVhFRF9DT05TVEVYUFIgY29uc3RleHByCisjZWxzZQorI2RlZmluZSBSRUxB
WEVEX0NPTlNURVhQUgorI2VuZGlmCisjZW5kaWYKKwogI2RlZmluZSBBU0FOX0VOQUJMRUQgQ09N
UElMRVJfSEFTX0NMQU5HX0ZFQVRVUkUoYWRkcmVzc19zYW5pdGl6ZXIpCiAKICNpZiBBU0FOX0VO
QUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmggYi9Tb3VyY2UvV1RG
L3d0Zi9FeHBlY3RlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOGJk
ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9FeHBlY3RlZC5oCkBAIC0wLDAg
KzEsNDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gV1RGOjpFeHBlY3RlZCBpcyBiYXNlZCBvbiBzdGQ6
OmV4cGVjdGVkLCBhcyBkZXNjcmliZWQgaGVyZTogaHR0cDovL3dnMjEubGluay9wMDMyM3IxCisv
LyBUaGUgc3BlY2lmaWNhdGlvbiBleHBlY3RzIHRvIHRocm93LiBUaGlzIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3Qgc3VwcG9ydCBleGNlcHRpb25zLCB1c2VzIFJFTEVBU0VfQVNTRVJUIGluc3RlYWQu
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxmdW5jdGlv
bmFsPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+
CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDxjbGFz
cyBFPgorY2xhc3MgVW5leHBlY3RlZFR5cGUgeworcHVibGljOgorICAgIFVuZXhwZWN0ZWRUeXBl
KCkgPSBkZWxldGU7CisgICAgY29uc3RleHByIGV4cGxpY2l0IFVuZXhwZWN0ZWRUeXBlKGNvbnN0
IEUmIGUpIDogdmFsKGUpIHsgfQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBVbmV4cGVjdGVkVHlw
ZShFJiYgZSkgOiB2YWwoV1RGTW92ZShlKSkgeyB9CisgICAgY29uc3RleHByIGNvbnN0IEUmIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CisgICAgUkVMQVhFRF9DT05TVEVYUFIgRSYgdmFs
dWUoKSB7IHJldHVybiB2YWw7IH0KKworcHJpdmF0ZToKKyAgICBFIHZhbDsKK307CisKK3RlbXBs
YXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVuZXhwZWN0ZWRU
eXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52
YWx1ZSgpID09IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVj
dGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSAhPSByaHMudmFsdWUoKTsgfQor
dGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBVbmV4cGVj
dGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBs
aHMudmFsdWUoKSA8IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpID4gcmhzLnZhbHVlKCk7IH0K
K3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJu
IGxocy52YWx1ZSgpIDw9IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBV
bmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSA+PSByaHMudmFsdWUo
KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIFVuZXhwZWN0ZWRUeXBlPHN0ZDo6
ZGVjYXlfdDxFPj4gbWFrZVVuZXhwZWN0ZWQoRSYmIHYpIHsgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RT46OnR5cGU+KHN0ZDo6Zm9yd2FyZDxFPih2KSk7IH0KKwor
c3RydWN0IFVuZXhwZWN0VGFnIHsKKyAgICBVbmV4cGVjdFRhZygpID0gZGVsZXRlOworfTsKK2Nv
bnN0ZXhwciBVbmV4cGVjdFRhZyBVbmV4cGVjdCB7IH07CisKK25hbWVzcGFjZSBFeHBlY3RlZERl
dGFpbCB7CisKKy8vIEludm9rZWQgd2hlcmUgc3RkOjpFeHBlY3RlZCB3b3VsZCBpbnN0ZWFkIHRo
cm93LgorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIFRocm93KCkgeyBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisKK3N0YXRpYyBjb25zdGV4cHIgZW51bSBjbGFzcyBWYWx1ZVRh
Z1R5cGUgeyB9IFZhbHVlVGFnIHsgfTsKK3N0YXRpYyBjb25zdGV4cHIgZW51bSBjbGFzcyBFcnJv
clRhZ1R5cGUgeyB9IEVycm9yVGFnIHsgfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+
Cit1bmlvbiBDb25zdGV4cHJTdG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAg
IHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5cGUgdmFs
OworICAgIEVycm9yVHlwZSBlcnI7CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoKSA6
IGR1bW15KCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoVmFsdWVUYWdUeXBl
KSA6IHZhbCgpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJTdG9yYWdlKEVycm9yVGFnVHlw
ZSkgOiBlcnIoKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShWYWx1ZVRhZ1R5
cGUsIGNvbnN0IFZhbHVlVHlwZSYgdikgOiB2YWwodikgeyB9CisgICAgY29uc3RleHByIENvbnN0
ZXhwclN0b3JhZ2UoRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGUpIDogZXJyKGUpIHsg
fQorICAgIH5Db25zdGV4cHJTdG9yYWdlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIEU+Cit1bmlvbiBTdG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5
cGUgdmFsOworICAgIEVycm9yVHlwZSBlcnI7CisgICAgY29uc3RleHByIFN0b3JhZ2UoKSA6IGR1
bW15KCkgeyB9CisgICAgY29uc3RleHByIFN0b3JhZ2UoVmFsdWVUYWdUeXBlKSA6IHZhbCgpIHsg
fQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAgICBj
b25zdGV4cHIgU3RvcmFnZShWYWx1ZVRhZ1R5cGUsIGNvbnN0IFZhbHVlVHlwZSYgdmFsKSA6IHZh
bCh2YWwpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSwgY29uc3QgRXJy
b3JUeXBlJiBlcnIpIDogZXJyKGVycikgeyB9CisgICAgflN0b3JhZ2UoKSB7IH0KK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBFPgordW5pb24gQ29uc3RleHByU3RvcmFnZTx2b2lkLCBFPiB7CisgICAg
dHlwZWRlZiB2b2lkIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNo
YXIgZHVtbXk7CisgICAgRXJyb3JUeXBlIGVycjsKKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3Rv
cmFnZSgpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShWYWx1
ZVRhZ1R5cGUpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShF
cnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2Uo
RXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGUpIDogZXJyKGUpIHsgfQorICAgIH5Db25z
dGV4cHJTdG9yYWdlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+Cit1bmlv
biBTdG9yYWdlPHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5
cGVkZWYgRSBFcnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBFcnJvclR5cGUgZXJyOwor
ICAgIGNvbnN0ZXhwciBTdG9yYWdlKCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9y
YWdlKFZhbHVlVGFnVHlwZSkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVy
cm9yVGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5
cGUsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IGVycihlcnIpIHsgfQorICAgIH5TdG9yYWdlKCkg
eyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3N0cnVjdCBDb25zdGV4cHJC
YXNlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7
CisgICAgQ29uc3RleHByU3RvcmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29s
IGhhczsKKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9
CisgICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyks
IGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRhZ1R5cGUg
dGFnKSA6IHModGFnKSwgaGFzKGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFz
ZShWYWx1ZVRhZ1R5cGUgdGFnLCBjb25zdCBWYWx1ZVR5cGUmIHZhbCkgOiBzKHRhZywgdmFsKSwg
aGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKEVycm9yVGFnVHlwZSB0
YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFsc2UpIHsgfQor
ICAgIH5Db25zdGV4cHJCYXNlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEU+CitzdHJ1Y3QgQmFzZSB7CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0
eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIFN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7
CisgICAgYm9vbCBoYXM7CisgICAgY29uc3RleHByIEJhc2UoKSA6IHMoKSwgaGFzKHRydWUpIHsg
fQorICAgIGNvbnN0ZXhwciBCYXNlKFZhbHVlVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXModHJ1
ZSkgeyB9CisgICAgY29uc3RleHByIEJhc2UoRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhh
cyhmYWxzZSkgeyB9CisgICAgY29uc3RleHByIEJhc2UoVmFsdWVUYWdUeXBlIHRhZywgY29uc3Qg
VmFsdWVUeXBlJiB2YWwpIDogcyh0YWcsIHZhbCksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4
cHIgQmFzZShFcnJvclRhZ1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywg
ZXJyKSwgaGFzKGZhbHNlKSB7IH0KKyAgICBCYXNlKGNvbnN0IEJhc2UmIG8pCisgICAgICAgIDog
aGFzKG8uaGFzKQorICAgIHsKKyAgICAgICAgaWYgKGhhcykKKyAgICAgICAgICAgIDo6bmV3ICgm
cy52YWwpIFZhbHVlVHlwZShvLnMudmFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgOjpu
ZXcgKCZzLmVycikgRXJyb3JUeXBlKG8ucy5lcnIpOworICAgIH0KKyAgICBCYXNlKEJhc2UmJiBv
KQorICAgICAgICA6IGhhcyhvLmhhcykKKyAgICB7CisgICAgICAgIGlmIChoYXMpCisgICAgICAg
ICAgICA6Om5ldyAoJnMudmFsKSBWYWx1ZVR5cGUoV1RGTW92ZShvLnMudmFsKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlwZShXVEZNb3ZlKG8ucy5l
cnIpKTsKKyAgICB9CisgICAgfkJhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKGhhcykKKyAgICAg
ICAgICAgIHMudmFsLlZhbHVlVHlwZTo6flZhbHVlVHlwZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzLmVyci5FcnJvclR5cGU6On5FcnJvclR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRT4KK3N0cnVjdCBDb25zdGV4cHJCYXNlPHZvaWQsIEU+IHsKKyAgICB0eXBl
ZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgQ29uc3Rl
eHByU3RvcmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhhczsKKyAgICBj
b25zdGV4cHIgQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3Rl
eHByIENvbnN0ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyh0cnVlKSB7
IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFn
KSwgaGFzKGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRhZ1R5
cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZhbHNlKSB7
IH0KKyAgICB+Q29uc3RleHByQmFzZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlIDxjbGFz
cyBFPgorc3RydWN0IEJhc2U8dm9pZCwgRT4geworICAgIHR5cGVkZWYgdm9pZCBWYWx1ZVR5cGU7
CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBTdG9yYWdlPFZhbHVlVHlwZSwgRXJyb3JU
eXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBCYXNlKCkgOiBzKCksIGhhcyh0
cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQmFzZShWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFnKSwg
aGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcpIDogcyh0
YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcs
IGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFsc2UpIHsgfQorICAg
IEJhc2UoY29uc3QgQmFzZSYgbykKKyAgICAgICAgOiBoYXMoby5oYXMpCisgICAgeworICAgICAg
ICBpZiAoIWhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlwZShvLnMuZXJy
KTsKKyAgICB9CisgICAgQmFzZShCYXNlJiYgbykKKyAgICAgICAgOiBoYXMoby5oYXMpCisgICAg
eworICAgICAgICBpZiAoIWhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlw
ZShXVEZNb3ZlKG8ucy5lcnIpKTsKKyAgICB9CisgICAgfkJhc2UoKQorICAgIHsKKyAgICAgICAg
aWYgKCFoYXMpCisgICAgICAgICAgICBzLmVyci5FcnJvclR5cGU6On5FcnJvclR5cGUoKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3VzaW5nIEJhc2VTZWxlY3Qg
PSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAorICAgICgoc3RkOjppc192b2lkPFQ+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlKQorICAgICAgICAm
JiBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RT46OnZhbHVlKSwKKyAgICBDb25zdGV4
cHJCYXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlLCB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9jb25zdDxFPjo6dHlwZT4sCisgICAgQmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
b25zdDxUPjo6dHlwZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8RT46OnR5cGU+Cis+Ojp0
eXBlOworCit9IC8vIG5hbWVzcGFjZSBFeHBlY3RlZERldGFpbAorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRT4KK2NsYXNzIEV4cGVjdGVkIDogcHJpdmF0ZSBFeHBlY3RlZERldGFpbDo6QmFz
ZVNlbGVjdDxULCBFPiB7CisgICAgdHlwZWRlZiBFeHBlY3RlZERldGFpbDo6QmFzZVNlbGVjdDxU
LCBFPiBiYXNlOworCitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpWYWx1ZVR5
cGUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6RXJyb3JUeXBlIEVycm9y
VHlwZTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JU
eXBlPiB0eXBlOworCitwdWJsaWM6CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBy
ZWJpbmQgeyB1c2luZyB0eXBlID0gRXhwZWN0ZWQ8VSwgRXJyb3JUeXBlPjsgfTsKKworICAgIGNv
bnN0ZXhwciBFeHBlY3RlZCgpIDogYmFzZShFeHBlY3RlZERldGFpbDo6VmFsdWVUYWcpIHsgfQor
ICAgIEV4cGVjdGVkKGNvbnN0IEV4cGVjdGVkJikgPSBkZWZhdWx0OworICAgIEV4cGVjdGVkKEV4
cGVjdGVkJiYpID0gZGVmYXVsdDsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoY29uc3QgVmFsdWVU
eXBlJiBlKSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OlZhbHVlVGFnLCBlKSB7IH0KKyAgICBjb25z
dGV4cHIgRXhwZWN0ZWQoVmFsdWVUeXBlJiYgZSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpWYWx1
ZVRhZywgV1RGTW92ZShlKSkgeyB9CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+IGNv
bnN0ZXhwciBleHBsaWNpdCBFeHBlY3RlZChpbl9wbGFjZV90LCBBcmdzJiYuLi4pOworICAgIC8v
IHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhw
ZWN0ZWQoaW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOwor
ICAgIGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IGNvbnN0JiB1
KSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorICAgIHRl
bXBsYXRlIDxjbGFzcyBFcnI+IGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnI+
IGNvbnN0JiB1KSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsg
fQorICAgIC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhw
ZWN0ZWQoVW5leHBlY3RUYWcsIEFyZ3MmJi4uLik7CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGNvbnN0ZXhwciBleHBsaWNpdCBFeHBlY3RlZChVbmV4cGVjdFRhZywg
c3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisgICAgfkV4cGVjdGVkKCkg
PSBkZWZhdWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBFeHBlY3RlZCYgZSkg
eyB0eXBlKGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBlY3RlZCYgb3Bl
cmF0b3I9KEV4cGVjdGVkJiYgZSkgeyB0eXBlKFdURk1vdmUoZSkpLnN3YXAoKnRoaXMpOyByZXR1
cm4gKnRoaXM7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gRXhwZWN0ZWQmIG9wZXJhdG9yPShV
JiYgdSkgeyB0eXBlKFdURk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAg
ICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4mIHUp
IHsgdHlwZSh1KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgRXhwZWN0ZWQmIG9w
ZXJhdG9yPShVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+JiYgdSkgeyB0eXBlKFdURk1vdmUodSkp
LnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MuLi4g
QXJncz4gdm9pZCBlbXBsYWNlKEFyZ3MmJi4uLik7CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IHZvaWQgZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4sIEFy
Z3MmJi4uLik7CisKKyAgICB2b2lkIHN3YXAoRXhwZWN0ZWQmIG8pCisgICAgeworICAgICAgICB1
c2luZyBzdGQ6OnN3YXA7CisgICAgICAgIGlmIChiYXNlOjpoYXMgJiYgby5oYXMpCisgICAgICAg
ICAgICBzd2FwKGJhc2U6OnMudmFsLCBvLnMudmFsKTsKKyAgICAgICAgZWxzZSBpZiAoYmFzZTo6
aGFzICYmICFvLmhhcykgeworICAgICAgICAgICAgRXJyb3JUeXBlIGUoV1RGTW92ZShvLnMuZXJy
KSk7CisgICAgICAgICAgICA6Om5ldyAoJm8ucy52YWwpIFZhbHVlVHlwZShXVEZNb3ZlKGJhc2U6
OnMudmFsKSk7CisgICAgICAgICAgICA6Om5ldyAoJmJhc2U6OnMuZXJyKSBFcnJvclR5cGUoZSk7
CisgICAgICAgICAgICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9IGVsc2UgaWYg
KCFiYXNlOjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSB2KFdURk1vdmUo
by5zLnZhbCkpOworICAgICAgICAgICAgOjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoV1RGTW92
ZShiYXNlOjpzLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNlOjpzLnZhbCkgVmFsdWVU
eXBlKHYpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzd2FwKGJhc2U6OnMuZXJyLCBvLnMuZXJyKTsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JmJhc2U6OnMudmFsOyB9CisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJmJh
c2U6OnMudmFsOyB9CisgICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkg
Y29uc3QgJiB7IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIFZhbHVlVHlwZSYgb3BlcmF0b3Iq
KCkgJiB7IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBWYWx1ZVR5
cGUmJiBvcGVyYXRvciooKSBjb25zdCAmJiB7IHJldHVybiBXVEZNb3ZlKGJhc2U6OnMudmFsKTsg
fQorICAgIFJFTEFYRURfQ09OU1RFWFBSIFZhbHVlVHlwZSYmIG9wZXJhdG9yKigpICYmIHsgcmV0
dXJuIFdURk1vdmUoYmFzZTo6cy52YWwpOyB9CisgICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICBjb25zdGV4cHIgYm9v
bCBoYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6OmhhczsgfQorICAgIGNvbnN0ZXhwciBj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKCkgY29uc3QgJiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNl
OjpzLnZhbCA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy52YWwpOyB9CisgICAg
UkVMQVhFRF9DT05TVEVYUFIgVmFsdWVUeXBlJiB2YWx1ZSgpICYgeyByZXR1cm4gYmFzZTo6aGFz
ID8gYmFzZTo6cy52YWwgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMudmFsKTsg
fQorICAgIGNvbnN0ZXhwciBjb25zdCBWYWx1ZVR5cGUmJiB2YWx1ZSgpIGNvbnN0ICYmIHsgcmV0
dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBi
YXNlOjpzLnZhbCk7IH0KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBWYWx1ZVR5cGUmJiB2YWx1ZSgp
ICYmIHsgcmV0dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkRGV0YWlsOjpU
aHJvdygpLCBiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRXJyb3JUeXBlJiBl
cnJvcigpIGNvbnN0ICYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVj
dGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBFcnJvclR5cGUmIGVycm9y
KCkgJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6
OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIFJFTEFYRURfQ09OU1RFWFBSIEVycm9yVHlw
ZSYmIGVycm9yKCkgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVj
dGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBjb25zdGV4cHIgY29uc3Qg
RXJyb3JUeXBlJiYgZXJyb3IoKSBjb25zdCAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6
cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNv
bnN0ZXhwciBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+KGJhc2U6OnMuZXJyKTsgfQorICAgIHRl
bXBsYXRlIDxjbGFzcyBVPiBjb25zdGV4cHIgVmFsdWVUeXBlIHZhbHVlT3IoVSYmIHUpIGNvbnN0
ICYgeyByZXR1cm4gYmFzZTo6aGFzID8gKip0aGlzIDogc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihz
dGQ6OmZvcndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFZhbHVlVHlwZSB2
YWx1ZU9yKFUmJiB1KSAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBXVEZNb3ZlKCoqdGhpcykgOiBz
dGF0aWNfY2FzdDxWYWx1ZVR5cGU+KHN0ZDo6Zm9yd2FyZDxVPih1KSk7IH0KK307CisKK3RlbXBs
YXRlIDxjbGFzcyBFPgorY2xhc3MgRXhwZWN0ZWQ8dm9pZCwgRT4gOiBwcml2YXRlIEV4cGVjdGVk
RGV0YWlsOjpCYXNlU2VsZWN0PHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIEV4cGVjdGVkRGV0YWls
OjpCYXNlU2VsZWN0PHZvaWQsIEU+IGJhc2U7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIGJhc2U6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNl
OjpFcnJvclR5cGUgRXJyb3JUeXBlOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgRXhwZWN0ZWQ8
VmFsdWVUeXBlLCBFcnJvclR5cGU+IHR5cGU7CisKK3B1YmxpYzoKKyAgICAvLyB0ZW1wbGF0ZSA8
Y2xhc3MgVT4gc3RydWN0IHJlYmluZCB7IHR5cGVkZWYgRXhwZWN0ZWQ8VSwgRXJyb3JUeXBlPiB0
eXBlOyB9OworCisgICAgY29uc3RleHByIEV4cGVjdGVkKCkgOiBiYXNlKEV4cGVjdGVkRGV0YWls
OjpWYWx1ZVRhZykgeyB9CisgICAgRXhwZWN0ZWQoY29uc3QgRXhwZWN0ZWQmKSA9IGRlZmF1bHQ7
CisgICAgRXhwZWN0ZWQoRXhwZWN0ZWQmJikgPSBkZWZhdWx0OworICAgIC8vIGNvbnN0ZXhwciBl
eHBsaWNpdCBFeHBlY3RlZChpbl9wbGFjZV90KTsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVW5l
eHBlY3RlZFR5cGU8RT4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZERldGFpbDo6RXJyb3JUYWcs
IHUudmFsdWUoKSkgeyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEVycj4gY29uc3RleHByIEV4cGVj
dGVkKFVuZXhwZWN0ZWRUeXBlPEVycj4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZERldGFpbDo6
RXJyb3JUYWcsIHUudmFsdWUoKSkgeyB9CisKKyAgICB+RXhwZWN0ZWQoKSA9IGRlZmF1bHQ7CisK
KyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IEV4cGVjdGVkJiBlKSB7IHR5cGUoZSkuc3dh
cCgqdGhpcyk7IHJldHVybiAqdGhpczsgfQorICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oRXhwZWN0
ZWQmJiBlKSB7IHR5cGUoV1RGTW92ZShlKSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfQor
ICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHUpIHsgdHlw
ZSh1KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9IC8vIE5vdCBpbiB0aGUgY3VycmVudCBw
YXBlci4KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KFVuZXhwZWN0ZWRUeXBlPEU+JiYgdSkgeyB0
eXBlKFdURk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0gLy8gTm90IGluIHRo
ZSBjdXJyZW50IHBhcGVyLgorICAgIC8vIHZvaWQgZW1wbGFjZSgpOworCisgICAgdm9pZCBzd2Fw
KEV4cGVjdGVkJiBvKQorICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgICBp
ZiAoYmFzZTo6aGFzICYmIG8uaGFzKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAg
ICAgICB9IGVsc2UgaWYgKGJhc2U6OmhhcyAmJiAhby5oYXMpIHsKKyAgICAgICAgICAgIEVycm9y
VHlwZSBlKFdURk1vdmUoby5zLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNlOjpzLmVy
cikgRXJyb3JUeXBlKGUpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghYmFzZTo6aGFzICYmIG8uaGFzKSB7CisgICAgICAgICAgICA6Om5l
dyAoJm8ucy5lcnIpIEVycm9yVHlwZShXVEZNb3ZlKGJhc2U6OnMuZXJyKSk7CisgICAgICAgICAg
ICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN3
YXAoYmFzZTo6cy5lcnIsIG8ucy5lcnIpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gYmFzZTo6aGFzOyB9CisgICAgY29uc3Rl
eHByIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICB2b2lk
IHZhbHVlKCkgY29uc3QgeyAhYmFzZTo6aGFzID8gRXhwZWN0ZWREZXRhaWw6OlRocm93KCkgOiB2
b2lkKCk7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRSYgZXJyb3IoKSBjb25zdCAmIHsgcmV0dXJu
ICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFz
ZTo6cy5lcnIpOyB9CisgICAgRSYgZXJyb3IoKSAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNl
OjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9IC8vIE5v
dCBpbiB0aGUgY3VycmVudCBwYXBlci4KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBFJiYgZXJyb3Io
KSAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6
OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBFJiYgZXJyb3Io
KSBjb25zdCAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWRE
ZXRhaWw6OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFw
ZXIuCisgICAgLy8gY29uc3RleHByIEUmIGVycm9yKCkgJjsKKyAgICBjb25zdGV4cHIgVW5leHBl
Y3RlZFR5cGU8RT4gZ2V0VW5leHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PEU+KGJhc2U6OnMuZXJyKTsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4
cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBib29sKHgpID09IGJvb2woeSkgJiYgKHggPyB4LnZh
bHVlKCkgPT0geS52YWx1ZSgpIDogeC5lcnJvcigpID09IHkuZXJyb3IoKSk7IH0KK3RlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gISh4ID09IHkp
OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1
cm4gKCFib29sKHgpICYmIGJvb2woeSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYgIWJvb2woeSkp
ID8gdHJ1ZSA6ICgoYm9vbCh4KSAmJiBib29sKHkpKSA/IHgudmFsdWUoKSA8IHkudmFsdWUoKSA6
IHguZXJyb3IoKSA8IHkuZXJyb3IoKSkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBF
eHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gISh4ID09IHkpICYmICEoeCA8IHkpOyB9Cit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBF
eHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICh4ID09
IHkpIHx8ICh4IDwgeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxU
LCBFPiYgeSkgeyByZXR1cm4gKHggPT0geSkgfHwgKHggPiB5KTsgfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYg
eCwgY29uc3QgRXhwZWN0ZWQ8dm9pZCwgRT4mIHkpIHsgcmV0dXJuIGJvb2woeCkgPT0gYm9vbCh5
KSAmJiAoeCA/IHRydWUgOiB4LmVycm9yKCkgPT0geS5lcnJvcigpKTsgfSAvLyBOb3QgaW4gdGhl
IGN1cnJlbnQgcGFwZXIuCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYg
eSkgeyByZXR1cm4gKCFib29sKHgpICYmIGJvb2woeSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYg
IWJvb2woeSkpID8gdHJ1ZSA6ICgoYm9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogeC5lcnJv
cigpIDwgeS5lcnJvcigpKSk7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgorCit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBF
eHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA9PSBFeHBlY3RlZDxULCBF
Pih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgVCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVj
dGVkPFQsIEU+KHgpID09IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7
IHJldHVybiB4ICE9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgIT0geTsgfQordGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA8IEV4cGVjdGVkPFQsIEU+KHkpOyB9
Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBF
Pih4KSA8IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4
IDw9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYg
eSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPD0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYg
eCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA+IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHgs
IGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+IHk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ID49IEV4cGVj
dGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1
cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPj0geTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPT0gRXhwZWN0ZWQ8VCwgRT4oeSk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNv
bnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ICE9IEV4cGVjdGVkPFQsIEU+KHkp
OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsg
cmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpICE9IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNv
bnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4IDwgRXhwZWN0ZWQ8VCwgRT4oeSk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7ICBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPCB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPD0gRXhwZWN0ZWQ8VCwgRT4oeSk7
IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPD0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVW5leHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPiBFeHBlY3RlZDxULCBFPih5KTsg
fQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0
dXJuIEV4cGVjdGVkPFQsIEU+KHgpID4geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0
IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID49IEV4cGVjdGVkPFQsIEU+KHkpOyB9
Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0
dXJuIEV4cGVjdGVkPFQsIEU+KHgpID49IHk7IH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEU+IHZvaWQgc3dhcChFeHBlY3RlZDxULCBFPiYgeCwgRXhwZWN0ZWQ8VCwgRT4mIHkp
IHsgeC5zd2FwKHkpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFID0gV1RGOjpOdWxs
b3B0VGFnPiBjb25zdGV4cHIgRXhwZWN0ZWQ8c3RkOjpkZWNheV90PFQ+LCBFPiBtYWtlRXhwZWN0
ZWQoVCYmIHYpCit7CisgICAgcmV0dXJuIEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46
OnR5cGUsIEU+KHN0ZDo6Zm9yd2FyZDxUPih2KSk7Cit9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgRT4gY29uc3RleHByIEV4cGVjdGVkPFQsIHN0ZDo6ZGVjYXlfdDxFPj4gbWFrZUV4cGVjdGVk
RnJvbUVycm9yKEUmJiBlKSB7IHJldHVybiBFeHBlY3RlZDxULCBzdGQ6OmRlY2F5X3Q8RT4+KG1h
a2VVbmV4cGVjdGVkKGUpKTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEUsIGNsYXNzIFU+
IGNvbnN0ZXhwciBFeHBlY3RlZDxULCBFPiBtYWtlRXhwZWN0ZWRGcm9tRXJyb3IoVSYmIHUpIHsg
cmV0dXJuIEV4cGVjdGVkPFQsIEU+KG1ha2VVbmV4cGVjdGVkKEUgeyBzdGQ6OmZvcndhcmQ8VT4o
dSkgfSApKTsgfQorLy8gdGVtcGxhdGUgPGNsYXNzIEYsIGNsYXNzIEUgPSBXVEY6Ok51bGxvcHRU
YWc+IGNvbnN0ZXhwciBFeHBlY3RlZDx0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxGPjo6dHlwZSwg
RT4gbWFrZUV4cGVjdGVkX2Zyb21fY2FsbChGIGYpOworCitFeHBlY3RlZDx2b2lkLCBXVEY6Ok51
bGxvcHRUYWc+IG1ha2VFeHBlY3RlZCgpIHsgcmV0dXJuIEV4cGVjdGVkPHZvaWQsIFdURjo6TnVs
bG9wdFRhZz4oKTsgfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIHN0ZCB7CisK
K3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBzdHJ1Y3QgaGFzaDxXVEY6OkV4cGVjdGVkPFQs
IEU+PiB7CisgICAgdHlwZWRlZiBXVEY6OkV4cGVjdGVkPFQsIEU+IGFyZ3VtZW50X3R5cGU7Cisg
ICAgdHlwZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKKyAgICByZXN1bHRfdHlwZSBvcGVy
YXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGUpIGNvbnN0IHsgcmV0dXJuIGUgPyBoYXNoPHR5
cGVuYW1lIGFyZ3VtZW50X3R5cGU6OlZhbHVlVHlwZT4geyB9IChlLnZhbHVlKCkpIDogaGFzaDx0
eXBlbmFtZSBhcmd1bWVudF90eXBlOjpFcnJvclR5cGU+IHsgfSAoZS5lcnJvcigpKTsgfQorfTsK
KwordGVtcGxhdGUgPGNsYXNzIEU+IHN0cnVjdCBoYXNoPFdURjo6RXhwZWN0ZWQ8dm9pZCwgRT4+
IHsKKyAgICB0eXBlZGVmIFdURjo6RXhwZWN0ZWQ8dm9pZCwgRT4gYXJndW1lbnRfdHlwZTsKKyAg
ICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHJlc3VsdF90eXBlOworICAgIHJlc3VsdF90eXBlIG9wZXJh
dG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYgZSkgY29uc3QgeyByZXR1cm4gZSA/IDAgOiBoYXNo
PHR5cGVuYW1lIGFyZ3VtZW50X3R5cGU6OkVycm9yVHlwZT4geyB9IChlLmVycm9yKCkpOyB9Cit9
OworCit9CisKK3VzaW5nIFdURjo6VW5leHBlY3RlZFR5cGU7Cit1c2luZyBXVEY6Om1ha2VVbmV4
cGVjdGVkOwordXNpbmcgV1RGOjpVbmV4cGVjdDsKK3VzaW5nIFdURjo6RXhwZWN0ZWQ7Cit1c2lu
ZyBXVEY6Om1ha2VFeHBlY3RlZDsKK3VzaW5nIFdURjo6bWFrZUV4cGVjdGVkRnJvbUVycm9yOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ1NWM4
ZDAuLjRiNmEzYjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxNi0xMS0xMCAgSkYgQmFzdGllbiAgPGpmYmFzdGll
bkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0ZWQKKworICAgICAg
ICBzdGQ6OmV4cGVjdGVkIGlzbid0IGluIEMrKzE3LCBhbmQgbWF5IGJlIGluIEMrKzIwLiBJdCdz
IGEgbmljZQorICAgICAgICBjb21wbGVtZW50IHRvIHN0ZDo6YW55IC8gc3RkOjpvcHRpb25hbCBi
ZWNhdXNlIGl0J3MgYSB0eXBlLXRhZ2dlZAorICAgICAgICB1bmlvbiB3aGljaCBoYXMgYSBzaW5n
bGUgZXhwZWN0ZWQgcmVzdWx0IGJ1dCBjb3VsZCBhbHNvIGNvbnRhaW4gYW4KKyAgICAgICAgZXJy
b3IuCisKKyAgICAgICAgVGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBh
cnNlciwgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgVXNpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiB3
aWxsIGFsbG93IHVzIHRvIHByb3ZpZGUgZmVlZGJhY2sgdG8gdGhlCisgICAgICAgIHN0YW5kYXJk
cyBjb21taXR0ZWUgYW5kIGd1aWRlIHN0ZDo6ZXhwZWN0ZWQncyBkZXNpZ24gYmVmb3JlIGl0Cisg
ICAgICAgIGdldHMgc3RhbmRhcmRpemVkLiBJJ3ZlIGFscmVhZHkgc2VudCBhIGJ1bmNoIG9mIGZl
ZWRiYWNrIHRvIHRoZQorICAgICAgICBhdXRob3IgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSBpbXBs
ZW1lbnRpbmcgdGhpcy4KKworICAgICAgICBUaGlzIGNvdWxkIHN1cHBsZW1lbnQgV1RGOjpFaXRo
ZXIgYW5kIFdURjo6RXhjZXB0aW9uT3IuCisKKyAgICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUy
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6Zm9vOjpmb28pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Zm9vOjp+Zm9vKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmZvbzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpvcGVyYXRvcjw8KToKKwogMjAxNi0xMS0xMCAgTWlndWVsIEdvbWV6ICA8bWFnb21l
ekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZGVkIG15c2VsZiB0byB0aGUg
bGlzdCBvZiBjb21taXR0ZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggZmI2
MjJjNS4uODk3YjBlZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC01MCw2ICs1
MCw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvRGF0ZU1hdGguY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Rl
cXVlLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9FbnVtVHJhaXRzLmNw
cAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvSGFzaENvdW50ZWRTZXQuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hNYXAuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hTZXQuY3BwCkBAIC02MSw2ICs2Miw3IEBAIHNldChUZXN0
V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTWVkaWFUaW1l
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9OYWtlZFB0ci5jcHAKKyAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL09wdGlvblNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYjI1
MWJhLi43MjE1ZTI3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDQ5LDYgKzQ0OSw3IEBA
CiAJCUFENTdBQzIwMURBNzQ2NTAwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNo
eUluUGFnZUNhY2hlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDU3QUMxRTFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVG
cm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwICovOyB9OwogCQlBRDU3QUMyMTFEQTc0
NjVCMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDU3QUMxRjFE
QTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5j
cHAgKi87IH07CiAJCUFENTdBQzIyMURBNzQ2NkUwMEZGMUJERSAvKiBtYW55LWlmcmFtZXMuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDU3QUMxRDFEQTc0NjM4MDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwgKi87IH07CisJCUFE
N0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDdDNDM0QzFERDJBNTQ3MDAyNjg4OEIgLyog
RXhwZWN0ZWQuY3BwICovOyB9OwogCQlBRENFQkJBNjFEOUFFMjI5MDAyRTI4M0EgLyogQ29uc3Vt
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRENF
QkJBNTFEOTlENENGMDAyRTI4M0EgLyogQ29uc3VtZS5jcHAgKi87IH07CiAJCUI1NUFEMUQ1MTc5
RjNCMzAwMEFDMTQ5NCAvKiBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZ19CdW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1QUQx
RDMxNzlGM0FCRjAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nX0J1
bmRsZS5jcHAgKi87IH07CiAJCUI1NUYxMUI3MTUxN0QwMzMwMDkxNTkxNiAvKiBhdHRyaWJ1dGVk
U3RyaW5nQ3VzdG9tRm9udC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUYxMUIwMTUxN0EyQzQwMDkxNTkxNiAvKiBhdHRyaWJ1dGVk
U3RyaW5nQ3VzdG9tRm9udC5odG1sICovOyB9OwpAQCAtMTEwMiw2ICsxMTAzLDcgQEAKIAkJQUQ1
N0FDMUQxREE3NDYzODAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gIm1hbnktaWZyYW1lcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ1N0FDMUUxREE3NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhp
ZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1N0FDMUYxREE3NDY0RDAwRkYxQkRF
IC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBh
Z2VDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEN0M0MzRDMUREMkE1
NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeHBlY3RlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQ0VC
QkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbnN1bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCNDAzOUY5QzE1RTZEOEIzMDA3MjU1RDYgLyogTWF0aEV4dHJhcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXRoRXh0cmFzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjU1QUQxRDExNzlGMzM2NjAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxv
YWRXaXRoQXV0b1Jlc2l6aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUHJldmVudEltYWdl
TG9hZFdpdGhBdXRvUmVzaXppbmcubW07IHBhdGggPSBXZWJLaXQyT2JqQy9QcmV2ZW50SW1hZ2VM
b2FkV2l0aEF1dG9SZXNpemluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3
ODcsNiArMTc4OSw3IEBACiAJCUJDOTA5NjQ2MTI1NTYxODkwMDA4Mzc1NiAvKiBXVEYgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEN0M0MzRDMUREMkE1
NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi8sCiAJCQkJQzA5OTFDNEYxNDNDN0Q2ODAwNzk5
OEYyIC8qIGNmICovLAogCQkJCTdDQkJBMDc1MTlCQjhBMDkwMEJCRjAyNSAvKiBkYXJ3aW4gKi8s
CiAJCQkJQkMwMjlCMUExNDg2QjIzODAwODE3REE5IC8qIG5zICovLApAQCAtMjMxNyw2ICsyMzIw
LDcgQEAKIAkJCQk3QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUFEQ0VCQkE2MUQ5QUUyMjkwMDJFMjgzQSAvKiBDb25zdW1lLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3Rl
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NP
YmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGNTkxRDBBNTkwQzAwRkVCQ0Yz
IC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTMxRDBBNTkwQzAw
RkVCQ0YzIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xNTZjMzZmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRXhwZWN0ZWQuY3BwCkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJl
ZF9tYXA+CisKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlIDxjbGFzcyBFPiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt
JiBvcywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHUpCit7CisgICAgcmV0dXJuIG9zIDw8IHUu
dmFsdWUoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IHN0ZDo6b3N0cmVhbSYg
b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBFeHBlY3RlZDxULCBFPiYgZSkKK3sK
KyAgICBpZiAoZS5oYXNWYWx1ZSgpKQorICAgICAgICByZXR1cm4gb3MgPDwgZS52YWx1ZSgpOwor
ICAgIHJldHVybiBvcyA8PCBlLmVycm9yKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBFPiBzdGQ6
Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgRXhwZWN0ZWQ8dm9p
ZCwgRT4mIGUpCit7CisgICAgaWYgKGUuaGFzVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG9zIDw8
ICIiOworICAgIHJldHVybiBvcyA8PCBlLmVycm9yKCk7Cit9CisKK30KKworbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgeworCitjb25zdGV4cHIgY29uc3QgY2hhciogb29wcyA9ICJvb3BzIjsKK2Nv
bnN0ZXhwciBjb25zdCBjaGFyKiBmb29mID0gImZvb2YiOworCitURVNUKFdURl9FeHBlY3RlZCwg
VW5leHBlY3RlZFR5cGUpCit7CisgICAgeworICAgICAgICBhdXRvIHUgPSBVbmV4cGVjdGVkVHlw
ZTxpbnQ+KDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKHUudmFsdWUoKSwgNDIpOworICAgICAgICBj
b25zdGV4cHIgYXV0byBjID0gbWFrZVVuZXhwZWN0ZWQoNDIpOworICAgICAgICBFWFBFQ1RfRVEo
Yy52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUSh1LCBjKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHUgIT0gYyk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1IDwgYyk7CisgICAgICAgIEVY
UEVDVF9GQUxTRSh1ID4gYyk7CisgICAgICAgIEVYUEVDVF9MRSh1LCBjKTsKKyAgICAgICAgRVhQ
RUNUX0dFKHUsIGMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYyA9IG1ha2VVbmV4cGVj
dGVkKG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZSgpLCBvb3BzKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBhdXRvIHMgPSBtYWtlVW5leHBlY3RlZChzdGQ6OnN0cmluZyhvb3BzKSk7
CisgICAgICAgIEVYUEVDVF9FUShzLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHMwID0gbWFrZVVuZXhwZWN0ZWQob29wcyk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIHMxKHMwKTsKKyAgICAgICAgRVhQRUNUX0VRKHMwLCBzMSk7CisgICAgfQor
fQorCitzdHJ1Y3QgZm9vIHsKKyAgICBpbnQgdjsKKyAgICBmb28oaW50IHYpCisgICAgICAgIDog
dih2KQorICAgIHsgfQorICAgIH5mb28oKSB7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Zm9vJiB5KSBjb25zdCB7IHJldHVybiB2ID09IHkudjsgfQorICAgIGZyaWVuZCBzdGQ6Om9zdHJl
YW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgY29uc3QgZm9vJik7Cit9Oworc3RkOjpvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGZvbyYgZikgeyByZXR1cm4g
b3MgPDwgZi52OyB9CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBleHBlY3RlZCkKK3sKKyAgICB0eXBl
ZGVmIEV4cGVjdGVkPGludCwgY29uc3QgY2hhcio+IEU7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxp
bnQsIGNvbnN0IHZvaWQqPiBFVjsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPGZvbywgY29uc3QgY2hh
cio+IEZvb0NoYXI7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxmb28sIHN0ZDo6c3RyaW5nPiBGb29T
dHJpbmc7CisgICAgeworICAgICAgICBhdXRvIGUgPSBFKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlKCksIDApOworICAgICAg
ICBFWFBFQ1RfRVEoZS52YWx1ZU9yKDMuMTQpLCAwKTsKKyAgICB9CisgICAgeworICAgICAgICBj
b25zdGV4cHIgRSBlOworICAgICAgICBFWFBFQ1RfVFJVRShlLmhhc1ZhbHVlKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoZS52YWx1ZSgpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigz
LjE0KSwgMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gRSg0Mik7CisgICAgICAg
IEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlKCks
IDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgNDIpOworICAgICAgICBj
b25zdCBhdXRvIGUyKGUpOworICAgICAgICBFWFBFQ1RfVFJVRShlMi5oYXNWYWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGUyLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGUyLnZh
bHVlT3IoMy4xNCksIDQyKTsKKyAgICAgICAgRSBlMzsKKyAgICAgICAgZTMgPSBlMjsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoZTMuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlMy52YWx1
ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShlMy52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAg
ICAgIGNvbnN0IEUgZTQgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTQuaGFzVmFsdWUoKSk7
CisgICAgICAgIEVYUEVDVF9FUShlNC52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShl
NC52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3RleHByIEUg
Yyg0Mik7CisgICAgICAgIEVYUEVDVF9UUlVFKGMuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVD
VF9FUShjLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGMudmFsdWVPcigzLjE0KSwg
NDIpOworICAgICAgICBjb25zdGV4cHIgY29uc3QgYXV0byBjMihjKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoYzIuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShjMi52YWx1ZSgpLCA0Mik7
CisgICAgICAgIEVYUEVDVF9FUShjMi52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byB1ID0gRShtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRSh1Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEodS5lcnJvcigpLCBvb3Bz
KTsKKyAgICAgICAgRVhQRUNUX0VRKHUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOwor
ICAgICAgICBFWFBFQ1RfRVEodS52YWx1ZU9yKDMuMTQpLCAzKTsKKyAgICB9CisgICAgeworICAg
ICAgICBhdXRvIHV2ID0gRVYobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UodXYuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1di5lcnJvcigpLCBvb3Bz
KTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsK
KyAgICAgICAgRVhQRUNUX0VRKHV2LnZhbHVlT3IoMy4xNCksIDMpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIEUgZSA9IG1ha2VVbmV4cGVjdGVkKG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
ZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAg
ICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAg
RVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0
byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPGludCwgY29uc3QgY2hhcio+KG9vcHMpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJy
b3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgp
LCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPGludCwgY29uc3Qg
dm9pZCo+KG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVu
ZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigz
LjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gRm9vQ2hhcig0Mik7Cisg
ICAgICAgIEVYUEVDVF9FUShlLT52LCA0Mik7CisgICAgICAgIEVYUEVDVF9FUSgoKmUpLnYsIDQy
KTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0gRSg0Mik7CisgICAgICAgIGF1dG8g
ZTEgPSBFKDEwMjQpOworICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVDVF9FUShl
MC52YWx1ZSgpLCAxMDI0KTsKKyAgICAgICAgRVhQRUNUX0VRKGUxLnZhbHVlKCksIDQyKTsKKyAg
ICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0gRShtYWtlVW5leHBlY3RlZChvb3BzKSk7Cisg
ICAgICAgIGF1dG8gZTEgPSBFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKTsKKyAgICAgICAgc3dhcChl
MCwgZTEpOworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJyb3IoKSwgZm9vZik7CisgICAgICAgIEVY
UEVDVF9FUShlMS5lcnJvcigpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBGb29DaGFy
IGMoZm9vKDQyKSk7CisgICAgICAgIEVYUEVDVF9FUShjLT52LCA0Mik7CisgICAgICAgIEVYUEVD
VF9FUSgoKmMpLnYsIDQyKTsKKyAgICB9CisgICAgeworICAgICAgICBGb29TdHJpbmcgcyhmb28o
NDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHMtPnYsIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKCgq
cykudiwgNDIpOworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gInZlcnkgbG9uZyBmYWls
dXJlIHN0cmluZywgZm9yIHZlcnkgYmFkIGZhaWx1cmUgY2FzZXMiOworICAgICAgICBGb29TdHJp
bmcgZTAobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAgRm9v
U3RyaW5nIGUxKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNzYWdlKSk7CisgICAgICAg
IEZvb1N0cmluZyBlMihtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4oc3RkOjpzdHJpbmcoKSkp
OworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJyb3IoKSwgc3RkOjpzdHJpbmcobWVzc2FnZSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX05FKGUwLCBlMik7Cisg
ICAgICAgIEZvb1N0cmluZyogZTQgPSBuZXcgRm9vU3RyaW5nKG1ha2VVbmV4cGVjdGVkPHN0ZDo6
c3RyaW5nPihtZXNzYWdlKSk7CisgICAgICAgIEZvb1N0cmluZyogZTUgPSBuZXcgRm9vU3RyaW5n
KCplNCk7CisgICAgICAgIEVYUEVDVF9FUShlMCwgKmU0KTsKKyAgICAgICAgZGVsZXRlIGU0Owor
ICAgICAgICBFWFBFQ1RfRVEoZTAsICplNSk7CisgICAgICAgIGRlbGV0ZSBlNTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBFeHBlY3RlZF92b2lkKQoreworICAgIHR5cGVkZWYgRXhw
ZWN0ZWQ8dm9pZCwgY29uc3QgY2hhcio+IEU7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBj
b25zdCB2b2lkKj4gRVY7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBzdGQ6OnN0cmluZz4g
U3RyaW5nOworICAgIHsKKyAgICAgICAgYXV0byBlID0gRSgpOworICAgICAgICBFWFBFQ1RfVFJV
RShlLmhhc1ZhbHVlKCkpOworICAgICAgICBjb25zdCBhdXRvIGUyKGUpOworICAgICAgICBFWFBF
Q1RfVFJVRShlMi5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUsIGUyKTsKKyAgICAg
ICAgRSBlMzsKKyAgICAgICAgZTMgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTMuaGFzVmFs
dWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLCBlMyk7CisgICAgfQorICAgIHsKKyAgICAgICAg
Y29uc3RleHByIEUgYzsKKyAgICAgICAgRVhQRUNUX1RSVUUoYy5oYXNWYWx1ZSgpKTsKKyAgICAg
ICAgY29uc3RleHByIGNvbnN0IGF1dG8gYzIoYyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGMyLmhh
c1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoYywgYzIpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGF1dG8gdSA9IEUobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgICAgICBFWFBFQ1RfRkFM
U0UodS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHUuZXJyb3IoKSwgb29wcyk7Cisg
ICAgICAgIEVYUEVDVF9FUSh1LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICB9
CisgICAgeworICAgICAgICBhdXRvIHV2ID0gRVYobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UodXYuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1di5l
cnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LmdldFVuZXhwZWN0ZWQoKS52YWx1
ZSgpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBFIGUgPSBtYWtlVW5leHBlY3RlZChv
b3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVD
VF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVk
KCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4
cGVjdGVkRnJvbUVycm9yPHZvaWQsIGNvbnN0IGNoYXIqPihvb3BzKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLmVycm9yKCksIG9vcHMp
OworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPHZvaWQs
IGNvbnN0IHZvaWQqPihvb3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7
CisgICAgICAgIEVYUEVDVF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEo
ZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAg
YXV0byBlMCA9IEUoKTsKKyAgICAgICAgYXV0byBlMSA9IEUoKTsKKyAgICAgICAgc3dhcChlMCwg
ZTEpOworICAgICAgICBFWFBFQ1RfRVEoZTAsIGUxKTsKKyAgICB9CisgICAgeworICAgICAgICBh
dXRvIGUwID0gRShtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIGF1dG8gZTEgPSBFKG1h
a2VVbmV4cGVjdGVkKGZvb2YpKTsKKyAgICAgICAgc3dhcChlMCwgZTEpOworICAgICAgICBFWFBF
Q1RfRVEoZTAuZXJyb3IoKSwgZm9vZik7CisgICAgICAgIEVYUEVDVF9FUShlMS5lcnJvcigpLCBv
b3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gInZlcnkg
bG9uZyBmYWlsdXJlIHN0cmluZywgZm9yIHZlcnkgYmFkIGZhaWx1cmUgY2FzZXMiOworICAgICAg
ICBTdHJpbmcgZTAobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAg
ICAgU3RyaW5nIGUxKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNzYWdlKSk7CisgICAg
ICAgIFN0cmluZyBlMihtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4oc3RkOjpzdHJpbmcoKSkp
OworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJyb3IoKSwgc3RkOjpzdHJpbmcobWVzc2FnZSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX05FKGUwLCBlMik7Cisg
ICAgICAgIFN0cmluZyogZTQgPSBuZXcgU3RyaW5nKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5n
PihtZXNzYWdlKSk7CisgICAgICAgIFN0cmluZyogZTUgPSBuZXcgU3RyaW5nKCplNCk7CisgICAg
ICAgIEVYUEVDVF9FUShlMCwgKmU0KTsKKyAgICAgICAgZGVsZXRlIGU0OworICAgICAgICBFWFBF
Q1RfRVEoZTAsICplNSk7CisgICAgICAgIGRlbGV0ZSBlNTsKKyAgICB9Cit9CisKK1RFU1QoV1RG
X0V4cGVjdGVkLCBjb21wYXJpc29uKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25z
dCBjaGFyKj4gRXg7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGludD4gRXI7CisKKyAgICAv
LyBUd28gRXhwZWN0ZWQsIG5vIGVycm9ycy4KKyAgICBFWFBFQ1RfRVEoRXgoNDIpLCBFeCg0Mikp
OworICAgIEVYUEVDVF9ORShFeCg0MiksIEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfTFQoRXgoNDIp
LCBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0dUKEV4KDEwMjQpLCBFeCg0MikpOworICAgIEVYUEVD
VF9MRShFeCg0MiksIEV4KDQyKSk7CisgICAgRVhQRUNUX0dFKEV4KDQyKSwgRXgoNDIpKTsKKyAg
ICBFWFBFQ1RfTEUoRXgoNDIpLCBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0dFKEV4KDEwMjQpLCBF
eCg0MikpOworCisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSBFeCgxMDI0KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKEV4KDQyKSAhPSBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8
IEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IEV4KDEwMjQpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgoMTAyNCkgPCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0g
RXgoMTAyNCkpOworCisgICAgLy8gVHdvIEV4cGVjdGVkLCBoYWxmIGVycm9ycy4KKyAgICBFWFBF
Q1RfRkFMU0UoRXgoNDIpID09IEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7CisgICAgRVhQRUNU
X05FKEV4KDQyKSwgRXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfTFQoRXgo
NDIpLCBFeChtYWtlVW5leHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9GQUxTRShFeCg0Mikg
PiBFeChtYWtlVW5leHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9MRShFeCg0MiksIEV4KG1h
a2VVbmV4cGVjdGVkKG9vcHMpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+PSBFeChtYWtl
VW5leHBlY3RlZChvb3BzKSkpOworCisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVk
KG9vcHMpKSA9PSBFeCg0MikpOworICAgIEVYUEVDVF9ORShFeChtYWtlVW5leHBlY3RlZChvb3Bz
KSksIEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSA8
IEV4KDQyKSk7CisgICAgRVhQRUNUX0dUKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgRXgoNDIp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpIDw9IEV4KDQyKSk7
CisgICAgRVhQRUNUX0dFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgRXgoNDIpKTsKKworICAg
IC8vIFR3byBFeHBlY3RlZCwgYWxsIGVycm9ycy4KKyAgICBFWFBFQ1RfRVEoRXIoNDIpLCBFcig0
MikpOworICAgIEVYUEVDVF9ORShFcig0MiksIEVyKDEwMjQpKTsKKyAgICBFWFBFQ1RfTFQoRXIo
NDIpLCBFcigxMDI0KSk7CisgICAgRVhQRUNUX0dUKEVyKDEwMjQpLCBFcig0MikpOworICAgIEVY
UEVDVF9MRShFcig0MiksIEVyKDQyKSk7CisgICAgRVhQRUNUX0dFKEVyKDQyKSwgRXIoNDIpKTsK
KyAgICBFWFBFQ1RfTEUoRXIoNDIpLCBFcigxMDI0KSk7CisgICAgRVhQRUNUX0dFKEVyKDEwMjQp
LCBFcig0MikpOworCisgICAgRVhQRUNUX0ZBTFNFKEVyKDQyKSA9PSBFcigxMDI0KSk7CisgICAg
RVhQRUNUX0ZBTFNFKEVyKDQyKSAhPSBFcig0MikpOworICAgIEVYUEVDVF9GQUxTRShFcigxMDI0
KSA8IEVyKDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEVyKDQyKSA+IEVyKDEwMjQpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRXIoMTAyNCkgPD0gRXIoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXIoNDIp
ID49IEVyKDEwMjQpKTsKKworICAgIC8vIE9uZSBFeHBlY3RlZCwgb25lIHZhbHVlLgorICAgIEVY
UEVDVF9FUShFeCg0MiksIDQyKTsKKyAgICBFWFBFQ1RfTkUoRXgoNDIpLCAwKTsKKyAgICBFWFBF
Q1RfTFQoRXgoNDIpLCAxMDI0KTsKKyAgICBFWFBFQ1RfR1QoRXgoMTAyNCksIDQyKTsKKyAgICBF
WFBFQ1RfTEUoRXgoNDIpLCA0Mik7CisgICAgRVhQRUNUX0dFKEV4KDQyKSwgNDIpOworICAgIEVY
UEVDVF9MRShFeCg0MiksIDEwMjQpOworICAgIEVYUEVDVF9HRShFeCgxMDI0KSwgNDIpOworCisg
ICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpICE9
IDQyKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoMTAyNCkgPCA0Mik7CisgICAgRVhQRUNUX0ZBTFNF
KEV4KDQyKSA+IDEwMjQpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8IDQyKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRXgoNDIpID49IDEwMjQpOworCisgICAgRVhQRUNUX0VRKDQyLCBFeCg0Mikp
OworICAgIEVYUEVDVF9ORSg0MiwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9MVCg0MiwgRXgoMTAy
NCkpOworICAgIEVYUEVDVF9HVCgxMDI0LCBFeCg0MikpOworICAgIEVYUEVDVF9MRSg0MiwgRXgo
NDIpKTsKKyAgICBFWFBFQ1RfR0UoNDIsIEV4KDQyKSk7CisgICAgRVhQRUNUX0xFKDQyLCBFeCgx
MDI0KSk7CisgICAgRVhQRUNUX0dFKDEwMjQsIEV4KDQyKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uo
NDIgPT0gRXgoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRSg0MiAhPSBFeCg0MikpOworICAgIEVY
UEVDVF9GQUxTRSgxMDI0IDwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoNDIgPiBFeCgxMDI0
KSk7CisgICAgRVhQRUNUX0ZBTFNFKDEwMjQgPD0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
NDIgPj0gRXgoMTAyNCkpOworCisgICAgLy8gT25lIEV4cGVjdGVkLCBvbmUgdW5leHBlY3RlZC4K
KyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID09IG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICBF
WFBFQ1RfTkUoRXgoNDIpLCBtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNUX0xUKEV4
KDQyKSwgbWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPiBt
YWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgbWFrZVVuZXhwZWN0
ZWQob29wcykpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0gbWFrZVVuZXhwZWN0ZWQob29w
cykpOworCisgICAgRVhQRUNUX0ZBTFNFKG1ha2VVbmV4cGVjdGVkKG9vcHMpID09IEV4KDQyKSk7
CisgICAgRVhQRUNUX05FKG1ha2VVbmV4cGVjdGVkKG9vcHMpLCBFeCg0MikpOworICAgIEVYUEVD
VF9GQUxTRShtYWtlVW5leHBlY3RlZChvb3BzKSA8IEV4KDQyKSk7CisgICAgRVhQRUNUX0dUKG1h
a2VVbmV4cGVjdGVkKG9vcHMpLCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShtYWtlVW5leHBl
Y3RlZChvb3BzKSA8PSBFeCg0MikpOworICAgIEVYUEVDVF9HRShtYWtlVW5leHBlY3RlZChvb3Bz
KSwgRXgoNDIpKTsKK30KKworVEVTVChXVEZfRXhwZWN0ZWQsIGhhc2gpCit7CisgICAgdHlwZWRl
ZiBFeHBlY3RlZDxpbnQsIGNvbnN0IGNoYXIqPiBFOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxF
LCBpbnQ+IG07CisgICAgbS5pbnNlcnQoeyBFKDQyKSwgNDIgfSk7CisgICAgbS5pbnNlcnQoeyBF
KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgNSB9KTsKKyAgICBtLmluc2VydCh7IEUoMTAyNCksIDEw
MjQgfSk7CisgICAgbS5pbnNlcnQoeyBFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKSwgMHhmMDBmIH0p
OworICAgIEVYUEVDVF9FUShtW0UoNDIpXSwgNDIpOworICAgIEVYUEVDVF9FUShtW0UoMTAyNCld
LCAxMDI0KTsKKyAgICBFWFBFQ1RfRVEobVtFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKV0sIDUpOwor
ICAgIEVYUEVDVF9FUShtW0UobWFrZVVuZXhwZWN0ZWQoZm9vZikpXSwgMHhmMDBmKTsKK30KKwor
VEVTVChXVEZfRXhwZWN0ZWQsIGhhc2hfdm9pZCkKK3sKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZv
aWQsIGNvbnN0IGNoYXIqPiBFOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxFLCBpbnQ+IG07Cisg
ICAgbS5pbnNlcnQoeyBFKCksIDQyIH0pOworICAgIG0uaW5zZXJ0KHsgRShtYWtlVW5leHBlY3Rl
ZChvb3BzKSksIDUgfSk7CisgICAgbS5pbnNlcnQoeyBFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKSwg
MHhmMDBmIH0pOworICAgIEVYUEVDVF9FUShtW0UoKV0sIDQyKTsKKyAgICBFWFBFQ1RfRVEobVtF
KG1ha2VVbmV4cGVjdGVkKG9vcHMpKV0sIDUpOworICAgIEVYUEVDVF9FUShtW0UobWFrZVVuZXhw
ZWN0ZWQoZm9vZikpXSwgMHhmMDBmKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYmtpdEFQ
SQotLSAKMi45LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294570</attachid>
            <date>2016-11-11 17:23:12 -0800</date>
            <delta_ts>2016-11-13 10:56:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Implement-WTF-Expected.patch</filename>
            <type>text/plain</type>
            <size>50819</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAzNTU3YWNmYmVmZmRlYjQ3OWE4MDU5Mjk3YjQ0NWNjN2ZkOTBmYzYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDggTm92IDIwMTYgMTc6MjM6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1l
bnQgV1RGOjpFeHBlY3RlZAoKc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1heSBi
ZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKY29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0
aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xl
IGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCmVycm9yLgoKVGhpcyB3
b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCgpV
c2luZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYWxsb3cgdXMgdG8gcHJvdmlkZSBmZWVkYmFj
ayB0byB0aGUKc3RhbmRhcmRzIGNvbW1pdHRlZSBhbmQgZ3VpZGUgc3RkOjpleHBlY3RlZCdzIGRl
c2lnbiBiZWZvcmUgaXQKZ2V0cyBzdGFuZGFyZGl6ZWQuIEkndmUgYWxyZWFkeSBzZW50IGEgYnVu
Y2ggb2YgZmVlZGJhY2sgdG8gdGhlCmF1dGhvciBiYXNlZCBvbiBteSBleHBlcmllbmNlIGltcGxl
bWVudGluZyB0aGlzLgoKVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6
OkV4Y2VwdGlvbk9yLgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDU0ICsrKwogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiAgICAgICAgICAgfCAgIDQgKwogU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIFNvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDQyICsrKysrKysrKysrKysrKysrKysrKwogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMgKysK
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgIHwgICAy
ICsKIC4uLi9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgIHwg
ICA0ICsKIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCAgICAgICAg
IHwgNDM5ICsrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDk5MyBpbnNlcnRp
b25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYv
RXhwZWN0ZWQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0V4cGVjdGVkLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYWE0NzljOS4uMDExODRhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1
OSBAQAogMjAxNi0xMS0xMCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0ZWQKKworICAgICAgICBzdGQ6OmV4cGVjdGVkIGlz
bid0IGluIEMrKzE3LCBhbmQgbWF5IGJlIGluIEMrKzIwLiBJdCdzIGEgbmljZQorICAgICAgICBj
b21wbGVtZW50IHRvIHN0ZDo6YW55IC8gc3RkOjpvcHRpb25hbCBiZWNhdXNlIGl0J3MgYSB0eXBl
LXRhZ2dlZAorICAgICAgICB1bmlvbiB3aGljaCBoYXMgYSBzaW5nbGUgZXhwZWN0ZWQgcmVzdWx0
IGJ1dCBjb3VsZCBhbHNvIGNvbnRhaW4gYW4KKyAgICAgICAgZXJyb3IuCisKKyAgICAgICAgVGhp
cyB3b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUu
CisKKyAgICAgICAgVXNpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGFsbG93IHVzIHRvIHBy
b3ZpZGUgZmVlZGJhY2sgdG8gdGhlCisgICAgICAgIHN0YW5kYXJkcyBjb21taXR0ZWUgYW5kIGd1
aWRlIHN0ZDo6ZXhwZWN0ZWQncyBkZXNpZ24gYmVmb3JlIGl0CisgICAgICAgIGdldHMgc3RhbmRh
cmRpemVkLiBJJ3ZlIGFscmVhZHkgc2VudCBhIGJ1bmNoIG9mIGZlZWRiYWNrIHRvIHRoZQorICAg
ICAgICBhdXRob3IgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSBpbXBsZW1lbnRpbmcgdGhpcy4KKwor
ICAgICAgICBUaGlzIGNvdWxkIHN1cHBsZW1lbnQgV1RGOjpFaXRoZXIgYW5kIFdURjo6RXhjZXB0
aW9uT3IuCisKKyAgICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUyNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogd3RmL0NvbXBpbGVyLmg6IEFkZCBSRUxBWEVEX0NPTlNURVhQ
UgorICAgICAgICAqIHd0Zi9FeHBlY3RlZC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VW5leHBl
Y3RlZFR5cGU6OlVuZXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKFdURjo6VW5leHBlY3RlZFR5cGU6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj4pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+
PSk6CisgICAgICAgIChXVEY6Om1ha2VVbmV4cGVjdGVkKToKKyAgICAgICAgKFdURjo6RXhwZWN0
ZWREZXRhaWw6OlRocm93KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWREZXRhaWw6OkNvbnN0ZXhw
ckJhc2U6OkNvbnN0ZXhwckJhc2UpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZERldGFpbDo6QmFz
ZTo6QmFzZSk6CisgICAgICAgIChXVEY6OkV4cGVjdGVkRGV0YWlsOjpCYXNlOjp+QmFzZSk6Cisg
ICAgICAgIChXVEY6OkV4cGVjdGVkOjpFeHBlY3RlZCk6CisgICAgICAgIChXVEY6OkV4cGVjdGVk
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6c3dhcCk6CisgICAgICAgIChX
VEY6OkV4cGVjdGVkOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6Om9wZXJh
dG9yKik6CisgICAgICAgIChXVEY6OkV4cGVjdGVkOjpvcGVyYXRvciBib29sKToKKyAgICAgICAg
KFdURjo6RXhwZWN0ZWQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OnZhbHVl
KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OmVycm9yKToKKyAgICAgICAgKFdURjo6RXhwZWN0
ZWQ6OmdldFVuZXhwZWN0ZWQpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6dmFsdWVPcik6Cisg
ICAgICAgIChXVEY6OnN3YXApOgorICAgICAgICAoV1RGOjptYWtlRXhwZWN0ZWQpOgorICAgICAg
ICAoV1RGOjptYWtlRXhwZWN0ZWRGcm9tRXJyb3IpOgorCisyMDE2LTExLTEwICBKRiBCYXN0aWVu
ICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKwogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBsZW5n
dGggPiBvZmZzZXQgZW5jb3VudGVyZWQgd2l0aCB3YXNtLnlhbWwvd2FzbS9qcy1hcGkvdGVzdF9N
b2R1bGUuanMuZGVmYXVsdC13YXNtCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQ1OTcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYzY2MjhjNS4uZjA1NzkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0zMjgsNiArMzI4LDcgQEAKIAkJQThBNDc0ODYxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuY3BwICovOyB9OwogCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcz
N0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLzsgfTsKIAkJQThBNDc0OEMx
NTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEIxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICov
OyB9OworCQlBRDdDNDM0QjFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEN0M0MzRBMUREMkE0QTcwMDI2
ODg4QiAvKiBFeHBlY3RlZC5oICovOyB9OwogCQlCMzhGRDdCRDE2ODk1M0U4MDA2NUM5NjkgLyog
RmVhdHVyZURlZmluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIzOEZEN0JDMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oICovOyB9
OwogCQlDNEY4QTkzNzE5QzY1RUI0MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY4QTkzNjE5QzY1RUI0MDBCMkIx
NUQgLyogU3RvcHdhdGNoLmggKi87IH07CiAJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJ
bmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi87IH07CkBAIC02OTUsNiAr
Njk2LDcgQEAKIAkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdURlRo
cmVhZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDc0OEIxNTFBODI2
NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
b25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ3QzQzNEExREQyQTRBNzAw
MjY4ODhCIC8qIEV4cGVjdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
cGVjdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIzOEZEN0JDMTY4OTUzRTgw
MDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGZWF0dXJlRGVmaW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNEY4
QTkzNjE5QzY1RUI0MDBCMkIxNUQgLyogU3RvcHdhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0b3B3YXRjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDU0OTdBQTE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04NDgsNiArODUwLDcgQEAKIAkJQTg3NkRCRDYxNTE4MTZFNTAwREFEQjk1IC8q
IHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ3
QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJMkNERUQwRjAxODEx
NUMzRjAwNERCQTcwIC8qIGNmICovLAogCQkJCUU0QTBBRDNCMUE5NjI1MTkwMDUzNkRGNiAvKiBj
b2NvYSAqLywKIAkJCQlBOEE0NzI4MTE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYSAqLywKQEAgLTE0
NTcsNiArMTQ2MCw3IEBACiAJCQkJQThBNDc0M0UxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0Nv
bmNhdGVuYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzRjE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ3QzQzNEIxREQyQTRB
NzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4NzQ1NDE3QTBC
REFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ09wZXJhdG9ycy5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oIGIvU291cmNl
L1dURi93dGYvQ29tcGlsZXIuaAppbmRleCAyODhlYjRhLi5iZmRlNzA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgK
QEAgLTcyLDcgKzcyLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNlbmRpZgorI2VuZGlmIC8vIGRl
ZmluZWQoX19jbGFuZ19fKQogCiAvKiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpIC0gR05VIENvbXBp
bGVyIENvbGxlY3Rpb24gb3IgQ2xhbmcgKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKQpAQCAtMTQ0
LDYgKzE0NCwyMCBAQAogI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNfRUFCSSAxCiAjZW5k
aWYKIAorLyogUkVMQVhFRF9DT05TVEVYUFIgKi8KKworI2lmIGRlZmluZWQoX19jcHBfY29uc3Rl
eHByKSAmJiBfX2NwcF9jb25zdGV4cHIgPj0gMjAxMzA0CisjZGVmaW5lIFdURl9DT01QSUxFUl9T
VVBQT1JUU19SRUxBWEVEX0NPTlNURVhQUiAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFJFTEFY
RURfQ09OU1RFWFBSKQorI2lmIENPTVBJTEVSX1NVUFBPUlRTKFJFTEFYRURfQ09OU1RFWFBSKQor
I2RlZmluZSBSRUxBWEVEX0NPTlNURVhQUiBjb25zdGV4cHIKKyNlbHNlCisjZGVmaW5lIFJFTEFY
RURfQ09OU1RFWFBSCisjZW5kaWYKKyNlbmRpZgorCiAjZGVmaW5lIEFTQU5fRU5BQkxFRCBDT01Q
SUxFUl9IQVNfQ0xBTkdfRkVBVFVSRShhZGRyZXNzX3Nhbml0aXplcikKIAogI2lmIEFTQU5fRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRXhwZWN0ZWQuaCBiL1NvdXJjZS9XVEYv
d3RmL0V4cGVjdGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlMWEz
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgKQEAgLTAsMCAr
MSw0NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBXVEY6OkV4cGVjdGVkIGlzIGJhc2VkIG9uIHN0ZDo6
ZXhwZWN0ZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiBodHRwOi8vd2cyMS5saW5rL3AwMzIzcjEKKy8v
IFRoZSBzcGVjaWZpY2F0aW9uIGV4cGVjdHMgdG8gdGhyb3cuIFRoaXMgaW1wbGVtZW50YXRpb24g
ZG9lc24ndCBzdXBwb3J0IGV4Y2VwdGlvbnMsIHVzZXMgUkVMRUFTRV9BU1NFUlQgaW5zdGVhZC4K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGZ1bmN0aW9u
YWw+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4K
KyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPGNsYXNz
IEU+CitjbGFzcyBVbmV4cGVjdGVkVHlwZSB7CitwdWJsaWM6CisgICAgVW5leHBlY3RlZFR5cGUo
KSA9IGRlbGV0ZTsKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgVW5leHBlY3RlZFR5cGUoY29uc3Qg
RSYgZSkgOiB2YWwoZSkgeyB9CisgICAgY29uc3RleHByIGV4cGxpY2l0IFVuZXhwZWN0ZWRUeXBl
KEUmJiBlKSA6IHZhbChXVEZNb3ZlKGUpKSB7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRSYgdmFs
dWUoKSBjb25zdCB7IHJldHVybiB2YWw7IH0KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBFJiB2YWx1
ZSgpIHsgcmV0dXJuIHZhbDsgfQorCitwcml2YXRlOgorICAgIEUgdmFsOworfTsKKwordGVtcGxh
dGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5leHBlY3RlZFR5
cGU8RT4mIGxocywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4gbGhzLnZh
bHVlKCkgPT0gcmhzLnZhbHVlKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0
ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpICE9IHJocy52YWx1ZSgpOyB9Cit0
ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFVuZXhwZWN0
ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxo
cy52YWx1ZSgpIDwgcmhzLnZhbHVlKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBl
Y3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4gbGhzLnZhbHVlKCkgPiByaHMudmFsdWUoKTsgfQor
dGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVW5leHBl
Y3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4g
bGhzLnZhbHVlKCkgPD0gcmhzLnZhbHVlKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVu
ZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpID49IHJocy52YWx1ZSgp
OyB9CisKK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgVW5leHBlY3RlZFR5cGU8c3RkOjpk
ZWNheV90PEU+PiBtYWtlVW5leHBlY3RlZChFJiYgdikgeyByZXR1cm4gVW5leHBlY3RlZFR5cGU8
dHlwZW5hbWUgc3RkOjpkZWNheTxFPjo6dHlwZT4oc3RkOjpmb3J3YXJkPEU+KHYpKTsgfQorCitz
dHJ1Y3QgVW5leHBlY3RUYWcgeworICAgIFVuZXhwZWN0VGFnKCkgPSBkZWxldGU7Cit9OworY29u
c3RleHByIFVuZXhwZWN0VGFnIFVuZXhwZWN0IHsgfTsKKworbmFtZXNwYWNlIEV4cGVjdGVkRGV0
YWlsIHsKKworLy8gSW52b2tlZCB3aGVyZSBzdGQ6OkV4cGVjdGVkIHdvdWxkIGluc3RlYWQgdGhy
b3cuCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgVGhyb3coKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKworc3RhdGljIGNvbnN0ZXhwciBlbnVtIGNsYXNzIFZhbHVlVGFn
VHlwZSB7IH0gVmFsdWVUYWcgeyB9Oworc3RhdGljIGNvbnN0ZXhwciBlbnVtIGNsYXNzIEVycm9y
VGFnVHlwZSB7IH0gRXJyb3JUYWcgeyB9OworCit0ZW1wbGF0ZTxjbGFzcyBULCBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWU+KiA9IG51bGxw
dHI+IHZvaWQgZGVzdHJveShUJiB0KSB7IH0KK3RlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6ZW5hYmxl
X2lmX3Q8IXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgKHN0ZDo6
aXNfY2xhc3M8VD46OnZhbHVlIHx8IHN0ZDo6aXNfdW5pb248VD46OnZhbHVlKT4qID0gbnVsbHB0
cj4gdm9pZCBkZXN0cm95KFQmIHQpIHsgdC5+VCgpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBFPgordW5pb24gQ29uc3RleHByU3RvcmFnZSB7CisgICAgdHlwZWRlZiBUIFZhbHVlVHlw
ZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNoYXIgZHVtbXk7CisgICAgVmFsdWVU
eXBlIHZhbDsKKyAgICBFcnJvclR5cGUgZXJyOworICAgIGNvbnN0ZXhwciBDb25zdGV4cHJTdG9y
YWdlKCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJTdG9yYWdlKFZhbHVl
VGFnVHlwZSkgOiB2YWwoKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShFcnJv
clRhZ1R5cGUpIDogZXJyKCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoVmFs
dWVUYWdUeXBlLCBjb25zdCBWYWx1ZVR5cGUmIHYpIDogdmFsKHYpIHsgfQorICAgIGNvbnN0ZXhw
ciBDb25zdGV4cHJTdG9yYWdlKEVycm9yVGFnVHlwZSwgY29uc3QgRXJyb3JUeXBlJiBlKSA6IGVy
cihlKSB7IH0KKyAgICB+Q29uc3RleHByU3RvcmFnZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPgordW5pb24gU3RvcmFnZSB7CisgICAgdHlwZWRlZiBUIFZh
bHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNoYXIgZHVtbXk7CisgICAg
VmFsdWVUeXBlIHZhbDsKKyAgICBFcnJvclR5cGUgZXJyOworICAgIGNvbnN0ZXhwciBTdG9yYWdl
KCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKFZhbHVlVGFnVHlwZSkgOiB2
YWwoKSB7IH0KKyAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9
CisgICAgY29uc3RleHByIFN0b3JhZ2UoVmFsdWVUYWdUeXBlLCBjb25zdCBWYWx1ZVR5cGUmIHZh
bCkgOiB2YWwodmFsKSB7IH0KKyAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUsIGNv
bnN0IEVycm9yVHlwZSYgZXJyKSA6IGVycihlcnIpIHsgfQorICAgIH5TdG9yYWdlKCkgeyB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK3VuaW9uIENvbnN0ZXhwclN0b3JhZ2U8dm9pZCwgRT4g
eworICAgIHR5cGVkZWYgdm9pZCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsK
KyAgICBjaGFyIGR1bW15OworICAgIEVycm9yVHlwZSBlcnI7CisgICAgY29uc3RleHByIENvbnN0
ZXhwclN0b3JhZ2UoKSA6IGR1bW15KCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3Jh
Z2UoVmFsdWVUYWdUeXBlKSA6IGR1bW15KCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0
b3JhZ2UoRXJyb3JUYWdUeXBlKSA6IGVycigpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJT
dG9yYWdlKEVycm9yVGFnVHlwZSwgY29uc3QgRXJyb3JUeXBlJiBlKSA6IGVycihlKSB7IH0KKyAg
ICB+Q29uc3RleHByU3RvcmFnZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBF
PgordW5pb24gU3RvcmFnZTx2b2lkLCBFPiB7CisgICAgdHlwZWRlZiB2b2lkIFZhbHVlVHlwZTsK
KyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNoYXIgZHVtbXk7CisgICAgRXJyb3JUeXBl
IGVycjsKKyAgICBjb25zdGV4cHIgU3RvcmFnZSgpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4
cHIgU3RvcmFnZShWYWx1ZVRhZ1R5cGUpIDogZHVtbXkoKSB7IH0KKyAgICBjb25zdGV4cHIgU3Rv
cmFnZShFcnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9CisgICAgY29uc3RleHByIFN0b3JhZ2UoRXJy
b3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBlcnIoZXJyKSB7IH0KKyAgICB+U3Rv
cmFnZSgpIHsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+CitzdHJ1Y3QgQ29u
c3RleHByQmFzZSB7CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJy
b3JUeXBlOworICAgIENvbnN0ZXhwclN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7Cisg
ICAgYm9vbCBoYXM7CisgICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoKSA6IHMoKSwgaGFzKHRy
dWUpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKFZhbHVlVGFnVHlwZSB0YWcpIDog
cyh0YWcpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoRXJyb3JU
YWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxzZSkgeyB9CisgICAgY29uc3RleHByIENvbnN0
ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZywgY29uc3QgVmFsdWVUeXBlJiB2YWwpIDogcyh0YWcs
IHZhbCksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRh
Z1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZhbHNl
KSB7IH0KKyAgICB+Q29uc3RleHByQmFzZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBFPgorc3RydWN0IEJhc2UgeworICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7
CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBTdG9yYWdlPFZhbHVlVHlwZSwgRXJyb3JU
eXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBCYXNlKCkgOiBzKCksIGhhcyh0
cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQmFzZShWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFnKSwg
aGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcpIDogcyh0
YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKFZhbHVlVGFnVHlwZSB0YWcs
IGNvbnN0IFZhbHVlVHlwZSYgdmFsKSA6IHModGFnLCB2YWwpLCBoYXModHJ1ZSkgeyB9CisgICAg
Y29uc3RleHByIEJhc2UoRXJyb3JUYWdUeXBlIHRhZywgY29uc3QgRXJyb3JUeXBlJiBlcnIpIDog
cyh0YWcsIGVyciksIGhhcyhmYWxzZSkgeyB9CisgICAgQmFzZShjb25zdCBCYXNlJiBvKQorICAg
ICAgICA6IGhhcyhvLmhhcykKKyAgICB7CisgICAgICAgIGlmIChoYXMpCisgICAgICAgICAgICA6
Om5ldyAoJnMudmFsKSBWYWx1ZVR5cGUoby5zLnZhbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlwZShvLnMuZXJyKTsKKyAgICB9CisgICAgQmFzZShC
YXNlJiYgbykKKyAgICAgICAgOiBoYXMoby5oYXMpCisgICAgeworICAgICAgICBpZiAoaGFzKQor
ICAgICAgICAgICAgOjpuZXcgKCZzLnZhbCkgVmFsdWVUeXBlKFdURk1vdmUoby5zLnZhbCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICA6Om5ldyAoJnMuZXJyKSBFcnJvclR5cGUoV1RGTW92
ZShvLnMuZXJyKSk7CisgICAgfQorICAgIH5CYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChoYXMp
CisgICAgICAgICAgICBkZXN0cm95KHMudmFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGVzdHJveShzLmVycik7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+CitzdHJ1Y3Qg
Q29uc3RleHByQmFzZTx2b2lkLCBFPiB7CisgICAgdHlwZWRlZiB2b2lkIFZhbHVlVHlwZTsKKyAg
ICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIENvbnN0ZXhwclN0b3JhZ2U8VmFsdWVUeXBlLCBF
cnJvclR5cGU+IHM7CisgICAgYm9vbCBoYXM7CisgICAgY29uc3RleHByIENvbnN0ZXhwckJhc2Uo
KSA6IHMoKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKFZhbHVl
VGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIENvbnN0
ZXhwckJhc2UoRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxzZSkgeyB9CisgICAg
Y29uc3RleHByIENvbnN0ZXhwckJhc2UoRXJyb3JUYWdUeXBlIHRhZywgY29uc3QgRXJyb3JUeXBl
JiBlcnIpIDogcyh0YWcsIGVyciksIGhhcyhmYWxzZSkgeyB9CisgICAgfkNvbnN0ZXhwckJhc2Uo
KSA9IGRlZmF1bHQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK3N0cnVjdCBCYXNlPHZvaWQs
IEU+IHsKKyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5
cGU7CisgICAgU3RvcmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhhczsK
KyAgICBjb25zdGV4cHIgQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHBy
IEJhc2UoVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25z
dGV4cHIgQmFzZShFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFzKGZhbHNlKSB7IH0KKyAg
ICBjb25zdGV4cHIgQmFzZShFcnJvclRhZ1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikg
OiBzKHRhZywgZXJyKSwgaGFzKGZhbHNlKSB7IH0KKyAgICBCYXNlKGNvbnN0IEJhc2UmIG8pCisg
ICAgICAgIDogaGFzKG8uaGFzKQorICAgIHsKKyAgICAgICAgaWYgKCFoYXMpCisgICAgICAgICAg
ICA6Om5ldyAoJnMuZXJyKSBFcnJvclR5cGUoby5zLmVycik7CisgICAgfQorICAgIEJhc2UoQmFz
ZSYmIG8pCisgICAgICAgIDogaGFzKG8uaGFzKQorICAgIHsKKyAgICAgICAgaWYgKCFoYXMpCisg
ICAgICAgICAgICA6Om5ldyAoJnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShvLnMuZXJyKSk7Cisg
ICAgfQorICAgIH5CYXNlKCkKKyAgICB7CisgICAgICAgIGlmICghaGFzKQorICAgICAgICAgICAg
ZGVzdHJveShzLmVycik7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+
Cit1c2luZyBCYXNlU2VsZWN0ID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAoKHN0
ZDo6aXNfdm9pZDxUPjo6dmFsdWUgfHwgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+
Ojp2YWx1ZSkKKyAgICAgICAgJiYgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEU+Ojp2
YWx1ZSksCisgICAgQ29uc3RleHByQmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6
dHlwZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8RT46OnR5cGU+LAorICAgIEJhc2U8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PEU+Ojp0eXBlPgorPjo6dHlwZTsKKworfSAvLyBuYW1lc3BhY2UgRXhwZWN0ZWREZXRhaWwK
KwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+CitjbGFzcyBFeHBlY3RlZCA6IHByaXZhdGUg
RXhwZWN0ZWREZXRhaWw6OkJhc2VTZWxlY3Q8VCwgRT4geworICAgIHR5cGVkZWYgRXhwZWN0ZWRE
ZXRhaWw6OkJhc2VTZWxlY3Q8VCwgRT4gYmFzZTsKKworcHVibGljOgorICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYmFzZTo6VmFsdWVUeXBlIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJh
c2U6OkVycm9yVHlwZSBFcnJvclR5cGU7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBFeHBlY3Rl
ZDxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gdHlwZTsKKworcHVibGljOgorICAgIC8vIHRlbXBsYXRl
IDxjbGFzcyBVPiBzdHJ1Y3QgcmViaW5kIHsgdXNpbmcgdHlwZSA9IEV4cGVjdGVkPFUsIEVycm9y
VHlwZT47IH07CisKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoKSA6IGJhc2UoRXhwZWN0ZWREZXRh
aWw6OlZhbHVlVGFnKSB7IH0KKyAgICBFeHBlY3RlZChjb25zdCBFeHBlY3RlZCYpID0gZGVmYXVs
dDsKKyAgICBFeHBlY3RlZChFeHBlY3RlZCYmKSA9IGRlZmF1bHQ7CisgICAgY29uc3RleHByIEV4
cGVjdGVkKGNvbnN0IFZhbHVlVHlwZSYgZSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpWYWx1ZVRh
ZywgZSkgeyB9CisgICAgY29uc3RleHByIEV4cGVjdGVkKFZhbHVlVHlwZSYmIGUpIDogYmFzZShF
eHBlY3RlZERldGFpbDo6VmFsdWVUYWcsIFdURk1vdmUoZSkpIHsgfQorICAgIC8vIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQoaW5fcGxhY2VfdCwg
QXJncyYmLi4uKTsKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4gY29u
c3RleHByIGV4cGxpY2l0IEV4cGVjdGVkKGluX3BsYWNlX3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVPiwgQXJncyYmLi4uKTsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVW5leHBlY3RlZFR5cGU8
RXJyb3JUeXBlPiBjb25zdCYgdSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpFcnJvclRhZywgdS52
YWx1ZSgpKSB7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRXJyPiBjb25zdGV4cHIgRXhwZWN0ZWQo
VW5leHBlY3RlZFR5cGU8RXJyPiBjb25zdCYgdSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpFcnJv
clRhZywgdS52YWx1ZSgpKSB7IH0KKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4gY29u
c3RleHByIGV4cGxpY2l0IEV4cGVjdGVkKFVuZXhwZWN0VGFnLCBBcmdzJiYuLi4pOworICAgIC8v
IHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhw
ZWN0ZWQoVW5leHBlY3RUYWcsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsK
KworICAgIH5FeHBlY3RlZCgpID0gZGVmYXVsdDsKKworICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0o
Y29uc3QgRXhwZWN0ZWQmIGUpIHsgdHlwZShlKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9
CisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShFeHBlY3RlZCYmIGUpIHsgdHlwZShXVEZNb3ZlKGUp
KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFU+IEV4
cGVjdGVkJiBvcGVyYXRvcj0oVSYmIHUpIHsgdHlwZShXVEZNb3ZlKHUpKS5zd2FwKCp0aGlzKTsg
cmV0dXJuICp0aGlzOyB9CisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBVbmV4cGVjdGVk
VHlwZTxFcnJvclR5cGU+JiB1KSB7IHR5cGUodSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsg
fQorICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPiYmIHUp
IHsgdHlwZShXVEZNb3ZlKHUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgLy8g
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+IHZvaWQgZW1wbGFjZShBcmdzJiYuLi4pOworICAgIC8v
IHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiB2b2lkIGVtcGxhY2Uoc3RkOjppbml0
aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisgICAgdm9pZCBzd2FwKEV4cGVjdGVkJiBv
KQorICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgICBpZiAoYmFzZTo6aGFz
ICYmIG8uaGFzKQorICAgICAgICAgICAgc3dhcChiYXNlOjpzLnZhbCwgby5zLnZhbCk7CisgICAg
ICAgIGVsc2UgaWYgKGJhc2U6OmhhcyAmJiAhby5oYXMpIHsKKyAgICAgICAgICAgIEVycm9yVHlw
ZSBlKFdURk1vdmUoby5zLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZvLnMudmFsKSBWYWx1
ZVR5cGUoV1RGTW92ZShiYXNlOjpzLnZhbCkpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNlOjpz
LmVycikgRXJyb3JUeXBlKGUpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsK
KyAgICAgICAgfSBlbHNlIGlmICghYmFzZTo6aGFzICYmIG8uaGFzKSB7CisgICAgICAgICAgICBW
YWx1ZVR5cGUgdihXVEZNb3ZlKG8ucy52YWwpKTsKKyAgICAgICAgICAgIDo6bmV3ICgmby5zLmVy
cikgRXJyb3JUeXBlKFdURk1vdmUoYmFzZTo6cy5lcnIpKTsKKyAgICAgICAgICAgIDo6bmV3ICgm
YmFzZTo6cy52YWwpIFZhbHVlVHlwZSh2KTsKKyAgICAgICAgICAgIHN3YXAoYmFzZTo6aGFzLCBv
Lmhhcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3dhcChiYXNlOjpzLmVyciwgby5z
LmVycik7CisgICAgfQorCisgICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICZiYXNlOjpzLnZhbDsgfQorICAgIFZhbHVlVHlwZSogb3BlcmF0
b3ItPigpIHsgcmV0dXJuICZiYXNlOjpzLnZhbDsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBWYWx1
ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0ICYgeyByZXR1cm4gYmFzZTo6cy52YWw7IH0KKyAgICBW
YWx1ZVR5cGUmIG9wZXJhdG9yKigpICYgeyByZXR1cm4gYmFzZTo6cy52YWw7IH0KKyAgICBjb25z
dGV4cHIgY29uc3QgVmFsdWVUeXBlJiYgb3BlcmF0b3IqKCkgY29uc3QgJiYgeyByZXR1cm4gV1RG
TW92ZShiYXNlOjpzLnZhbCk7IH0KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBWYWx1ZVR5cGUmJiBv
cGVyYXRvciooKSAmJiB7IHJldHVybiBXVEZNb3ZlKGJhc2U6OnMudmFsKTsgfQorICAgIGNvbnN0
ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gYmFzZTo6aGFzOyB9
CisgICAgY29uc3RleHByIGJvb2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7
IH0KKyAgICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSgpIGNvbnN0ICYgeyByZXR1
cm4gYmFzZTo6aGFzID8gYmFzZTo6cy52YWwgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJh
c2U6OnMudmFsKTsgfQorICAgIFJFTEFYRURfQ09OU1RFWFBSIFZhbHVlVHlwZSYgdmFsdWUoKSAm
IHsgcmV0dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJv
dygpLCBiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgVmFsdWVUeXBlJiYgdmFs
dWUoKSBjb25zdCAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNlOjpzLnZhbCA6IChFeHBlY3Rl
ZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy52YWwpOyB9CisgICAgUkVMQVhFRF9DT05TVEVYUFIg
VmFsdWVUeXBlJiYgdmFsdWUoKSAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNlOjpzLnZhbCA6
IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy52YWwpOyB9CisgICAgY29uc3RleHBy
IGNvbnN0IEVycm9yVHlwZSYgZXJyb3IoKSBjb25zdCAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBi
YXNlOjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9Cisg
ICAgRXJyb3JUeXBlJiBlcnJvcigpICYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJy
IDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBSRUxBWEVE
X0NPTlNURVhQUiBFcnJvclR5cGUmJiBlcnJvcigpICYmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBi
YXNlOjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9Cisg
ICAgY29uc3RleHByIGNvbnN0IEVycm9yVHlwZSYmIGVycm9yKCkgY29uc3QgJiYgeyByZXR1cm4g
IWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBiYXNl
OjpzLmVycik7IH0KKyAgICBjb25zdGV4cHIgVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPiBnZXRV
bmV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4gVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPihiYXNl
OjpzLmVycik7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gY29uc3RleHByIFZhbHVlVHlwZSB2
YWx1ZU9yKFUmJiB1KSBjb25zdCAmIHsgcmV0dXJuIGJhc2U6OmhhcyA/ICoqdGhpcyA6IHN0YXRp
Y19jYXN0PFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFU+KHUpKTsgfQorICAgIHRlbXBsYXRlIDxj
bGFzcyBVPiBWYWx1ZVR5cGUgdmFsdWVPcihVJiYgdSkgJiYgeyByZXR1cm4gYmFzZTo6aGFzID8g
V1RGTW92ZSgqKnRoaXMpIDogc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VT4o
dSkpOyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK2NsYXNzIEV4cGVjdGVkPHZvaWQsIEU+
IDogcHJpdmF0ZSBFeHBlY3RlZERldGFpbDo6QmFzZVNlbGVjdDx2b2lkLCBFPiB7CisgICAgdHlw
ZWRlZiBFeHBlY3RlZERldGFpbDo6QmFzZVNlbGVjdDx2b2lkLCBFPiBiYXNlOworCitwdWJsaWM6
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpWYWx1ZVR5cGUgVmFsdWVUeXBlOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgYmFzZTo6RXJyb3JUeXBlIEVycm9yVHlwZTsKKworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPiB0eXBlOworCitwdWJsaWM6
CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCByZWJpbmQgeyB0eXBlZGVmIEV4cGVj
dGVkPFUsIEVycm9yVHlwZT4gdHlwZTsgfTsKKworICAgIGNvbnN0ZXhwciBFeHBlY3RlZCgpIDog
YmFzZShFeHBlY3RlZERldGFpbDo6VmFsdWVUYWcpIHsgfQorICAgIEV4cGVjdGVkKGNvbnN0IEV4
cGVjdGVkJikgPSBkZWZhdWx0OworICAgIEV4cGVjdGVkKEV4cGVjdGVkJiYpID0gZGVmYXVsdDsK
KyAgICAvLyBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQoaW5fcGxhY2VfdCk7CisgICAgY29u
c3RleHByIEV4cGVjdGVkKFVuZXhwZWN0ZWRUeXBlPEU+IGNvbnN0JiB1KSA6IGJhc2UoRXhwZWN0
ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBF
cnI+IGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnI+IGNvbnN0JiB1KSA6IGJh
c2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorCisgICAgfkV4cGVj
dGVkKCkgPSBkZWZhdWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBFeHBlY3Rl
ZCYgZSkgeyB0eXBlKGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBlY3Rl
ZCYgb3BlcmF0b3I9KEV4cGVjdGVkJiYgZSkgeyB0eXBlKFdURk1vdmUoZSkpLnN3YXAoKnRoaXMp
OyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0
ZWRUeXBlPEU+JiB1KSB7IHR5cGUodSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfSAvLyBO
b3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShVbmV4cGVj
dGVkVHlwZTxFPiYmIHUpIHsgdHlwZShXVEZNb3ZlKHUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0
aGlzOyB9IC8vIE5vdCBpbiB0aGUgY3VycmVudCBwYXBlci4KKyAgICAvLyB2b2lkIGVtcGxhY2Uo
KTsKKworICAgIHZvaWQgc3dhcChFeHBlY3RlZCYgbykKKyAgICB7CisgICAgICAgIHVzaW5nIHN0
ZDo6c3dhcDsKKyAgICAgICAgaWYgKGJhc2U6OmhhcyAmJiBvLmhhcykgeworICAgICAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICAgICAgfSBlbHNlIGlmIChiYXNlOjpoYXMgJiYgIW8uaGFzKSB7
CisgICAgICAgICAgICBFcnJvclR5cGUgZShXVEZNb3ZlKG8ucy5lcnIpKTsKKyAgICAgICAgICAg
IDo6bmV3ICgmYmFzZTo6cy5lcnIpIEVycm9yVHlwZShlKTsKKyAgICAgICAgICAgIHN3YXAoYmFz
ZTo6aGFzLCBvLmhhcyk7CisgICAgICAgIH0gZWxzZSBpZiAoIWJhc2U6OmhhcyAmJiBvLmhhcykg
eworICAgICAgICAgICAgOjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShiYXNlOjpz
LmVycikpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzd2FwKGJhc2U6OnMuZXJyLCBvLnMuZXJyKTsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6
OmhhczsgfQorICAgIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYmFz
ZTo6aGFzOyB9CisgICAgdm9pZCB2YWx1ZSgpIGNvbnN0IHsgIWJhc2U6OmhhcyA/IEV4cGVjdGVk
RGV0YWlsOjpUaHJvdygpIDogdm9pZCgpOyB9CisgICAgY29uc3RleHByIGNvbnN0IEUmIGVycm9y
KCkgY29uc3QgJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWRE
ZXRhaWw6OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIEUmIGVycm9yKCkgJiB7IHJldHVy
biAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJh
c2U6OnMuZXJyKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisgICAgUkVMQVhFRF9D
T05TVEVYUFIgRSYmIGVycm9yKCkgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJy
IDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBjb25zdGV4
cHIgY29uc3QgRSYmIGVycm9yKCkgY29uc3QgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6
OnMuZXJyIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0gLy8gTm90
IGluIHRoZSBjdXJyZW50IHBhcGVyLgorICAgIC8vIGNvbnN0ZXhwciBFJiBlcnJvcigpICY7Cisg
ICAgY29uc3RleHByIFVuZXhwZWN0ZWRUeXBlPEU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7IHJl
dHVybiBVbmV4cGVjdGVkVHlwZTxFPihiYXNlOjpzLmVycik7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4cGVjdGVk
PFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gYm9vbCh4KSA9PSBi
b29sKHkpICYmICh4ID8geC52YWx1ZSgpID09IHkudmFsdWUoKSA6IHguZXJyb3IoKSA9PSB5LmVy
cm9yKCkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkp
IHsgcmV0dXJuICEoeCA9PSB5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0
ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICghYm9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogKChi
b29sKHgpICYmICFib29sKHkpKSA/IHRydWUgOiAoKGJvb2woeCkgJiYgYm9vbCh5KSkgPyB4LnZh
bHVlKCkgPCB5LnZhbHVlKCkgOiB4LmVycm9yKCkgPCB5LmVycm9yKCkpKTsgfQordGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICEoeCA9PSB5KSAm
JiAhKHggPCB5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB5KSB7IHJldHVybiAoeCA9PSB5KSB8fCAoeCA8IHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYg
eCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICh4ID09IHkpIHx8ICh4ID4geSk7
IH0KKwordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RXhwZWN0ZWQ8dm9pZCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+JiB5KSB7IHJldHVy
biBib29sKHgpID09IGJvb2woeSkgJiYgKHggPyB0cnVlIDogeC5lcnJvcigpID09IHkuZXJyb3Io
KSk7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgordGVtcGxhdGUgPGNsYXNzIEU+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeCwgY29uc3Qg
RXhwZWN0ZWQ8dm9pZCwgRT4mIHkpIHsgcmV0dXJuICghYm9vbCh4KSAmJiBib29sKHkpKSA/IGZh
bHNlIDogKChib29sKHgpICYmICFib29sKHkpKSA/IHRydWUgOiAoKGJvb2woeCkgJiYgYm9vbCh5
KSkgPyBmYWxzZSA6IHguZXJyb3IoKSA8IHkuZXJyb3IoKSkpOyB9IC8vIE5vdCBpbiB0aGUgY3Vy
cmVudCBwYXBlci4KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJu
IHggPT0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+
JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA9PSB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHBlY3RlZDxULCBF
PiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCAhPSBFeHBlY3RlZDxULCBFPih5KTsgfQordGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgp
ICE9IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjwoY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPCBF
eHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPChjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPCB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVCYgeSkgeyByZXR1cm4geCA8PSBFeHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYgeCwgY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDw9IHk7IH0K
K3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPiBFeHBlY3RlZDxU
LCBFPih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPihjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhw
ZWN0ZWQ8VCwgRT4oeCkgPiB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYgeSkg
eyByZXR1cm4geCA+PSBFeHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgeCwgY29uc3QgRXhwZWN0
ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID49IHk7IH0KKwordGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID09
IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID09IHk7IH0KK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4
cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCAh
PSBFeHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4
cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSAhPSB5OyB9Cit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4
cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA8
IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBl
Y3RlZDxULCBFPiYgeSkgeyAgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDwgeTsgfQordGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4IDw9
IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDw9IHk7IH0KK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID4g
RXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+IHk7IH0KK3RlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB4LCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA+PSBF
eHBlY3RlZDxULCBFPih5KTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVj
dGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+PSB5OyB9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFPiB2b2lkIHN3YXAoRXhwZWN0ZWQ8VCwgRT4mIHgs
IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHguc3dhcCh5KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRSA9IFdURjo6TnVsbG9wdFRhZz4gY29uc3RleHByIEV4cGVjdGVkPHN0ZDo6ZGVjYXlf
dDxUPiwgRT4gbWFrZUV4cGVjdGVkKFQmJiB2KQoreworICAgIHJldHVybiBFeHBlY3RlZDx0eXBl
bmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlLCBFPihzdGQ6OmZvcndhcmQ8VD4odikpOworfQordGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBFeHBlY3RlZDxULCBzdGQ6OmRlY2F5
X3Q8RT4+IG1ha2VFeHBlY3RlZEZyb21FcnJvcihFJiYgZSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwg
c3RkOjpkZWNheV90PEU+PihtYWtlVW5leHBlY3RlZChlKSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBFLCBjbGFzcyBVPiBjb25zdGV4cHIgRXhwZWN0ZWQ8VCwgRT4gbWFrZUV4cGVjdGVk
RnJvbUVycm9yKFUmJiB1KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPihtYWtlVW5leHBlY3RlZChF
IHsgc3RkOjpmb3J3YXJkPFU+KHUpIH0gKSk7IH0KKy8vIHRlbXBsYXRlIDxjbGFzcyBGLCBjbGFz
cyBFID0gV1RGOjpOdWxsb3B0VGFnPiBjb25zdGV4cHIgRXhwZWN0ZWQ8dHlwZW5hbWUgc3RkOjpy
ZXN1bHRfb2Y8Rj46OnR5cGUsIEU+IG1ha2VFeHBlY3RlZF9mcm9tX2NhbGwoRiBmKTsKKworRXhw
ZWN0ZWQ8dm9pZCwgV1RGOjpOdWxsb3B0VGFnPiBtYWtlRXhwZWN0ZWQoKSB7IHJldHVybiBFeHBl
Y3RlZDx2b2lkLCBXVEY6Ok51bGxvcHRUYWc+KCk7IH0KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gc3RydWN0IGhh
c2g8V1RGOjpFeHBlY3RlZDxULCBFPj4geworICAgIHR5cGVkZWYgV1RGOjpFeHBlY3RlZDxULCBF
PiBhcmd1bWVudF90eXBlOworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgcmVzdWx0X3R5cGU7Cisg
ICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBlKSBjb25zdCB7
IHJldHVybiBlID8gaGFzaDx0eXBlbmFtZSBhcmd1bWVudF90eXBlOjpWYWx1ZVR5cGU+IHsgfSAo
ZS52YWx1ZSgpKSA6IGhhc2g8dHlwZW5hbWUgYXJndW1lbnRfdHlwZTo6RXJyb3JUeXBlPiB7IH0g
KGUuZXJyb3IoKSk7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBFPiBzdHJ1Y3QgaGFzaDxXVEY6
OkV4cGVjdGVkPHZvaWQsIEU+PiB7CisgICAgdHlwZWRlZiBXVEY6OkV4cGVjdGVkPHZvaWQsIEU+
IGFyZ3VtZW50X3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKKyAg
ICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGUpIGNvbnN0IHsg
cmV0dXJuIGUgPyAwIDogaGFzaDx0eXBlbmFtZSBhcmd1bWVudF90eXBlOjpFcnJvclR5cGU+IHsg
fSAoZS5lcnJvcigpKTsgfQorfTsKKworfQorCit1c2luZyBXVEY6OlVuZXhwZWN0ZWRUeXBlOwor
dXNpbmcgV1RGOjptYWtlVW5leHBlY3RlZDsKK3VzaW5nIFdURjo6VW5leHBlY3Q7Cit1c2luZyBX
VEY6OkV4cGVjdGVkOwordXNpbmcgV1RGOjptYWtlRXhwZWN0ZWQ7Cit1c2luZyBXVEY6Om1ha2VF
eHBlY3RlZEZyb21FcnJvcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBkNTVjOGQwLi40YjZhM2IxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTYtMTEtMTAgIEpG
IEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBXVEY6
OkV4cGVjdGVkCisKKyAgICAgICAgc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1h
eSBiZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKKyAgICAgICAgY29tcGxlbWVudCB0byBzdGQ6OmFu
eSAvIHN0ZDo6b3B0aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKKyAgICAgICAgdW5p
b24gd2hpY2ggaGFzIGEgc2luZ2xlIGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250
YWluIGFuCisgICAgICAgIGVycm9yLgorCisgICAgICAgIFRoaXMgd291bGQgYmUgdXNlZnVsIGlu
IHRoZSBXZWJBc3NlbWJseSBwYXJzZXIsIGZvciBleGFtcGxlLgorCisgICAgICAgIFVzaW5nIHRo
aXMgaW1wbGVtZW50YXRpb24gd2lsbCBhbGxvdyB1cyB0byBwcm92aWRlIGZlZWRiYWNrIHRvIHRo
ZQorICAgICAgICBzdGFuZGFyZHMgY29tbWl0dGVlIGFuZCBndWlkZSBzdGQ6OmV4cGVjdGVkJ3Mg
ZGVzaWduIGJlZm9yZSBpdAorICAgICAgICBnZXRzIHN0YW5kYXJkaXplZC4gSSd2ZSBhbHJlYWR5
IHNlbnQgYSBidW5jaCBvZiBmZWVkYmFjayB0byB0aGUKKyAgICAgICAgYXV0aG9yIGJhc2VkIG9u
IG15IGV4cGVyaWVuY2UgaW1wbGVtZW50aW5nIHRoaXMuCisKKyAgICAgICAgVGhpcyBjb3VsZCBz
dXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6OkV4Y2VwdGlvbk9yLgorCisgICAgICAgIElt
cGxlbWVudCBXVEY6OkV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQ1MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRXhwZWN0ZWQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I8PCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmZvbzo6Zm9vKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmZvbzo6fmZvbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpmb286Om9wZXJhdG9yPT0p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6b3BlcmF0b3I8PCk6CisKIDIwMTYtMTEtMTAgIE1p
Z3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBB
ZGRlZCBteXNlbGYgdG8gdGhlIGxpc3Qgb2YgY29tbWl0dGVycy4KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtl
TGlzdHMudHh0CmluZGV4IGZiNjIyYzUuLjg5N2IwZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dApAQCAtNTAsNiArNTAsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RhdGVNYXRoLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9EZXF1ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvRW51bVRyYWl0cy5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
RXhwZWN0ZWQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hDb3Vu
dGVkU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoTWFwLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcApAQCAtNjEs
NiArNjIsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL01lZGlhVGltZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvTWV0YUFsbG9jYXRvci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
TmFrZWRQdHIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL09wdGlvbmFs
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9PcHRpb25TZXQuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMGIyNTFiYS4uNzIxNWUyNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ0OSw2ICs0NDksNyBAQAogCQlBRDU3QUMyMDFEQTc0NjUwMDBGRjFCREUgLyogRGlkUmVt
b3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1N0FDMUUxREE3NDY0RDAwRkYxQkRF
IC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcCAqLzsg
fTsKIAkJQUQ1N0FDMjExREE3NDY1QjAwRkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFy
Y2h5SW5QYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUQ1N0FDMUYxREE3NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhp
ZWFyY2h5SW5QYWdlQ2FjaGUuY3BwICovOyB9OwogCQlBRDU3QUMyMjFEQTc0NjZFMDBGRjFCREUg
LyogbWFueS1pZnJhbWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1N0FDMUQxREE3NDYzODAwRkYxQkRFIC8qIG1hbnktaWZyYW1l
cy5odG1sICovOyB9OworCQlBRDdDNDM0RDFERDJBNTRFMDAyNjg4OEIgLyogRXhwZWN0ZWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3QzQzNEMx
REQyQTU0NzAwMjY4ODhCIC8qIEV4cGVjdGVkLmNwcCAqLzsgfTsKIAkJQURDRUJCQTYxRDlBRTIy
OTAwMkUyODNBIC8qIENvbnN1bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQURDRUJCQTUxRDk5RDRDRjAwMkUyODNBIC8qIENvbnN1bWUuY3BwICov
OyB9OwogCQlCNTVBRDFENTE3OUYzQjMwMDBBQzE0OTQgLyogUHJldmVudEltYWdlTG9hZFdpdGhB
dXRvUmVzaXppbmdfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI1NUFEMUQzMTc5RjNBQkYwMEFDMTQ5NCAvKiBQcmV2ZW50SW1hZ2VMb2Fk
V2l0aEF1dG9SZXNpemluZ19CdW5kbGUuY3BwICovOyB9OwogCQlCNTVGMTFCNzE1MTdEMDMzMDA5
MTU5MTYgLyogYXR0cmlidXRlZFN0cmluZ0N1c3RvbUZvbnQuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVGMTFCMDE1MTdBMkM0MDA5
MTU5MTYgLyogYXR0cmlidXRlZFN0cmluZ0N1c3RvbUZvbnQuaHRtbCAqLzsgfTsKQEAgLTExMDIs
NiArMTEwMyw3IEBACiAJCUFENTdBQzFEMURBNzQ2MzgwMEZGMUJERSAvKiBtYW55LWlmcmFtZXMu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJtYW55LWlmcmFtZXMuaHRtbCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENTdBQzFFMURBNzQ2NEQwMEZGMUJERSAvKiBE
aWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlX0J1bmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUlu
UGFnZUNhY2hlX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENTdB
QzFGMURBNzQ2NEQwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNh
Y2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpZFJlbW92ZUZy
YW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDdDNDM0QzFERDJBNTQ3MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwZWN0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRENFQkJBNTFEOTlENENGMDAyRTI4M0EgLyogQ29uc3VtZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjQwMzlGOUMxNUU2RDhCMzAwNzI1NUQ2IC8qIE1hdGhFeHRy
YXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aEV4dHJhcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUFEMUQxMTc5RjMzNjYwMEFDMTQ5
NCAvKiBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nLm1tOyBwYXRoID0gV2ViS2l0
Mk9iakMvUHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmcubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNzg3LDYgKzE3ODksNyBAQAogCQlCQzkwOTY0NjEyNTU2MTg5MDAw
ODM3NTYgLyogV1RGICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlBRDdDNDM0QzFERDJBNTQ3MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3BwICovLAogCQkJCUMw
OTkxQzRGMTQzQzdENjgwMDc5OThGMiAvKiBjZiAqLywKIAkJCQk3Q0JCQTA3NTE5QkI4QTA5MDBC
QkYwMjUgLyogZGFyd2luICovLAogCQkJCUJDMDI5QjFBMTQ4NkIyMzgwMDgxN0RBOSAvKiBucyAq
LywKQEAgLTIzMTcsNiArMjMyMCw3IEBACiAJCQkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8q
IE5ha2VkUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNG
MyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRENFQkJBNjFEOUFFMjI5MDAy
RTI4M0EgLyogQ29uc3VtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRDdDNDM0RDFERDJBNTRF
MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBB
NTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAvKiBSZWRCbGFja1RyZWUuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2YzM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcApAQCAtMCwwICsxLDQzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gc3RkOjpvc3RyZWFtJiBvcGVy
YXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB1KQorewor
ICAgIHJldHVybiBvcyA8PCB1LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBFPiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIGUpCit7CisgICAgaWYgKGUuaGFzVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
IG9zIDw8IGUudmFsdWUoKTsKKyAgICByZXR1cm4gb3MgPDwgZS5lcnJvcigpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgRT4gc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3Ms
IGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+JiBlKQoreworICAgIGlmIChlLmhhc1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBvcyA8PCAiIjsKKyAgICByZXR1cm4gb3MgPDwgZS5lcnJvcigpOworfQor
Cit9CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY29uc3RleHByIGNvbnN0IGNoYXIq
IG9vcHMgPSAib29wcyI7Citjb25zdGV4cHIgY29uc3QgY2hhciogZm9vZiA9ICJmb29mIjsKKwor
VEVTVChXVEZfRXhwZWN0ZWQsIFVuZXhwZWN0ZWRUeXBlKQoreworICAgIHsKKyAgICAgICAgYXV0
byB1ID0gVW5leHBlY3RlZFR5cGU8aW50Pig0Mik7CisgICAgICAgIEVYUEVDVF9FUSh1LnZhbHVl
KCksIDQyKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gYyA9IG1ha2VVbmV4cGVjdGVkKDQyKTsK
KyAgICAgICAgRVhQRUNUX0VRKGMudmFsdWUoKSwgNDIpOworICAgICAgICBFWFBFQ1RfRVEodSwg
Yyk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1ICE9IGMpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
dSA8IGMpOworICAgICAgICBFWFBFQ1RfRkFMU0UodSA+IGMpOworICAgICAgICBFWFBFQ1RfTEUo
dSwgYyk7CisgICAgICAgIEVYUEVDVF9HRSh1LCBjKTsKKyAgICB9CisgICAgeworICAgICAgICBh
dXRvIGMgPSBtYWtlVW5leHBlY3RlZChvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGMudmFsdWUo
KSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBzID0gbWFrZVVuZXhwZWN0ZWQo
c3RkOjpzdHJpbmcob29wcykpOworICAgICAgICBFWFBFQ1RfRVEocy52YWx1ZSgpLCBvb3BzKTsK
KyAgICB9CisgICAgeworICAgICAgICBjb25zdGV4cHIgYXV0byBzMCA9IG1ha2VVbmV4cGVjdGVk
KG9vcHMpOworICAgICAgICBjb25zdGV4cHIgYXV0byBzMShzMCk7CisgICAgICAgIEVYUEVDVF9F
UShzMCwgczEpOworICAgIH0KK30KKworc3RydWN0IGZvbyB7CisgICAgaW50IHY7CisgICAgZm9v
KGludCB2KQorICAgICAgICA6IHYodikKKyAgICB7IH0KKyAgICB+Zm9vKCkgeyB9CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGZvbyYgeSkgY29uc3QgeyByZXR1cm4gdiA9PSB5LnY7IH0KKyAg
ICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IGZv
byYpOworfTsKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25z
dCBmb28mIGYpIHsgcmV0dXJuIG9zIDw8IGYudjsgfQorCitURVNUKFdURl9FeHBlY3RlZCwgZXhw
ZWN0ZWQpCit7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGNvbnN0IGNoYXIqPiBFOworICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25zdCB2b2lkKj4gRVY7CisgICAgdHlwZWRlZiBFeHBl
Y3RlZDxmb28sIGNvbnN0IGNoYXIqPiBGb29DaGFyOworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8Zm9v
LCBzdGQ6OnN0cmluZz4gRm9vU3RyaW5nOworICAgIHsKKyAgICAgICAgYXV0byBlID0gRSgpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS52
YWx1ZSgpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMCk7CisgICAg
fQorICAgIHsKKyAgICAgICAgY29uc3RleHByIEUgZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZS5o
YXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWUoKSwgMCk7CisgICAgICAgIEVY
UEVDVF9FUShlLnZhbHVlT3IoMy4xNCksIDApOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
ZSA9IEUoNDIpOworICAgICAgICBFWFBFQ1RfVFJVRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBF
WFBFQ1RfRVEoZS52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlT3IoMy4x
NCksIDQyKTsKKyAgICAgICAgY29uc3QgYXV0byBlMihlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
ZTIuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlMi52YWx1ZSgpLCA0Mik7CisgICAg
ICAgIEVYUEVDVF9FUShlMi52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgICAgIEUgZTM7CisgICAg
ICAgIGUzID0gZTI7CisgICAgICAgIEVYUEVDVF9UUlVFKGUzLmhhc1ZhbHVlKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoZTMudmFsdWUoKSwgNDIpOworICAgICAgICBFWFBFQ1RfRVEoZTMudmFsdWVP
cigzLjE0KSwgNDIpOworICAgICAgICBjb25zdCBFIGU0ID0gZTI7CisgICAgICAgIEVYUEVDVF9U
UlVFKGU0Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZTQudmFsdWUoKSwgNDIpOwor
ICAgICAgICBFWFBFQ1RfRVEoZTQudmFsdWVPcigzLjE0KSwgNDIpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGNvbnN0ZXhwciBFIGMoNDIpOworICAgICAgICBFWFBFQ1RfVFJVRShjLmhhc1ZhbHVl
KCkpOworICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9F
UShjLnZhbHVlT3IoMy4xNCksIDQyKTsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IGF1dG8gYzIo
Yyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGMyLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoYzIudmFsdWUoKSwgNDIpOworICAgICAgICBFWFBFQ1RfRVEoYzIudmFsdWVPcigzLjE0KSwg
NDIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdSA9IEUobWFrZVVuZXhwZWN0ZWQob29w
cykpOworICAgICAgICBFWFBFQ1RfRkFMU0UodS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1LmdldFVuZXhwZWN0ZWQo
KS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKHUudmFsdWVPcigzLjE0KSwgMyk7
CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1diA9IEVWKG1ha2VVbmV4cGVjdGVkKG9vcHMp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHV2Lmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
RVEodXYuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1di5nZXRVbmV4cGVjdGVk
KCkudmFsdWUoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1di52YWx1ZU9yKDMuMTQpLCAz
KTsKKyAgICB9CisgICAgeworICAgICAgICBFIGUgPSBtYWtlVW5leHBlY3RlZChvb3BzKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLmVy
cm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUo
KSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlT3IoMy4xNCksIDMpOworICAgIH0K
KyAgICB7CisgICAgICAgIGF1dG8gZSA9IG1ha2VFeHBlY3RlZEZyb21FcnJvcjxpbnQsIGNvbnN0
IGNoYXIqPihvb3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRV
bmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlT3Io
My4xNCksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gZSA9IG1ha2VFeHBlY3RlZEZy
b21FcnJvcjxpbnQsIGNvbnN0IHZvaWQqPihvb3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUu
aGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAg
ICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgICAgIEVY
UEVDVF9FUShlLnZhbHVlT3IoMy4xNCksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
ZSA9IEZvb0NoYXIoNDIpOworICAgICAgICBFWFBFQ1RfRVEoZS0+diwgNDIpOworICAgICAgICBF
WFBFQ1RfRVEoKCplKS52LCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlMCA9IEUo
NDIpOworICAgICAgICBhdXRvIGUxID0gRSgxMDI0KTsKKyAgICAgICAgc3dhcChlMCwgZTEpOwor
ICAgICAgICBFWFBFQ1RfRVEoZTAudmFsdWUoKSwgMTAyNCk7CisgICAgICAgIEVYUEVDVF9FUShl
MS52YWx1ZSgpLCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlMCA9IEUobWFrZVVu
ZXhwZWN0ZWQob29wcykpOworICAgICAgICBhdXRvIGUxID0gRShtYWtlVW5leHBlY3RlZChmb29m
KSk7CisgICAgICAgIHN3YXAoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLmVycm9yKCks
IGZvb2YpOworICAgICAgICBFWFBFQ1RfRVEoZTEuZXJyb3IoKSwgb29wcyk7CisgICAgfQorICAg
IHsKKyAgICAgICAgRm9vQ2hhciBjKGZvbyg0MikpOworICAgICAgICBFWFBFQ1RfRVEoYy0+diwg
NDIpOworICAgICAgICBFWFBFQ1RfRVEoKCpjKS52LCA0Mik7CisgICAgfQorICAgIHsKKyAgICAg
ICAgRm9vU3RyaW5nIHMoZm9vKDQyKSk7CisgICAgICAgIEVYUEVDVF9FUShzLT52LCA0Mik7Cisg
ICAgICAgIEVYUEVDVF9FUSgoKnMpLnYsIDQyKTsKKyAgICAgICAgY29uc3QgY2hhciogbWVzc2Fn
ZSA9ICJ2ZXJ5IGxvbmcgZmFpbHVyZSBzdHJpbmcsIGZvciB2ZXJ5IGJhZCBmYWlsdXJlIGNhc2Vz
IjsKKyAgICAgICAgRm9vU3RyaW5nIGUwKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNz
YWdlKSk7CisgICAgICAgIEZvb1N0cmluZyBlMShtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4o
bWVzc2FnZSkpOworICAgICAgICBGb29TdHJpbmcgZTIobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJp
bmc+KHN0ZDo6c3RyaW5nKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLmVycm9yKCksIHN0ZDo6
c3RyaW5nKG1lc3NhZ2UpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCBlMSk7CisgICAgICAgIEVY
UEVDVF9ORShlMCwgZTIpOworICAgICAgICBGb29TdHJpbmcqIGU0ID0gbmV3IEZvb1N0cmluZyht
YWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4obWVzc2FnZSkpOworICAgICAgICBGb29TdHJpbmcq
IGU1ID0gbmV3IEZvb1N0cmluZygqZTQpOworICAgICAgICBFWFBFQ1RfRVEoZTAsICplNCk7Cisg
ICAgICAgIGRlbGV0ZSBlNDsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCAqZTUpOworICAgICAgICBk
ZWxldGUgZTU7CisgICAgfQorfQorCitURVNUKFdURl9FeHBlY3RlZCwgRXhwZWN0ZWRfdm9pZCkK
K3sKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIGNvbnN0IGNoYXIqPiBFOworICAgIHR5cGVk
ZWYgRXhwZWN0ZWQ8dm9pZCwgY29uc3Qgdm9pZCo+IEVWOworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8
dm9pZCwgc3RkOjpzdHJpbmc+IFN0cmluZzsKKyAgICB7CisgICAgICAgIGF1dG8gZSA9IEUoKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgY29uc3QgYXV0byBl
MihlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTIuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVD
VF9FUShlLCBlMik7CisgICAgICAgIEUgZTM7CisgICAgICAgIGUzID0gZTI7CisgICAgICAgIEVY
UEVDVF9UUlVFKGUzLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZSwgZTMpOworICAg
IH0KKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBFIGM7CisgICAgICAgIEVYUEVDVF9UUlVFKGMu
aGFzVmFsdWUoKSk7CisgICAgICAgIGNvbnN0ZXhwciBjb25zdCBhdXRvIGMyKGMpOworICAgICAg
ICBFWFBFQ1RfVFJVRShjMi5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGMsIGMyKTsK
KyAgICB9CisgICAgeworICAgICAgICBhdXRvIHUgPSBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1
LmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEodS5nZXRVbmV4cGVjdGVkKCkudmFs
dWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1diA9IEVWKG1ha2VVbmV4
cGVjdGVkKG9vcHMpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHV2Lmhhc1ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfRVEodXYuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUSh1di5n
ZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgRSBl
ID0gbWFrZVVuZXhwZWN0ZWQob29wcyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVl
KCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNU
X0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGF1dG8gZSA9IG1ha2VFeHBlY3RlZEZyb21FcnJvcjx2b2lkLCBjb25zdCBjaGFyKj4ob29w
cyk7CisgICAgICAgIEVYUEVDVF9GQUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoZS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgp
LnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gZSA9IG1ha2VFeHBl
Y3RlZEZyb21FcnJvcjx2b2lkLCBjb25zdCB2b2lkKj4ob29wcyk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoZS5lcnJvcigpLCBvb3BzKTsK
KyAgICAgICAgRVhQRUNUX0VRKGUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAg
IH0KKyAgICB7CisgICAgICAgIGF1dG8gZTAgPSBFKCk7CisgICAgICAgIGF1dG8gZTEgPSBFKCk7
CisgICAgICAgIHN3YXAoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCBlMSk7CisgICAg
fQorICAgIHsKKyAgICAgICAgYXV0byBlMCA9IEUobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAg
ICAgICBhdXRvIGUxID0gRShtYWtlVW5leHBlY3RlZChmb29mKSk7CisgICAgICAgIHN3YXAoZTAs
IGUxKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLmVycm9yKCksIGZvb2YpOworICAgICAgICBFWFBF
Q1RfRVEoZTEuZXJyb3IoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciogbWVzc2FnZSA9ICJ2ZXJ5IGxvbmcgZmFpbHVyZSBzdHJpbmcsIGZvciB2ZXJ5IGJhZCBmYWls
dXJlIGNhc2VzIjsKKyAgICAgICAgU3RyaW5nIGUwKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5n
PihtZXNzYWdlKSk7CisgICAgICAgIFN0cmluZyBlMShtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmlu
Zz4obWVzc2FnZSkpOworICAgICAgICBTdHJpbmcgZTIobWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJp
bmc+KHN0ZDo6c3RyaW5nKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLmVycm9yKCksIHN0ZDo6
c3RyaW5nKG1lc3NhZ2UpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCBlMSk7CisgICAgICAgIEVY
UEVDVF9ORShlMCwgZTIpOworICAgICAgICBTdHJpbmcqIGU0ID0gbmV3IFN0cmluZyhtYWtlVW5l
eHBlY3RlZDxzdGQ6OnN0cmluZz4obWVzc2FnZSkpOworICAgICAgICBTdHJpbmcqIGU1ID0gbmV3
IFN0cmluZygqZTQpOworICAgICAgICBFWFBFQ1RfRVEoZTAsICplNCk7CisgICAgICAgIGRlbGV0
ZSBlNDsKKyAgICAgICAgRVhQRUNUX0VRKGUwLCAqZTUpOworICAgICAgICBkZWxldGUgZTU7Cisg
ICAgfQorfQorCitURVNUKFdURl9FeHBlY3RlZCwgY29tcGFyaXNvbikKK3sKKyAgICB0eXBlZGVm
IEV4cGVjdGVkPGludCwgY29uc3QgY2hhcio+IEV4OworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50
LCBpbnQ+IEVyOworCisgICAgLy8gVHdvIEV4cGVjdGVkLCBubyBlcnJvcnMuCisgICAgRVhQRUNU
X0VRKEV4KDQyKSwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfTkUoRXgoNDIpLCBFeCgxMDI0KSk7Cisg
ICAgRVhQRUNUX0xUKEV4KDQyKSwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9HVChFeCgxMDI0KSwg
RXgoNDIpKTsKKyAgICBFWFBFQ1RfTEUoRXgoNDIpLCBFeCg0MikpOworICAgIEVYUEVDVF9HRShF
eCg0MiksIEV4KDQyKSk7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgRXgoMTAyNCkpOworICAgIEVY
UEVDVF9HRShFeCgxMDI0KSwgRXgoNDIpKTsKKworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPT0g
RXgoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgIT0gRXgoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgoMTAyNCkgPCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPiBF
eCgxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDEwMjQpIDwgRXgoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgoNDIpID49IEV4KDEwMjQpKTsKKworICAgIC8vIFR3byBFeHBlY3RlZCwgaGFs
ZiBlcnJvcnMuCisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSBFeChtYWtlVW5leHBlY3RlZChv
b3BzKSkpOworICAgIEVYUEVDVF9ORShFeCg0MiksIEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7
CisgICAgRVhQRUNUX0xUKEV4KDQyKSwgRXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRXgoNDIpID4gRXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBF
Q1RfTEUoRXgoNDIpLCBFeChtYWtlVW5leHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9GQUxT
RShFeCg0MikgPj0gRXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKworICAgIEVYUEVDVF9GQUxT
RShFeChtYWtlVW5leHBlY3RlZChvb3BzKSkgPT0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfTkUoRXgo
bWFrZVVuZXhwZWN0ZWQob29wcykpLCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeChtYWtl
VW5leHBlY3RlZChvb3BzKSkgPCBFeCg0MikpOworICAgIEVYUEVDVF9HVChFeChtYWtlVW5leHBl
Y3RlZChvb3BzKSksIEV4KDQyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVk
KG9vcHMpKSA8PSBFeCg0MikpOworICAgIEVYUEVDVF9HRShFeChtYWtlVW5leHBlY3RlZChvb3Bz
KSksIEV4KDQyKSk7CisKKyAgICAvLyBUd28gRXhwZWN0ZWQsIGFsbCBlcnJvcnMuCisgICAgRVhQ
RUNUX0VRKEVyKDQyKSwgRXIoNDIpKTsKKyAgICBFWFBFQ1RfTkUoRXIoNDIpLCBFcigxMDI0KSk7
CisgICAgRVhQRUNUX0xUKEVyKDQyKSwgRXIoMTAyNCkpOworICAgIEVYUEVDVF9HVChFcigxMDI0
KSwgRXIoNDIpKTsKKyAgICBFWFBFQ1RfTEUoRXIoNDIpLCBFcig0MikpOworICAgIEVYUEVDVF9H
RShFcig0MiksIEVyKDQyKSk7CisgICAgRVhQRUNUX0xFKEVyKDQyKSwgRXIoMTAyNCkpOworICAg
IEVYUEVDVF9HRShFcigxMDI0KSwgRXIoNDIpKTsKKworICAgIEVYUEVDVF9GQUxTRShFcig0Mikg
PT0gRXIoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRShFcig0MikgIT0gRXIoNDIpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRXIoMTAyNCkgPCBFcig0MikpOworICAgIEVYUEVDVF9GQUxTRShFcig0Mikg
PiBFcigxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNFKEVyKDEwMjQpIDw9IEVyKDQyKSk7CisgICAg
RVhQRUNUX0ZBTFNFKEVyKDQyKSA+PSBFcigxMDI0KSk7CisKKyAgICAvLyBPbmUgRXhwZWN0ZWQs
IG9uZSB2YWx1ZS4KKyAgICBFWFBFQ1RfRVEoRXgoNDIpLCA0Mik7CisgICAgRVhQRUNUX05FKEV4
KDQyKSwgMCk7CisgICAgRVhQRUNUX0xUKEV4KDQyKSwgMTAyNCk7CisgICAgRVhQRUNUX0dUKEV4
KDEwMjQpLCA0Mik7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgNDIpOworICAgIEVYUEVDVF9HRShF
eCg0MiksIDQyKTsKKyAgICBFWFBFQ1RfTEUoRXgoNDIpLCAxMDI0KTsKKyAgICBFWFBFQ1RfR0Uo
RXgoMTAyNCksIDQyKTsKKworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPT0gMCk7CisgICAgRVhQ
RUNUX0ZBTFNFKEV4KDQyKSAhPSA0Mik7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDEwMjQpIDwgNDIp
OworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPiAxMDI0KTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgo
MTAyNCkgPCA0Mik7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+PSAxMDI0KTsKKworICAgIEVY
UEVDVF9FUSg0MiwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfTkUoNDIsIEV4KDEwMjQpKTsKKyAgICBF
WFBFQ1RfTFQoNDIsIEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfR1QoMTAyNCwgRXgoNDIpKTsKKyAg
ICBFWFBFQ1RfTEUoNDIsIEV4KDQyKSk7CisgICAgRVhQRUNUX0dFKDQyLCBFeCg0MikpOworICAg
IEVYUEVDVF9MRSg0MiwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9HRSgxMDI0LCBFeCg0MikpOwor
CisgICAgRVhQRUNUX0ZBTFNFKDQyID09IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoNDIg
IT0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoMTAyNCA8IEV4KDQyKSk7CisgICAgRVhQRUNU
X0ZBTFNFKDQyID4gRXgoMTAyNCkpOworICAgIEVYUEVDVF9GQUxTRSgxMDI0IDw9IEV4KDQyKSk7
CisgICAgRVhQRUNUX0ZBTFNFKDQyID49IEV4KDEwMjQpKTsKKworICAgIC8vIE9uZSBFeHBlY3Rl
ZCwgb25lIHVuZXhwZWN0ZWQuCisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSBtYWtlVW5leHBl
Y3RlZChvb3BzKSk7CisgICAgRVhQRUNUX05FKEV4KDQyKSwgbWFrZVVuZXhwZWN0ZWQob29wcykp
OworICAgIEVYUEVDVF9MVChFeCg0MiksIG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgoNDIpID4gbWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgIEVYUEVDVF9MRShF
eCg0MiksIG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpID49
IG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKworICAgIEVYUEVDVF9GQUxTRShtYWtlVW5leHBlY3Rl
ZChvb3BzKSA9PSBFeCg0MikpOworICAgIEVYUEVDVF9ORShtYWtlVW5leHBlY3RlZChvb3BzKSwg
RXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UobWFrZVVuZXhwZWN0ZWQob29wcykgPCBFeCg0Mikp
OworICAgIEVYUEVDVF9HVChtYWtlVW5leHBlY3RlZChvb3BzKSwgRXgoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UobWFrZVVuZXhwZWN0ZWQob29wcykgPD0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfR0Uo
bWFrZVVuZXhwZWN0ZWQob29wcyksIEV4KDQyKSk7Cit9CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBo
YXNoKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25zdCBjaGFyKj4gRTsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8RSwgaW50PiBtOworICAgIG0uaW5zZXJ0KHsgRSg0MiksIDQyIH0p
OworICAgIG0uaW5zZXJ0KHsgRShtYWtlVW5leHBlY3RlZChvb3BzKSksIDUgfSk7CisgICAgbS5p
bnNlcnQoeyBFKDEwMjQpLCAxMDI0IH0pOworICAgIG0uaW5zZXJ0KHsgRShtYWtlVW5leHBlY3Rl
ZChmb29mKSksIDB4ZjAwZiB9KTsKKyAgICBFWFBFQ1RfRVEobVtFKDQyKV0sIDQyKTsKKyAgICBF
WFBFQ1RfRVEobVtFKDEwMjQpXSwgMTAyNCk7CisgICAgRVhQRUNUX0VRKG1bRShtYWtlVW5leHBl
Y3RlZChvb3BzKSldLCA1KTsKKyAgICBFWFBFQ1RfRVEobVtFKG1ha2VVbmV4cGVjdGVkKGZvb2Yp
KV0sIDB4ZjAwZik7Cit9CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBoYXNoX3ZvaWQpCit7CisgICAg
dHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBjb25zdCBjaGFyKj4gRTsKKyAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8RSwgaW50PiBtOworICAgIG0uaW5zZXJ0KHsgRSgpLCA0MiB9KTsKKyAgICBtLmluc2Vy
dCh7IEUobWFrZVVuZXhwZWN0ZWQob29wcykpLCA1IH0pOworICAgIG0uaW5zZXJ0KHsgRShtYWtl
VW5leHBlY3RlZChmb29mKSksIDB4ZjAwZiB9KTsKKyAgICBFWFBFQ1RfRVEobVtFKCldLCA0Mik7
CisgICAgRVhQRUNUX0VRKG1bRShtYWtlVW5leHBlY3RlZChvb3BzKSldLCA1KTsKKyAgICBFWFBF
Q1RfRVEobVtFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKV0sIDB4ZjAwZik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJraXRBUEkKLS0gCjIuOS4zCgo=
</data>
<flag name="review"
          id="317263"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="317248"
          type_id="3"
          status="-"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294670</attachid>
            <date>2016-11-13 10:56:26 -0800</date>
            <delta_ts>2016-11-13 11:31:45 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-Implement-WTF-Expected.patch</filename>
            <type>text/plain</type>
            <size>52201</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5MjdmNmFkNzExNGZhNDk5MTI1MGVjYWEwZTVlZmI3NzhkZGE1YjVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDggTm92IDIwMTYgMTc6MjM6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1l
bnQgV1RGOjpFeHBlY3RlZAoKc3RkOjpleHBlY3RlZCBpc24ndCBpbiBDKysxNywgYW5kIG1heSBi
ZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKY29tcGxlbWVudCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0
aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQKdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xl
IGV4cGVjdGVkIHJlc3VsdCBidXQgY291bGQgYWxzbyBjb250YWluIGFuCmVycm9yLgoKVGhpcyB3
b3VsZCBiZSB1c2VmdWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCgpV
c2luZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYWxsb3cgdXMgdG8gcHJvdmlkZSBmZWVkYmFj
ayB0byB0aGUKc3RhbmRhcmRzIGNvbW1pdHRlZSBhbmQgZ3VpZGUgc3RkOjpleHBlY3RlZCdzIGRl
c2lnbiBiZWZvcmUgaXQKZ2V0cyBzdGFuZGFyZGl6ZWQuIEkndmUgYWxyZWFkeSBzZW50IGEgYnVu
Y2ggb2YgZmVlZGJhY2sgdG8gdGhlCmF1dGhvciBiYXNlZCBvbiBteSBleHBlcmllbmNlIGltcGxl
bWVudGluZyB0aGlzLgoKVGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6
OkV4Y2VwdGlvbk9yLgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDUyICsrKwogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiAgICAgICAgICAgfCAgIDQgKwogU291cmNlL1dURi93dGYvQ29tcGlsZXIuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIFNvdXJjZS9XVEYvd3RmL0V4cGVjdGVkLmgg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDQyICsrKysrKysrKysrKysrKysrKysKIFRvb2xz
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMxICsrCiBU
b29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybU1hYy5jbWFrZSAgICAgICAgICAgICB8ICAgMiAr
LQogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgfCAg
IDIgKwogLi4uL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAg
fCAgIDQgKwogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRXhwZWN0ZWQuY3BwICAgICAg
ICAgfCA0NzAgKysrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDEwMjEgaW5z
ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RG
L3d0Zi9FeHBlY3RlZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRXhwZWN0ZWQuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA1MWQ1MjRmLi45ZWMyN2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU1IEBACisyMDE2LTExLTEwICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgV1RGOjpFeHBlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WXVzdWtlIFN1enVraS4KKworICAgICAgICBzdGQ6OmV4cGVjdGVkIGlzbid0IGluIEMrKzE3LCBh
bmQgbWF5IGJlIGluIEMrKzIwLiBJdCdzIGEgbmljZQorICAgICAgICBjb21wbGVtZW50IHRvIHN0
ZDo6YW55IC8gc3RkOjpvcHRpb25hbCBiZWNhdXNlIGl0J3MgYSB0eXBlLXRhZ2dlZAorICAgICAg
ICB1bmlvbiB3aGljaCBoYXMgYSBzaW5nbGUgZXhwZWN0ZWQgcmVzdWx0IGJ1dCBjb3VsZCBhbHNv
IGNvbnRhaW4gYW4KKyAgICAgICAgZXJyb3IuCisKKyAgICAgICAgVGhpcyB3b3VsZCBiZSB1c2Vm
dWwgaW4gdGhlIFdlYkFzc2VtYmx5IHBhcnNlciwgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgVXNp
bmcgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGFsbG93IHVzIHRvIHByb3ZpZGUgZmVlZGJhY2sg
dG8gdGhlCisgICAgICAgIHN0YW5kYXJkcyBjb21taXR0ZWUgYW5kIGd1aWRlIHN0ZDo6ZXhwZWN0
ZWQncyBkZXNpZ24gYmVmb3JlIGl0CisgICAgICAgIGdldHMgc3RhbmRhcmRpemVkLiBJJ3ZlIGFs
cmVhZHkgc2VudCBhIGJ1bmNoIG9mIGZlZWRiYWNrIHRvIHRoZQorICAgICAgICBhdXRob3IgYmFz
ZWQgb24gbXkgZXhwZXJpZW5jZSBpbXBsZW1lbnRpbmcgdGhpcy4KKworICAgICAgICBUaGlzIGNv
dWxkIHN1cHBsZW1lbnQgV1RGOjpFaXRoZXIgYW5kIFdURjo6RXhjZXB0aW9uT3IuCisKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ29tcGls
ZXIuaDogQWRkIFJFTEFYRURfQ09OU1RFWFBSCisgICAgICAgICogd3RmL0V4cGVjdGVkLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpVbmV4cGVjdGVkVHlwZTo6VW5leHBlY3RlZFR5cGUpOgorICAg
ICAgICAoV1RGOjpVbmV4cGVjdGVkVHlwZTo6dmFsdWUpOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
PCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6bWFrZVVuZXhwZWN0
ZWQpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZERldGFpbDo6VGhyb3cpOgorICAgICAgICAoV1RG
OjpFeHBlY3RlZERldGFpbDo6Q29uc3RleHByQmFzZTo6Q29uc3RleHByQmFzZSk6CisgICAgICAg
IChXVEY6OkV4cGVjdGVkRGV0YWlsOjpCYXNlOjpCYXNlKToKKyAgICAgICAgKFdURjo6RXhwZWN0
ZWREZXRhaWw6OkJhc2U6On5CYXNlKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6OkV4cGVjdGVk
KToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkV4
cGVjdGVkOjpzd2FwKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6Om9wZXJhdG9yLT4pOgorICAg
ICAgICAoV1RGOjpFeHBlY3RlZDo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6RXhwZWN0ZWQ6
Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6aGFzVmFsdWUpOgorICAg
ICAgICAoV1RGOjpFeHBlY3RlZDo6dmFsdWUpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6ZXJy
b3IpOgorICAgICAgICAoV1RGOjpFeHBlY3RlZDo6Z2V0VW5leHBlY3RlZCk6CisgICAgICAgIChX
VEY6OkV4cGVjdGVkOjp2YWx1ZU9yKToKKyAgICAgICAgKFdURjo6c3dhcCk6CisgICAgICAgIChX
VEY6Om1ha2VFeHBlY3RlZCk6CisgICAgICAgIChXVEY6Om1ha2VFeHBlY3RlZEZyb21FcnJvcik6
CisKIDIwMTYtMTEtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBBbGxvdyBtdXRhYmxlIGxhbWJkYXMgaW4gSGFzaE1hcDo6ZW5zdXJlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNjYyOGM1Li5mMDU3
OTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyOCw2
ICszMjgsNyBAQAogCQlBOEE0NzQ4NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3
QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi87IH07CiAJCUE4QTQ3NDg3
MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
VGhyZWFkRGF0YS5oICovOyB9OwogCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzQ4
QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi87IH07CisJCUFEN0M0MzRCMUREMkE0QTcw
MDI2ODg4QiAvKiBFeHBlY3RlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQ3QzQzNEExREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi87IH07
CiAJCUIzOEZEN0JEMTY4OTUzRTgwMDY1Qzk2OSAvKiBGZWF0dXJlRGVmaW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjM4RkQ3QkMxNjg5NTNFODAw
NjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi87IH07CiAJCUM0RjhBOTM3MTlDNjVFQjQwMEIy
QjE1RCAvKiBTdG9wd2F0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCAqLzsgfTsK
IAkJQzhCMEUxQTFFMDFBNDg2RUI5NUUwRDExIC8qIEluZGV4U2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM3RTFEN0RCRDg0QUMzOEZBRTREMzQg
LyogSW5kZXhTZXQuaCAqLzsgfTsKQEAgLTY5NSw2ICs2OTYsNyBAQAogCQlBOEE0NzM3QTE1MUE4
MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXVEZUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGVGhyZWFkRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwZWN0ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBT
dG9wd2F0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTQ5N0FBMTU4NTdEMDMwMEI1QkMzMCAv
KiBNZWRpYVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVk
aWFUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0OCw2ICs4NTAsNyBA
QAogCQlBODc2REJENjE1MTgxNkU1MDBEQURCOTUgLyogd3RmICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBRDdDNDM0QTFERDJBNEE3MDAyNjg4OEIgLyog
RXhwZWN0ZWQuaCAqLywKIAkJCQkyQ0RFRDBGMDE4MTE1QzNGMDA0REJBNzAgLyogY2YgKi8sCiAJ
CQkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovLAogCQkJCUE4QTQ3MjgxMTUx
QTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLApAQCAtMTQ1Nyw2ICsxNDYwLDcgQEAKIAkJCQlBOEE0
NzQzRTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQ29uY2F0ZW5hdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDJDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdFeHRyYXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBRDdDNDM0QjFERDJBNEE3MDAyNjg4OEIgLyogRXhwZWN0ZWQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNo
RHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQxMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MjE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nT3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0NvbXBpbGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCmluZGV4
IDI4OGViNGEuLmJmZGU3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgK
KysrIGIvU291cmNlL1dURi93dGYvQ29tcGlsZXIuaApAQCAtNzIsNyArNzIsNyBAQAogI2VuZGlm
CiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYgLy8gZGVmaW5lZChfX2NsYW5nX18pCiAKIC8qIENP
TVBJTEVSKEdDQ19PUl9DTEFORykgLSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiBvciBDbGFuZyAq
LwogI2lmIGRlZmluZWQoX19HTlVDX18pCkBAIC0xNDQsNiArMTQ0LDIwIEBACiAjZGVmaW5lIFdU
Rl9DT01QSUxFUl9TVVBQT1JUU19FQUJJIDEKICNlbmRpZgogCisvKiBSRUxBWEVEX0NPTlNURVhQ
UiAqLworCisjaWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0ZXhwciA+
PSAyMDEzMDQKKyNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX1JFTEFYRURfQ09OU1RFWFBS
IDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUkVMQVhFRF9DT05TVEVYUFIpCisjaWYgQ09NUElM
RVJfU1VQUE9SVFMoUkVMQVhFRF9DT05TVEVYUFIpCisjZGVmaW5lIFJFTEFYRURfQ09OU1RFWFBS
IGNvbnN0ZXhwcgorI2Vsc2UKKyNkZWZpbmUgUkVMQVhFRF9DT05TVEVYUFIKKyNlbmRpZgorI2Vu
ZGlmCisKICNkZWZpbmUgQVNBTl9FTkFCTEVEIENPTVBJTEVSX0hBU19DTEFOR19GRUFUVVJFKGFk
ZHJlc3Nfc2FuaXRpemVyKQogCiAjaWYgQVNBTl9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9FeHBlY3RlZC5oIGIvU291cmNlL1dURi93dGYvRXhwZWN0ZWQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmUxYTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvRXhwZWN0ZWQuaApAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IFdURjo6RXhwZWN0ZWQgaXMgYmFzZWQgb24gc3RkOjpleHBlY3RlZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IGh0dHA6Ly93ZzIxLmxpbmsvcDAzMjNyMQorLy8gVGhlIHNwZWNpZmljYXRpb24gZXhwZWN0
cyB0byB0aHJvdy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgZXhjZXB0aW9u
cywgdXNlcyBSRUxFQVNFX0FTU0VSVCBpbnN0ZWFkLgorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxpbml0aWFsaXpl
cl9saXN0PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK2NsYXNzIFVuZXhwZWN0ZWRUeXBl
IHsKK3B1YmxpYzoKKyAgICBVbmV4cGVjdGVkVHlwZSgpID0gZGVsZXRlOworICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBVbmV4cGVjdGVkVHlwZShjb25zdCBFJiBlKSA6IHZhbChlKSB7IH0KKyAgICBj
b25zdGV4cHIgZXhwbGljaXQgVW5leHBlY3RlZFR5cGUoRSYmIGUpIDogdmFsKFdURk1vdmUoZSkp
IHsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBFJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZhbDsg
fQorICAgIFJFTEFYRURfQ09OU1RFWFBSIEUmIHZhbHVlKCkgeyByZXR1cm4gdmFsOyB9CisKK3By
aXZhdGU6CisgICAgRSB2YWw7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVj
dGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSA9PSByaHMudmFsdWUoKTsgfQor
dGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVW5leHBl
Y3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4g
bGhzLnZhbHVlKCkgIT0gcmhzLnZhbHVlKCk7IH0KK3RlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5l
eHBlY3RlZFR5cGU8RT4mIHJocykgeyByZXR1cm4gbGhzLnZhbHVlKCkgPCByaHMudmFsdWUoKTsg
fQordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBVbmV4
cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVy
biBsaHMudmFsdWUoKSA+IHJocy52YWx1ZSgpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBV
bmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSA8PSByaHMudmFsdWUo
KTsgfQordGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qg
VW5leHBlY3RlZFR5cGU8RT4mIGxocywgY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHJocykgeyBy
ZXR1cm4gbGhzLnZhbHVlKCkgPj0gcmhzLnZhbHVlKCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIEU+
IGNvbnN0ZXhwciBVbmV4cGVjdGVkVHlwZTxzdGQ6OmRlY2F5X3Q8RT4+IG1ha2VVbmV4cGVjdGVk
KEUmJiB2KSB7IHJldHVybiBVbmV4cGVjdGVkVHlwZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PEU+Ojp0
eXBlPihzdGQ6OmZvcndhcmQ8RT4odikpOyB9CisKK3N0cnVjdCBVbmV4cGVjdFRhZyB7CisgICAg
VW5leHBlY3RUYWcoKSA9IGRlbGV0ZTsKK307Citjb25zdGV4cHIgVW5leHBlY3RUYWcgVW5leHBl
Y3QgeyB9OworCituYW1lc3BhY2UgRXhwZWN0ZWREZXRhaWwgeworCisvLyBJbnZva2VkIHdoZXJl
IHN0ZDo6RXhwZWN0ZWQgd291bGQgaW5zdGVhZCB0aHJvdy4KK05PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBUaHJvdygpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitzdGF0
aWMgY29uc3RleHByIGVudW0gY2xhc3MgVmFsdWVUYWdUeXBlIHsgfSBWYWx1ZVRhZyB7IH07Citz
dGF0aWMgY29uc3RleHByIGVudW0gY2xhc3MgRXJyb3JUYWdUeXBlIHsgfSBFcnJvclRhZyB7IH07
CisKK3RlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4gdm9pZCBkZXN0cm95KFQmIHQpIHsg
fQordGVtcGxhdGU8Y2xhc3MgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSAmJiAoc3RkOjppc19jbGFzczxUPjo6dmFsdWUgfHwgc3Rk
Ojppc191bmlvbjxUPjo6dmFsdWUpPiogPSBudWxscHRyPiB2b2lkIGRlc3Ryb3koVCYgdCkgeyB0
Ln5UKCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+Cit1bmlvbiBDb25zdGV4cHJT
dG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5
cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5cGUgdmFsOworICAgIEVycm9yVHlwZSBl
cnI7CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoKSA6IGR1bW15KCkgeyB9CisgICAg
Y29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoVmFsdWVUYWdUeXBlKSA6IHZhbCgpIHsgfQorICAg
IGNvbnN0ZXhwciBDb25zdGV4cHJTdG9yYWdlKEVycm9yVGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAg
ICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShWYWx1ZVRhZ1R5cGUsIGNvbnN0IFZhbHVlVHlw
ZSYgdikgOiB2YWwodikgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoRXJyb3JU
YWdUeXBlLCBjb25zdCBFcnJvclR5cGUmIGUpIDogZXJyKGUpIHsgfQorICAgIH5Db25zdGV4cHJT
dG9yYWdlKCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+Cit1
bmlvbiBTdG9yYWdlIHsKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBF
cnJvclR5cGU7CisgICAgY2hhciBkdW1teTsKKyAgICBWYWx1ZVR5cGUgdmFsOworICAgIEVycm9y
VHlwZSBlcnI7CisgICAgY29uc3RleHByIFN0b3JhZ2UoKSA6IGR1bW15KCkgeyB9CisgICAgY29u
c3RleHByIFN0b3JhZ2UoVmFsdWVUYWdUeXBlKSA6IHZhbCgpIHsgfQorICAgIGNvbnN0ZXhwciBT
dG9yYWdlKEVycm9yVGFnVHlwZSkgOiBlcnIoKSB7IH0KKyAgICBjb25zdGV4cHIgU3RvcmFnZShW
YWx1ZVRhZ1R5cGUsIGNvbnN0IFZhbHVlVHlwZSYgdmFsKSA6IHZhbCh2YWwpIHsgfQorICAgIGNv
bnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSwgY29uc3QgRXJyb3JUeXBlJiBlcnIpIDogZXJy
KGVycikgeyB9CisgICAgflN0b3JhZ2UoKSB7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBFPgor
dW5pb24gQ29uc3RleHByU3RvcmFnZTx2b2lkLCBFPiB7CisgICAgdHlwZWRlZiB2b2lkIFZhbHVl
VHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOworICAgIGNoYXIgZHVtbXk7CisgICAgRXJy
b3JUeXBlIGVycjsKKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZSgpIDogZHVtbXkoKSB7
IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShWYWx1ZVRhZ1R5cGUpIDogZHVtbXko
KSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShFcnJvclRhZ1R5cGUpIDogZXJy
KCkgeyB9CisgICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoRXJyb3JUYWdUeXBlLCBjb25z
dCBFcnJvclR5cGUmIGUpIDogZXJyKGUpIHsgfQorICAgIH5Db25zdGV4cHJTdG9yYWdlKCkgPSBk
ZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIEU+Cit1bmlvbiBTdG9yYWdlPHZvaWQsIEU+
IHsKKyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7
CisgICAgY2hhciBkdW1teTsKKyAgICBFcnJvclR5cGUgZXJyOworICAgIGNvbnN0ZXhwciBTdG9y
YWdlKCkgOiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKFZhbHVlVGFnVHlwZSkg
OiBkdW1teSgpIHsgfQorICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSkgOiBlcnIo
KSB7IH0KKyAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUsIGNvbnN0IEVycm9yVHlw
ZSYgZXJyKSA6IGVycihlcnIpIHsgfQorICAgIH5TdG9yYWdlKCkgeyB9Cit9OworCit0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3N0cnVjdCBDb25zdGV4cHJCYXNlIHsKKyAgICB0eXBlZGVm
IFQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7CisgICAgQ29uc3RleHByU3Rv
cmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhhczsKKyAgICBjb25zdGV4
cHIgQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3RleHByIENv
bnN0ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyh0cnVlKSB7IH0KKyAg
ICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFz
KGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShWYWx1ZVRhZ1R5cGUgdGFn
LCBjb25zdCBWYWx1ZVR5cGUmIHZhbCkgOiBzKHRhZywgdmFsKSwgaGFzKHRydWUpIHsgfQorICAg
IGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKEVycm9yVGFnVHlwZSB0YWcsIGNvbnN0IEVycm9yVHlw
ZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFsc2UpIHsgfQorICAgIH5Db25zdGV4cHJCYXNl
KCkgPSBkZWZhdWx0OworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+CitzdHJ1Y3Qg
QmFzZSB7CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIEUgRXJyb3JUeXBl
OworICAgIFN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7CisgICAgYm9vbCBoYXM7Cisg
ICAgY29uc3RleHByIEJhc2UoKSA6IHMoKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBC
YXNlKFZhbHVlVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXModHJ1ZSkgeyB9CisgICAgY29uc3Rl
eHByIEJhc2UoRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxzZSkgeyB9CisgICAg
Y29uc3RleHByIEJhc2UoVmFsdWVUYWdUeXBlIHRhZywgY29uc3QgVmFsdWVUeXBlJiB2YWwpIDog
cyh0YWcsIHZhbCksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQmFzZShFcnJvclRhZ1R5
cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZhbHNlKSB7
IH0KKyAgICBCYXNlKGNvbnN0IEJhc2UmIG8pCisgICAgICAgIDogaGFzKG8uaGFzKQorICAgIHsK
KyAgICAgICAgaWYgKGhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy52YWwpIFZhbHVlVHlwZShv
LnMudmFsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgOjpuZXcgKCZzLmVycikgRXJyb3JU
eXBlKG8ucy5lcnIpOworICAgIH0KKyAgICBCYXNlKEJhc2UmJiBvKQorICAgICAgICA6IGhhcyhv
LmhhcykKKyAgICB7CisgICAgICAgIGlmIChoYXMpCisgICAgICAgICAgICA6Om5ldyAoJnMudmFs
KSBWYWx1ZVR5cGUoV1RGTW92ZShvLnMudmFsKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IDo6bmV3ICgmcy5lcnIpIEVycm9yVHlwZShXVEZNb3ZlKG8ucy5lcnIpKTsKKyAgICB9CisgICAg
fkJhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKGhhcykKKyAgICAgICAgICAgIGRlc3Ryb3kocy52
YWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZXN0cm95KHMuZXJyKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRT4KK3N0cnVjdCBDb25zdGV4cHJCYXNlPHZvaWQsIEU+IHsK
KyAgICB0eXBlZGVmIHZvaWQgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7Cisg
ICAgQ29uc3RleHByU3RvcmFnZTxWYWx1ZVR5cGUsIEVycm9yVHlwZT4gczsKKyAgICBib29sIGhh
czsKKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZSgpIDogcygpLCBoYXModHJ1ZSkgeyB9Cisg
ICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhh
cyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJvclRhZ1R5cGUgdGFn
KSA6IHModGFnKSwgaGFzKGZhbHNlKSB7IH0KKyAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShF
cnJvclRhZ1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFz
KGZhbHNlKSB7IH0KKyAgICB+Q29uc3RleHByQmFzZSgpID0gZGVmYXVsdDsKK307CisKK3RlbXBs
YXRlIDxjbGFzcyBFPgorc3RydWN0IEJhc2U8dm9pZCwgRT4geworICAgIHR5cGVkZWYgdm9pZCBW
YWx1ZVR5cGU7CisgICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKKyAgICBTdG9yYWdlPFZhbHVlVHlw
ZSwgRXJyb3JUeXBlPiBzOworICAgIGJvb2wgaGFzOworICAgIGNvbnN0ZXhwciBCYXNlKCkgOiBz
KCksIGhhcyh0cnVlKSB7IH0KKyAgICBjb25zdGV4cHIgQmFzZShWYWx1ZVRhZ1R5cGUgdGFnKSA6
IHModGFnKSwgaGFzKHRydWUpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0
YWcpIDogcyh0YWcpLCBoYXMoZmFsc2UpIHsgfQorICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFn
VHlwZSB0YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHModGFnLCBlcnIpLCBoYXMoZmFsc2Up
IHsgfQorICAgIEJhc2UoY29uc3QgQmFzZSYgbykKKyAgICAgICAgOiBoYXMoby5oYXMpCisgICAg
eworICAgICAgICBpZiAoIWhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy5lcnIpIEVycm9yVHlw
ZShvLnMuZXJyKTsKKyAgICB9CisgICAgQmFzZShCYXNlJiYgbykKKyAgICAgICAgOiBoYXMoby5o
YXMpCisgICAgeworICAgICAgICBpZiAoIWhhcykKKyAgICAgICAgICAgIDo6bmV3ICgmcy5lcnIp
IEVycm9yVHlwZShXVEZNb3ZlKG8ucy5lcnIpKTsKKyAgICB9CisgICAgfkJhc2UoKQorICAgIHsK
KyAgICAgICAgaWYgKCFoYXMpCisgICAgICAgICAgICBkZXN0cm95KHMuZXJyKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4KK3VzaW5nIEJhc2VTZWxlY3QgPSB0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAorICAgICgoc3RkOjppc192b2lkPFQ+Ojp2YWx1ZSB8fCBz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlKQorICAgICAgICAmJiBzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RT46OnZhbHVlKSwKKyAgICBDb25zdGV4cHJCYXNl
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlLCB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9jb25zdDxFPjo6dHlwZT4sCisgICAgQmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxU
Pjo6dHlwZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8RT46OnR5cGU+Cis+Ojp0eXBlOwor
Cit9IC8vIG5hbWVzcGFjZSBFeHBlY3RlZERldGFpbAorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgRT4KK2NsYXNzIEV4cGVjdGVkIDogcHJpdmF0ZSBFeHBlY3RlZERldGFpbDo6QmFzZVNlbGVj
dDxULCBFPiB7CisgICAgdHlwZWRlZiBFeHBlY3RlZERldGFpbDo6QmFzZVNlbGVjdDxULCBFPiBi
YXNlOworCitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpWYWx1ZVR5cGUgVmFs
dWVUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6RXJyb3JUeXBlIEVycm9yVHlwZTsK
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPiB0
eXBlOworCitwdWJsaWM6CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCByZWJpbmQg
eyB1c2luZyB0eXBlID0gRXhwZWN0ZWQ8VSwgRXJyb3JUeXBlPjsgfTsKKworICAgIGNvbnN0ZXhw
ciBFeHBlY3RlZCgpIDogYmFzZShFeHBlY3RlZERldGFpbDo6VmFsdWVUYWcpIHsgfQorICAgIEV4
cGVjdGVkKGNvbnN0IEV4cGVjdGVkJikgPSBkZWZhdWx0OworICAgIEV4cGVjdGVkKEV4cGVjdGVk
JiYpID0gZGVmYXVsdDsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoY29uc3QgVmFsdWVUeXBlJiBl
KSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OlZhbHVlVGFnLCBlKSB7IH0KKyAgICBjb25zdGV4cHIg
RXhwZWN0ZWQoVmFsdWVUeXBlJiYgZSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpWYWx1ZVRhZywg
V1RGTW92ZShlKSkgeyB9CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+IGNvbnN0ZXhw
ciBleHBsaWNpdCBFeHBlY3RlZChpbl9wbGFjZV90LCBBcmdzJiYuLi4pOworICAgIC8vIHRlbXBs
YXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQo
aW5fcGxhY2VfdCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworICAgIGNv
bnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IGNvbnN0JiB1KSA6IGJh
c2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorICAgIHRlbXBsYXRl
IDxjbGFzcyBFcnI+IGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnI+IGNvbnN0
JiB1KSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQorICAg
IC8vIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQo
VW5leHBlY3RUYWcsIEFyZ3MmJi4uLik7CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNz
Li4uIEFyZ3M+IGNvbnN0ZXhwciBleHBsaWNpdCBFeHBlY3RlZChVbmV4cGVjdFRhZywgc3RkOjpp
bml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisgICAgfkV4cGVjdGVkKCkgPSBkZWZh
dWx0OworCisgICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBFeHBlY3RlZCYgZSkgeyB0eXBl
KGUpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9
KEV4cGVjdGVkJiYgZSkgeyB0eXBlKFdURk1vdmUoZSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRo
aXM7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gRXhwZWN0ZWQmIG9wZXJhdG9yPShVJiYgdSkg
eyB0eXBlKFdURk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBFeHBl
Y3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4mIHUpIHsgdHlw
ZSh1KS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgRXhwZWN0ZWQmIG9wZXJhdG9y
PShVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+JiYgdSkgeyB0eXBlKFdURk1vdmUodSkpLnN3YXAo
KnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4g
dm9pZCBlbXBsYWNlKEFyZ3MmJi4uLik7CisgICAgLy8gdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNz
Li4uIEFyZ3M+IHZvaWQgZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4u
Lik7CisKKyAgICB2b2lkIHN3YXAoRXhwZWN0ZWQmIG8pCisgICAgeworICAgICAgICB1c2luZyBz
dGQ6OnN3YXA7CisgICAgICAgIGlmIChiYXNlOjpoYXMgJiYgby5oYXMpCisgICAgICAgICAgICBz
d2FwKGJhc2U6OnMudmFsLCBvLnMudmFsKTsKKyAgICAgICAgZWxzZSBpZiAoYmFzZTo6aGFzICYm
ICFvLmhhcykgeworICAgICAgICAgICAgRXJyb3JUeXBlIGUoV1RGTW92ZShvLnMuZXJyKSk7Cisg
ICAgICAgICAgICA6Om5ldyAoJm8ucy52YWwpIFZhbHVlVHlwZShXVEZNb3ZlKGJhc2U6OnMudmFs
KSk7CisgICAgICAgICAgICA6Om5ldyAoJmJhc2U6OnMuZXJyKSBFcnJvclR5cGUoZSk7CisgICAg
ICAgICAgICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9IGVsc2UgaWYgKCFiYXNl
OjpoYXMgJiYgby5oYXMpIHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSB2KFdURk1vdmUoby5zLnZh
bCkpOworICAgICAgICAgICAgOjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShiYXNl
OjpzLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNlOjpzLnZhbCkgVmFsdWVUeXBlKHYp
OworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBzd2FwKGJhc2U6OnMuZXJyLCBvLnMuZXJyKTsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgY29uc3QgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJmJhc2U6
OnMudmFsOyB9CisgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJmJhc2U6OnMu
dmFsOyB9CisgICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3Qg
JiB7IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgJiB7
IHJldHVybiBiYXNlOjpzLnZhbDsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBWYWx1ZVR5cGUmJiBv
cGVyYXRvciooKSBjb25zdCAmJiB7IHJldHVybiBXVEZNb3ZlKGJhc2U6OnMudmFsKTsgfQorICAg
IFJFTEFYRURfQ09OU1RFWFBSIFZhbHVlVHlwZSYmIG9wZXJhdG9yKigpICYmIHsgcmV0dXJuIFdU
Rk1vdmUoYmFzZTo6cy52YWwpOyB9CisgICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICBjb25zdGV4cHIgYm9vbCBoYXNW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6OmhhczsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKCkgY29uc3QgJiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNlOjpzLnZh
bCA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy52YWwpOyB9CisgICAgUkVMQVhF
RF9DT05TVEVYUFIgVmFsdWVUeXBlJiB2YWx1ZSgpICYgeyByZXR1cm4gYmFzZTo6aGFzID8gYmFz
ZTo6cy52YWwgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMudmFsKTsgfQorICAg
IGNvbnN0ZXhwciBjb25zdCBWYWx1ZVR5cGUmJiB2YWx1ZSgpIGNvbnN0ICYmIHsgcmV0dXJuIGJh
c2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpz
LnZhbCk7IH0KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBWYWx1ZVR5cGUmJiB2YWx1ZSgpICYmIHsg
cmV0dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVkRGV0YWlsOjpUaHJvdygp
LCBiYXNlOjpzLnZhbCk7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRXJyb3JUeXBlJiBlcnJvcigp
IGNvbnN0ICYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkRGV0
YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBFcnJvclR5cGUmIGVycm9yKCkgJiB7
IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93
KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIFJFTEFYRURfQ09OU1RFWFBSIEVycm9yVHlwZSYmIGVy
cm9yKCkgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkRGV0
YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRXJyb3JU
eXBlJiYgZXJyb3IoKSBjb25zdCAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIg
OiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhw
ciBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVy
biBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+KGJhc2U6OnMuZXJyKTsgfQorICAgIHRlbXBsYXRl
IDxjbGFzcyBVPiBjb25zdGV4cHIgVmFsdWVUeXBlIHZhbHVlT3IoVSYmIHUpIGNvbnN0ICYgeyBy
ZXR1cm4gYmFzZTo6aGFzID8gKip0aGlzIDogc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihzdGQ6OmZv
cndhcmQ8VT4odSkpOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFZhbHVlVHlwZSB2YWx1ZU9y
KFUmJiB1KSAmJiB7IHJldHVybiBiYXNlOjpoYXMgPyBXVEZNb3ZlKCoqdGhpcykgOiBzdGF0aWNf
Y2FzdDxWYWx1ZVR5cGU+KHN0ZDo6Zm9yd2FyZDxVPih1KSk7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBFPgorY2xhc3MgRXhwZWN0ZWQ8dm9pZCwgRT4gOiBwcml2YXRlIEV4cGVjdGVkRGV0YWls
OjpCYXNlU2VsZWN0PHZvaWQsIEU+IHsKKyAgICB0eXBlZGVmIEV4cGVjdGVkRGV0YWlsOjpCYXNl
U2VsZWN0PHZvaWQsIEU+IGJhc2U7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJh
c2U6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpFcnJv
clR5cGUgRXJyb3JUeXBlOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgRXhwZWN0ZWQ8VmFsdWVU
eXBlLCBFcnJvclR5cGU+IHR5cGU7CisKK3B1YmxpYzoKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3Mg
VT4gc3RydWN0IHJlYmluZCB7IHR5cGVkZWYgRXhwZWN0ZWQ8VSwgRXJyb3JUeXBlPiB0eXBlOyB9
OworCisgICAgY29uc3RleHByIEV4cGVjdGVkKCkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpWYWx1
ZVRhZykgeyB9CisgICAgRXhwZWN0ZWQoY29uc3QgRXhwZWN0ZWQmKSA9IGRlZmF1bHQ7CisgICAg
RXhwZWN0ZWQoRXhwZWN0ZWQmJikgPSBkZWZhdWx0OworICAgIC8vIGNvbnN0ZXhwciBleHBsaWNp
dCBFeHBlY3RlZChpbl9wbGFjZV90KTsKKyAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVW5leHBlY3Rl
ZFR5cGU8RT4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZERldGFpbDo6RXJyb3JUYWcsIHUudmFs
dWUoKSkgeyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEVycj4gY29uc3RleHByIEV4cGVjdGVkKFVu
ZXhwZWN0ZWRUeXBlPEVycj4gY29uc3QmIHUpIDogYmFzZShFeHBlY3RlZERldGFpbDo6RXJyb3JU
YWcsIHUudmFsdWUoKSkgeyB9CisKKyAgICB+RXhwZWN0ZWQoKSA9IGRlZmF1bHQ7CisKKyAgICBF
eHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IEV4cGVjdGVkJiBlKSB7IHR5cGUoZSkuc3dhcCgqdGhp
cyk7IHJldHVybiAqdGhpczsgfQorICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oRXhwZWN0ZWQmJiBl
KSB7IHR5cGUoV1RGTW92ZShlKSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfQorICAgIEV4
cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHUpIHsgdHlwZSh1KS5z
d2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9IC8vIE5vdCBpbiB0aGUgY3VycmVudCBwYXBlci4K
KyAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KFVuZXhwZWN0ZWRUeXBlPEU+JiYgdSkgeyB0eXBlKFdU
Rk1vdmUodSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0gLy8gTm90IGluIHRoZSBjdXJy
ZW50IHBhcGVyLgorICAgIC8vIHZvaWQgZW1wbGFjZSgpOworCisgICAgdm9pZCBzd2FwKEV4cGVj
dGVkJiBvKQorICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgICBpZiAoYmFz
ZTo6aGFzICYmIG8uaGFzKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICB9
IGVsc2UgaWYgKGJhc2U6OmhhcyAmJiAhby5oYXMpIHsKKyAgICAgICAgICAgIEVycm9yVHlwZSBl
KFdURk1vdmUoby5zLmVycikpOworICAgICAgICAgICAgOjpuZXcgKCZiYXNlOjpzLmVycikgRXJy
b3JUeXBlKGUpOworICAgICAgICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKKyAgICAgICAg
fSBlbHNlIGlmICghYmFzZTo6aGFzICYmIG8uaGFzKSB7CisgICAgICAgICAgICA6Om5ldyAoJm8u
cy5lcnIpIEVycm9yVHlwZShXVEZNb3ZlKGJhc2U6OnMuZXJyKSk7CisgICAgICAgICAgICBzd2Fw
KGJhc2U6Omhhcywgby5oYXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN3YXAoYmFz
ZTo6cy5lcnIsIG8ucy5lcnIpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gYmFzZTo6aGFzOyB9CisgICAgY29uc3RleHByIGJv
b2wgaGFzVmFsdWUoKSBjb25zdCB7IHJldHVybiBiYXNlOjpoYXM7IH0KKyAgICB2b2lkIHZhbHVl
KCkgY29uc3QgeyAhYmFzZTo6aGFzID8gRXhwZWN0ZWREZXRhaWw6OlRocm93KCkgOiB2b2lkKCk7
IH0KKyAgICBjb25zdGV4cHIgY29uc3QgRSYgZXJyb3IoKSBjb25zdCAmIHsgcmV0dXJuICFiYXNl
OjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5l
cnIpOyB9CisgICAgRSYgZXJyb3IoKSAmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVy
ciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9IC8vIE5vdCBpbiB0
aGUgY3VycmVudCBwYXBlci4KKyAgICBSRUxBWEVEX0NPTlNURVhQUiBFJiYgZXJyb3IoKSAmJiB7
IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93
KCksIGJhc2U6OnMuZXJyKTsgfQorICAgIGNvbnN0ZXhwciBjb25zdCBFJiYgZXJyb3IoKSBjb25z
dCAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6
OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCisg
ICAgLy8gY29uc3RleHByIEUmIGVycm9yKCkgJjsKKyAgICBjb25zdGV4cHIgVW5leHBlY3RlZFR5
cGU8RT4gZ2V0VW5leHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIFVuZXhwZWN0ZWRUeXBlPEU+KGJh
c2U6OnMuZXJyKTsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVk
PFQsIEU+JiB5KSB7IHJldHVybiBib29sKHgpID09IGJvb2woeSkgJiYgKHggPyB4LnZhbHVlKCkg
PT0geS52YWx1ZSgpIDogeC5lcnJvcigpID09IHkuZXJyb3IoKSk7IH0KK3RlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4cGVjdGVkPFQs
IEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gISh4ID09IHkpOyB9Cit0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gKCFi
b29sKHgpICYmIGJvb2woeSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYgIWJvb2woeSkpID8gdHJ1
ZSA6ICgoYm9vbCh4KSAmJiBib29sKHkpKSA/IHgudmFsdWUoKSA8IHkudmFsdWUoKSA6IHguZXJy
b3IoKSA8IHkuZXJyb3IoKSkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeSkgeyByZXR1cm4gISh4ID09IHkpICYmICEoeCA8IHkpOyB9Cit0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICh4ID09IHkpIHx8
ICh4IDwgeSk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYg
eSkgeyByZXR1cm4gKHggPT0geSkgfHwgKHggPiB5KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgRT4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeCwgY29u
c3QgRXhwZWN0ZWQ8dm9pZCwgRT4mIHkpIHsgcmV0dXJuIGJvb2woeCkgPT0gYm9vbCh5KSAmJiAo
eCA/IHRydWUgOiB4LmVycm9yKCkgPT0geS5lcnJvcigpKTsgfSAvLyBOb3QgaW4gdGhlIGN1cnJl
bnQgcGFwZXIuCit0ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEV4cGVjdGVkPHZvaWQsIEU+JiB4LCBjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeSkgeyBy
ZXR1cm4gKCFib29sKHgpICYmIGJvb2woeSkpID8gZmFsc2UgOiAoKGJvb2woeCkgJiYgIWJvb2wo
eSkpID8gdHJ1ZSA6ICgoYm9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogeC5lcnJvcigpIDwg
eS5lcnJvcigpKSk7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50IHBhcGVyLgorCit0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3Rl
ZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA9PSBFeHBlY3RlZDxULCBFPih5KTsg
fQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQs
IEU+KHgpID09IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVy
biB4ICE9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBF
PiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgIT0geTsgfQordGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBFeHBlY3RlZDxULCBF
PiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA8IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQm
IHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA8
IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4IDw9IEV4
cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyBy
ZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkgPD0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgVCYgeSkgeyByZXR1cm4geCA+IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHgsIGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+IHk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiB4ID49IEV4cGVjdGVkPFQs
IEU+KHkpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhw
ZWN0ZWQ8VCwgRT4oeCkgPj0geTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVW5l
eHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPT0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4g
RXhwZWN0ZWQ8VCwgRT4oeCkgPT0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVu
ZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ICE9IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJu
IEV4cGVjdGVkPFQsIEU+KHgpICE9IHk7IH0KK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVu
ZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4IDwgRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
VW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7ICByZXR1cm4g
RXhwZWN0ZWQ8VCwgRT4oeCkgPCB5OyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVW5l
eHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPD0gRXhwZWN0ZWQ8VCwgRT4oeSk7IH0KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4g
RXhwZWN0ZWQ8VCwgRT4oeCkgPD0geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVW5l
eHBlY3RlZFR5cGU8RT4mIHkpIHsgcmV0dXJuIHggPiBFeHBlY3RlZDxULCBFPih5KTsgfQordGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBV
bmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4
cGVjdGVkPFQsIEU+KHgpID4geTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID49IEV4cGVjdGVkPFQsIEU+KHkpOyB9Cit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBV
bmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4
cGVjdGVkPFQsIEU+KHgpID49IHk7IH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEU+IHZvaWQgc3dhcChFeHBlY3RlZDxULCBFPiYgeCwgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgeC5z
d2FwKHkpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFID0gV1RGOjpOdWxsb3B0VGFn
PiBjb25zdGV4cHIgRXhwZWN0ZWQ8c3RkOjpkZWNheV90PFQ+LCBFPiBtYWtlRXhwZWN0ZWQoVCYm
IHYpCit7CisgICAgcmV0dXJuIEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUs
IEU+KHN0ZDo6Zm9yd2FyZDxUPih2KSk7Cit9Cit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4g
Y29uc3RleHByIEV4cGVjdGVkPFQsIHN0ZDo6ZGVjYXlfdDxFPj4gbWFrZUV4cGVjdGVkRnJvbUVy
cm9yKEUmJiBlKSB7IHJldHVybiBFeHBlY3RlZDxULCBzdGQ6OmRlY2F5X3Q8RT4+KG1ha2VVbmV4
cGVjdGVkKGUpKTsgfQordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEUsIGNsYXNzIFU+IGNvbnN0
ZXhwciBFeHBlY3RlZDxULCBFPiBtYWtlRXhwZWN0ZWRGcm9tRXJyb3IoVSYmIHUpIHsgcmV0dXJu
IEV4cGVjdGVkPFQsIEU+KG1ha2VVbmV4cGVjdGVkKEUgeyBzdGQ6OmZvcndhcmQ8VT4odSkgfSAp
KTsgfQorLy8gdGVtcGxhdGUgPGNsYXNzIEYsIGNsYXNzIEUgPSBXVEY6Ok51bGxvcHRUYWc+IGNv
bnN0ZXhwciBFeHBlY3RlZDx0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxGPjo6dHlwZSwgRT4gbWFr
ZUV4cGVjdGVkX2Zyb21fY2FsbChGIGYpOworCitFeHBlY3RlZDx2b2lkLCBXVEY6Ok51bGxvcHRU
YWc+IG1ha2VFeHBlY3RlZCgpIHsgcmV0dXJuIEV4cGVjdGVkPHZvaWQsIFdURjo6TnVsbG9wdFRh
Zz4oKTsgfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIHN0ZCB7CisKK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPiBzdHJ1Y3QgaGFzaDxXVEY6OkV4cGVjdGVkPFQsIEU+PiB7
CisgICAgdHlwZWRlZiBXVEY6OkV4cGVjdGVkPFQsIEU+IGFyZ3VtZW50X3R5cGU7CisgICAgdHlw
ZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKKyAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigp
KGFyZ3VtZW50X3R5cGUgY29uc3QmIGUpIGNvbnN0IHsgcmV0dXJuIGUgPyBoYXNoPHR5cGVuYW1l
IGFyZ3VtZW50X3R5cGU6OlZhbHVlVHlwZT4geyB9IChlLnZhbHVlKCkpIDogaGFzaDx0eXBlbmFt
ZSBhcmd1bWVudF90eXBlOjpFcnJvclR5cGU+IHsgfSAoZS5lcnJvcigpKTsgfQorfTsKKwordGVt
cGxhdGUgPGNsYXNzIEU+IHN0cnVjdCBoYXNoPFdURjo6RXhwZWN0ZWQ8dm9pZCwgRT4+IHsKKyAg
ICB0eXBlZGVmIFdURjo6RXhwZWN0ZWQ8dm9pZCwgRT4gYXJndW1lbnRfdHlwZTsKKyAgICB0eXBl
ZGVmIHN0ZDo6c2l6ZV90IHJlc3VsdF90eXBlOworICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCko
YXJndW1lbnRfdHlwZSBjb25zdCYgZSkgY29uc3QgeyByZXR1cm4gZSA/IDAgOiBoYXNoPHR5cGVu
YW1lIGFyZ3VtZW50X3R5cGU6OkVycm9yVHlwZT4geyB9IChlLmVycm9yKCkpOyB9Cit9OworCit9
CisKK3VzaW5nIFdURjo6VW5leHBlY3RlZFR5cGU7Cit1c2luZyBXVEY6Om1ha2VVbmV4cGVjdGVk
OwordXNpbmcgV1RGOjpVbmV4cGVjdDsKK3VzaW5nIFdURjo6RXhwZWN0ZWQ7Cit1c2luZyBXVEY6
Om1ha2VFeHBlY3RlZDsKK3VzaW5nIFdURjo6bWFrZUV4cGVjdGVkRnJvbUVycm9yOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDljZWQzZDcuLjY3
MThiYTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNCBAQAorMjAxNi0xMS0xMCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdURjo6RXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUyNgorCisgICAgICAgIFJldmll
d2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgc3RkOjpleHBlY3RlZCBpc24ndCBpbiBD
KysxNywgYW5kIG1heSBiZSBpbiBDKysyMC4gSXQncyBhIG5pY2UKKyAgICAgICAgY29tcGxlbWVu
dCB0byBzdGQ6OmFueSAvIHN0ZDo6b3B0aW9uYWwgYmVjYXVzZSBpdCdzIGEgdHlwZS10YWdnZWQK
KyAgICAgICAgdW5pb24gd2hpY2ggaGFzIGEgc2luZ2xlIGV4cGVjdGVkIHJlc3VsdCBidXQgY291
bGQgYWxzbyBjb250YWluIGFuCisgICAgICAgIGVycm9yLgorCisgICAgICAgIFRoaXMgd291bGQg
YmUgdXNlZnVsIGluIHRoZSBXZWJBc3NlbWJseSBwYXJzZXIsIGZvciBleGFtcGxlLgorCisgICAg
ICAgIFVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBhbGxvdyB1cyB0byBwcm92aWRlIGZl
ZWRiYWNrIHRvIHRoZQorICAgICAgICBzdGFuZGFyZHMgY29tbWl0dGVlIGFuZCBndWlkZSBzdGQ6
OmV4cGVjdGVkJ3MgZGVzaWduIGJlZm9yZSBpdAorICAgICAgICBnZXRzIHN0YW5kYXJkaXplZC4g
SSd2ZSBhbHJlYWR5IHNlbnQgYSBidW5jaCBvZiBmZWVkYmFjayB0byB0aGUKKyAgICAgICAgYXV0
aG9yIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UgaW1wbGVtZW50aW5nIHRoaXMuCisKKyAgICAgICAg
VGhpcyBjb3VsZCBzdXBwbGVtZW50IFdURjo6RWl0aGVyIGFuZCBXVEY6OkV4Y2VwdGlvbk9yLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9FeHBlY3RlZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Zm9vOjpmb28pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Zm9vOjp+Zm9vKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmZvbzo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpvcGVyYXRvcjw8KToKKwogMjAxNi0xMS0xMiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSB3YXkgdG8g
Z2V0IHRoZSBVSS1zaWRlIHNjcm9sbGluZyB0cmVlIGFzIHRleHQgdmlhIFVJU2NyaXB0Q29udHJv
bGxlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvUGxhdGZvcm1NYWMuY21ha2Ug
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCAyNGU4ZDY0Li42
ZmFjMzIwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybU1hYy5jbWFr
ZQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNzYsNyAr
NzYsNyBAQCBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9PYmpDX1NPVVJDRVMKICAgICBtYWMv
T2JqQ0NvbnRyb2xsZXIubQogICAgIG1hYy9PYmpDUGx1Z2luLm0KICAgICBtYWMvT2JqQ1BsdWdp
bkZ1bmN0aW9uLm0KLSAgICBtYWMvVGV4dElucHV0Q29udHJvbGxlci5tCisgICAgbWFjL1RleHRJ
bnB1dENvbnRyb2xsZXJNYWMubQogKQogCiBsaXN0KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9DcHBf
U09VUkNFUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggZmI2MjJjNS4uODk3YjBl
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC01MCw2ICs1MCw3IEBAIHNldChU
ZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvRGF0ZU1h
dGguY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0RlcXVlLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9FbnVtVHJhaXRzLmNwcAorICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9FeHBlY3RlZC5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvSGFzaENvdW50ZWRTZXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL0hhc2hNYXAuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0hhc2hTZXQuY3BwCkBAIC02MSw2ICs2Miw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTWVkaWFUaW1lLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9OYWtlZFB0ci5jcHAKKyAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvT3B0aW9uYWwuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL09wdGlvblNldC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvUGFya2luZ0xvdC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvUmVk
QmxhY2tUcmVlLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhYWE0M2E0Li41Y2E3MTZm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDU1LDYgKzQ1NSw3IEBACiAJCUFENTdBQzIw
MURBNzQ2NTAwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hl
X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDU3QUMxRTFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJ
blBhZ2VDYWNoZV9CdW5kbGUuY3BwICovOyB9OwogCQlBRDU3QUMyMTFEQTc0NjVCMDBGRjFCREUg
LyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDU3QUMxRjFEQTc0NjREMDBGRjFC
REUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAgKi87IH07CiAJ
CUFENTdBQzIyMURBNzQ2NkUwMEZGMUJERSAvKiBtYW55LWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDU3QUMxRDFEQTc0
NjM4MDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwgKi87IH07CisJCUFEN0M0MzREMUREMkE1
NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBRDdDNDM0QzFERDJBNTQ3MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3Bw
ICovOyB9OwogCQlBRENFQkJBNjFEOUFFMjI5MDAyRTI4M0EgLyogQ29uc3VtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRENFQkJBNTFEOTlENENG
MDAyRTI4M0EgLyogQ29uc3VtZS5jcHAgKi87IH07CiAJCUI1NUFEMUQ1MTc5RjNCMzAwMEFDMTQ5
NCAvKiBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZ19CdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1QUQxRDMxNzlGM0FCRjAw
QUMxNDk0IC8qIFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nX0J1bmRsZS5jcHAgKi87
IH07CiAJCUI1NUYxMUI3MTUxN0QwMzMwMDkxNTkxNiAvKiBhdHRyaWJ1dGVkU3RyaW5nQ3VzdG9t
Rm9udC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1NUYxMUIwMTUxN0EyQzQwMDkxNTkxNiAvKiBhdHRyaWJ1dGVkU3RyaW5nQ3VzdG9t
Rm9udC5odG1sICovOyB9OwpAQCAtMTExMiw2ICsxMTEzLDcgQEAKIAkJQUQ1N0FDMUQxREE3NDYz
ODAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gIm1hbnktaWZyYW1lcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1
N0FDMUUxREE3NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdl
Q2FjaGVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
ZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1N0FDMUYxREE3NDY0RDAwRkYxQkRFIC8qIERpZFJlbW92
ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEN0M0MzRDMUREMkE1NDcwMDI2ODg4QiAv
KiBFeHBlY3RlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHBl
Y3RlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQ0VCQkE1MUQ5OUQ0Q0Yw
MDJFMjgzQSAvKiBDb25zdW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnN1bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNDAzOUY5QzE1
RTZEOEIzMDA3MjU1RDYgLyogTWF0aEV4dHJhcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYXRoRXh0cmFzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjU1QUQxRDExNzlGMzM2NjAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jl
c2l6aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUHJldmVudEltYWdlTG9hZFdpdGhBdXRv
UmVzaXppbmcubW07IHBhdGggPSBXZWJLaXQyT2JqQy9QcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9S
ZXNpemluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTksNiArMTgwMSw3
IEBACiAJCUJDOTA5NjQ2MTI1NTYxODkwMDA4Mzc1NiAvKiBXVEYgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEN0M0MzRDMUREMkE1NDcwMDI2ODg4QiAv
KiBFeHBlY3RlZC5jcHAgKi8sCiAJCQkJQzA5OTFDNEYxNDNDN0Q2ODAwNzk5OEYyIC8qIGNmICov
LAogCQkJCTdDQkJBMDc1MTlCQjhBMDkwMEJCRjAyNSAvKiBkYXJ3aW4gKi8sCiAJCQkJQkMwMjlC
MUExNDg2QjIzODAwODE3REE5IC8qIG5zICovLApAQCAtMjMzMSw2ICsyMzM0LDcgQEAKIAkJCQk3
QzgzREVGRTFEMEE1OTBDMDBGRUJDRjMgLyogTmFrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0RGMDExRDBBNTkwQzAwRkVCQ0YzIC8qIE9wdGlvbmFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUFEQ0VCQkE2MUQ5QUUyMjkwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUFEN0M0MzREMUREMkE1NEUwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzgzREYwMjFEMEE1OTBDMDBGRUJDRjMgLyogT1NPYmplY3RQdHIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGNTkxRDBBNTkwQzAwRkVCQ0YzIC8qIFBhcmtpbmdM
b3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTMxRDBBNTkwQzAwRkVCQ0YzIC8qIFJl
ZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0V4cGVjdGVkLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0V4cGVjdGVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJk
YWRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRXhw
ZWN0ZWQuY3BwCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDxj
bGFzcyBFPiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qg
VW5leHBlY3RlZFR5cGU8RT4mIHUpCit7CisgICAgcmV0dXJuIG9zIDw8IHUudmFsdWUoKTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBFeHBlY3RlZDxULCBFPiYgZSkKK3sKKyAgICBpZiAoZS5o
YXNWYWx1ZSgpKQorICAgICAgICByZXR1cm4gb3MgPDwgZS52YWx1ZSgpOworICAgIHJldHVybiBv
cyA8PCBlLmVycm9yKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBFPiBzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgRXhwZWN0ZWQ8dm9pZCwgRT4mIGUpCit7
CisgICAgaWYgKGUuaGFzVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG9zIDw8ICIiOworICAgIHJl
dHVybiBvcyA8PCBlLmVycm9yKCk7Cit9CisKK30KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitjb25zdGV4cHIgY29uc3QgY2hhciogb29wcyA9ICJvb3BzIjsKK2NvbnN0ZXhwciBjb25z
dCBjaGFyKiBmb29mID0gImZvb2YiOworCitURVNUKFdURl9FeHBlY3RlZCwgVW5leHBlY3RlZFR5
cGUpCit7CisgICAgeworICAgICAgICBhdXRvIHUgPSBVbmV4cGVjdGVkVHlwZTxpbnQ+KDQyKTsK
KyAgICAgICAgRVhQRUNUX0VRKHUudmFsdWUoKSwgNDIpOworICAgICAgICBjb25zdGV4cHIgYXV0
byBjID0gbWFrZVVuZXhwZWN0ZWQoNDIpOworICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZSgpLCA0
Mik7CisgICAgICAgIEVYUEVDVF9FUSh1LCBjKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHUgIT0g
Yyk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1IDwgYyk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1
ID4gYyk7CisgICAgICAgIEVYUEVDVF9MRSh1LCBjKTsKKyAgICAgICAgRVhQRUNUX0dFKHUsIGMp
OworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYyA9IG1ha2VVbmV4cGVjdGVkKG9vcHMpOwor
ICAgICAgICBFWFBFQ1RfRVEoYy52YWx1ZSgpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAg
ICBhdXRvIHMgPSBtYWtlVW5leHBlY3RlZChzdGQ6OnN0cmluZyhvb3BzKSk7CisgICAgICAgIEVY
UEVDVF9FUShzLnZhbHVlKCksIG9vcHMpOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0ZXhw
ciBhdXRvIHMwID0gbWFrZVVuZXhwZWN0ZWQob29wcyk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRv
IHMxKHMwKTsKKyAgICAgICAgRVhQRUNUX0VRKHMwLCBzMSk7CisgICAgfQorfQorCitzdHJ1Y3Qg
Zm9vIHsKKyAgICBpbnQgdjsKKyAgICBmb28oaW50IHYpCisgICAgICAgIDogdih2KQorICAgIHsg
fQorICAgIH5mb28oKSB7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZm9vJiB5KSBjb25z
dCB7IHJldHVybiB2ID09IHkudjsgfQorICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9y
PDwoc3RkOjpvc3RyZWFtJiwgY29uc3QgZm9vJik7Cit9Oworc3RkOjpvc3RyZWFtJiBvcGVyYXRv
cjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGZvbyYgZikgeyByZXR1cm4gb3MgPDwgZi52OyB9
CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBleHBlY3RlZCkKK3sKKyAgICB0eXBlZGVmIEV4cGVjdGVk
PGludCwgY29uc3QgY2hhcio+IEU7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGNvbnN0IHZv
aWQqPiBFVjsKKyAgICB0eXBlZGVmIEV4cGVjdGVkPGZvbywgY29uc3QgY2hhcio+IEZvb0NoYXI7
CisgICAgdHlwZWRlZiBFeHBlY3RlZDxmb28sIHN0ZDo6c3RyaW5nPiBGb29TdHJpbmc7CisgICAg
eworICAgICAgICBhdXRvIGUgPSBFKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGUuaGFzVmFsdWUo
KSk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlKCksIDApOworICAgICAgICBFWFBFQ1RfRVEo
ZS52YWx1ZU9yKDMuMTQpLCAwKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdGV4cHIgRSBl
OworICAgICAgICBFWFBFQ1RfVFJVRShlLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEo
ZS52YWx1ZSgpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMCk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gRSg0Mik7CisgICAgICAgIEVYUEVDVF9UUlVF
KGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLnZhbHVlKCksIDQyKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgNDIpOworICAgICAgICBjb25zdCBhdXRvIGUy
KGUpOworICAgICAgICBFWFBFQ1RfVFJVRShlMi5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKGUyLnZhbHVlKCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGUyLnZhbHVlT3IoMy4xNCks
IDQyKTsKKyAgICAgICAgRSBlMzsKKyAgICAgICAgZTMgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RS
VUUoZTMuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlMy52YWx1ZSgpLCA0Mik7Cisg
ICAgICAgIEVYUEVDVF9FUShlMy52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgICAgIGNvbnN0IEUg
ZTQgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTQuaGFzVmFsdWUoKSk7CisgICAgICAgIEVY
UEVDVF9FUShlNC52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVYUEVDVF9FUShlNC52YWx1ZU9yKDMu
MTQpLCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3RleHByIEUgYyg0Mik7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGMuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShjLnZhbHVl
KCksIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKGMudmFsdWVPcigzLjE0KSwgNDIpOworICAgICAg
ICBjb25zdGV4cHIgY29uc3QgYXV0byBjMihjKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYzIuaGFz
VmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShjMi52YWx1ZSgpLCA0Mik7CisgICAgICAgIEVY
UEVDVF9FUShjMi52YWx1ZU9yKDMuMTQpLCA0Mik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0
byB1ID0gRShtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh1Lmhh
c1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEodS5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAg
RVhQRUNUX0VRKHUuZ2V0VW5leHBlY3RlZCgpLnZhbHVlKCksIG9vcHMpOworICAgICAgICBFWFBF
Q1RfRVEodS52YWx1ZU9yKDMuMTQpLCAzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHV2
ID0gRVYobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgICAgICBFWFBFQ1RfRkFMU0UodXYuaGFz
VmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1di5lcnJvcigpLCBvb3BzKTsKKyAgICAgICAg
RVhQRUNUX0VRKHV2LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHV2LnZhbHVlT3IoMy4xNCksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIEUgZSA9
IG1ha2VVbmV4cGVjdGVkKG9vcHMpOworICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9F
UShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUu
dmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4
cGVjdGVkRnJvbUVycm9yPGludCwgY29uc3QgY2hhcio+KG9vcHMpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUuZXJyb3IoKSwgb29wcyk7
CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPGludCwgY29uc3Qgdm9pZCo+KG9vcHMp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoZS5oYXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KGUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVDVF9FUShlLmdldFVuZXhwZWN0ZWQoKS52
YWx1ZSgpLCBvb3BzKTsKKyAgICAgICAgRVhQRUNUX0VRKGUudmFsdWVPcigzLjE0KSwgMyk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gRm9vQ2hhcig0Mik7CisgICAgICAgIEVYUEVD
VF9FUShlLT52LCA0Mik7CisgICAgICAgIEVYUEVDVF9FUSgoKmUpLnYsIDQyKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBhdXRvIGUwID0gRSg0Mik7CisgICAgICAgIGF1dG8gZTEgPSBFKDEwMjQp
OworICAgICAgICBzd2FwKGUwLCBlMSk7CisgICAgICAgIEVYUEVDVF9FUShlMC52YWx1ZSgpLCAx
MDI0KTsKKyAgICAgICAgRVhQRUNUX0VRKGUxLnZhbHVlKCksIDQyKTsKKyAgICB9CisgICAgewor
ICAgICAgICBhdXRvIGUwID0gRShtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIGF1dG8g
ZTEgPSBFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKTsKKyAgICAgICAgc3dhcChlMCwgZTEpOworICAg
ICAgICBFWFBFQ1RfRVEoZTAuZXJyb3IoKSwgZm9vZik7CisgICAgICAgIEVYUEVDVF9FUShlMS5l
cnJvcigpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAgICAgICBGb29DaGFyIGMoZm9vKDQyKSk7
CisgICAgICAgIEVYUEVDVF9FUShjLT52LCA0Mik7CisgICAgICAgIEVYUEVDVF9FUSgoKmMpLnYs
IDQyKTsKKyAgICB9CisgICAgeworICAgICAgICBGb29TdHJpbmcgcyhmb28oNDIpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHMtPnYsIDQyKTsKKyAgICAgICAgRVhQRUNUX0VRKCgqcykudiwgNDIpOwor
ICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gInZlcnkgbG9uZyBmYWlsdXJlIHN0cmluZywg
Zm9yIHZlcnkgYmFkIGZhaWx1cmUgY2FzZXMiOworICAgICAgICBGb29TdHJpbmcgZTAobWFrZVVu
ZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAgRm9vU3RyaW5nIGUxKG1h
a2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNzYWdlKSk7CisgICAgICAgIEZvb1N0cmluZyBl
MihtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4oc3RkOjpzdHJpbmcoKSkpOworICAgICAgICBF
WFBFQ1RfRVEoZTAuZXJyb3IoKSwgc3RkOjpzdHJpbmcobWVzc2FnZSkpOworICAgICAgICBFWFBF
Q1RfRVEoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX05FKGUwLCBlMik7CisgICAgICAgIEZvb1N0
cmluZyogZTQgPSBuZXcgRm9vU3RyaW5nKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNz
YWdlKSk7CisgICAgICAgIEZvb1N0cmluZyogZTUgPSBuZXcgRm9vU3RyaW5nKCplNCk7CisgICAg
ICAgIEVYUEVDVF9FUShlMCwgKmU0KTsKKyAgICAgICAgZGVsZXRlIGU0OworICAgICAgICBFWFBF
Q1RfRVEoZTAsICplNSk7CisgICAgICAgIGRlbGV0ZSBlNTsKKyAgICB9Cit9CisKK1RFU1QoV1RG
X0V4cGVjdGVkLCBFeHBlY3RlZF92b2lkKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwg
Y29uc3QgY2hhcio+IEU7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBjb25zdCB2b2lkKj4g
RVY7CisgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBzdGQ6OnN0cmluZz4gU3RyaW5nOworICAg
IHsKKyAgICAgICAgYXV0byBlID0gRSgpOworICAgICAgICBFWFBFQ1RfVFJVRShlLmhhc1ZhbHVl
KCkpOworICAgICAgICBjb25zdCBhdXRvIGUyKGUpOworICAgICAgICBFWFBFQ1RfVFJVRShlMi5o
YXNWYWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGUsIGUyKTsKKyAgICAgICAgRSBlMzsKKyAg
ICAgICAgZTMgPSBlMjsKKyAgICAgICAgRVhQRUNUX1RSVUUoZTMuaGFzVmFsdWUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShlLCBlMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3RleHByIEUg
YzsKKyAgICAgICAgRVhQRUNUX1RSVUUoYy5oYXNWYWx1ZSgpKTsKKyAgICAgICAgY29uc3RleHBy
IGNvbnN0IGF1dG8gYzIoYyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGMyLmhhc1ZhbHVlKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoYywgYzIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdSA9
IEUobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgICAgICBFWFBFQ1RfRkFMU0UodS5oYXNWYWx1
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHUuZXJyb3IoKSwgb29wcyk7CisgICAgICAgIEVYUEVD
VF9FUSh1LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsKKyAgICB9CisgICAgeworICAg
ICAgICBhdXRvIHV2ID0gRVYobWFrZVVuZXhwZWN0ZWQob29wcykpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UodXYuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh1di5lcnJvcigpLCBvb3Bz
KTsKKyAgICAgICAgRVhQRUNUX0VRKHV2LmdldFVuZXhwZWN0ZWQoKS52YWx1ZSgpLCBvb3BzKTsK
KyAgICB9CisgICAgeworICAgICAgICBFIGUgPSBtYWtlVW5leHBlY3RlZChvb3BzKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLmVycm9y
KCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwg
b29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVy
cm9yPHZvaWQsIGNvbnN0IGNoYXIqPihvb3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFz
VmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAgICBF
WFBFQ1RfRVEoZS5nZXRVbmV4cGVjdGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byBlID0gbWFrZUV4cGVjdGVkRnJvbUVycm9yPHZvaWQsIGNvbnN0IHZvaWQq
Pihvb3BzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGUuaGFzVmFsdWUoKSk7CisgICAgICAgIEVY
UEVDVF9FUShlLmVycm9yKCksIG9vcHMpOworICAgICAgICBFWFBFQ1RfRVEoZS5nZXRVbmV4cGVj
dGVkKCkudmFsdWUoKSwgb29wcyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBlMCA9IEUo
KTsKKyAgICAgICAgYXV0byBlMSA9IEUoKTsKKyAgICAgICAgc3dhcChlMCwgZTEpOworICAgICAg
ICBFWFBFQ1RfRVEoZTAsIGUxKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGUwID0gRSht
YWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgICAgIGF1dG8gZTEgPSBFKG1ha2VVbmV4cGVjdGVk
KGZvb2YpKTsKKyAgICAgICAgc3dhcChlMCwgZTEpOworICAgICAgICBFWFBFQ1RfRVEoZTAuZXJy
b3IoKSwgZm9vZik7CisgICAgICAgIEVYUEVDVF9FUShlMS5lcnJvcigpLCBvb3BzKTsKKyAgICB9
CisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gInZlcnkgbG9uZyBmYWlsdXJl
IHN0cmluZywgZm9yIHZlcnkgYmFkIGZhaWx1cmUgY2FzZXMiOworICAgICAgICBTdHJpbmcgZTAo
bWFrZVVuZXhwZWN0ZWQ8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpKTsKKyAgICAgICAgU3RyaW5nIGUx
KG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNzYWdlKSk7CisgICAgICAgIFN0cmluZyBl
MihtYWtlVW5leHBlY3RlZDxzdGQ6OnN0cmluZz4oc3RkOjpzdHJpbmcoKSkpOworICAgICAgICBF
WFBFQ1RfRVEoZTAuZXJyb3IoKSwgc3RkOjpzdHJpbmcobWVzc2FnZSkpOworICAgICAgICBFWFBF
Q1RfRVEoZTAsIGUxKTsKKyAgICAgICAgRVhQRUNUX05FKGUwLCBlMik7CisgICAgICAgIFN0cmlu
ZyogZTQgPSBuZXcgU3RyaW5nKG1ha2VVbmV4cGVjdGVkPHN0ZDo6c3RyaW5nPihtZXNzYWdlKSk7
CisgICAgICAgIFN0cmluZyogZTUgPSBuZXcgU3RyaW5nKCplNCk7CisgICAgICAgIEVYUEVDVF9F
UShlMCwgKmU0KTsKKyAgICAgICAgZGVsZXRlIGU0OworICAgICAgICBFWFBFQ1RfRVEoZTAsICpl
NSk7CisgICAgICAgIGRlbGV0ZSBlNTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0V4cGVjdGVkLCBj
b21wYXJpc29uKQoreworICAgIHR5cGVkZWYgRXhwZWN0ZWQ8aW50LCBjb25zdCBjaGFyKj4gRXg7
CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGludD4gRXI7CisKKyAgICAvLyBUd28gRXhwZWN0
ZWQsIG5vIGVycm9ycy4KKyAgICBFWFBFQ1RfRVEoRXgoNDIpLCBFeCg0MikpOworICAgIEVYUEVD
VF9ORShFeCg0MiksIEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfTFQoRXgoNDIpLCBFeCgxMDI0KSk7
CisgICAgRVhQRUNUX0dUKEV4KDEwMjQpLCBFeCg0MikpOworICAgIEVYUEVDVF9MRShFeCg0Miks
IEV4KDQyKSk7CisgICAgRVhQRUNUX0dFKEV4KDQyKSwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfTEUo
RXgoNDIpLCBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0dFKEV4KDEwMjQpLCBFeCg0MikpOworCisg
ICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA9PSBFeCgxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4
KDQyKSAhPSBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8IEV4KDQyKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IEV4KDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgo
MTAyNCkgPCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0gRXgoMTAyNCkpOwor
CisgICAgLy8gVHdvIEV4cGVjdGVkLCBoYWxmIGVycm9ycy4KKyAgICBFWFBFQ1RfRkFMU0UoRXgo
NDIpID09IEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSk7CisgICAgRVhQRUNUX05FKEV4KDQyKSwg
RXgobWFrZVVuZXhwZWN0ZWQob29wcykpKTsKKyAgICBFWFBFQ1RfTFQoRXgoNDIpLCBFeChtYWtl
VW5leHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPiBFeChtYWtlVW5l
eHBlY3RlZChvb3BzKSkpOworICAgIEVYUEVDVF9MRShFeCg0MiksIEV4KG1ha2VVbmV4cGVjdGVk
KG9vcHMpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+PSBFeChtYWtlVW5leHBlY3RlZChv
b3BzKSkpOworCisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSA9PSBF
eCg0MikpOworICAgIEVYUEVDVF9ORShFeChtYWtlVW5leHBlY3RlZChvb3BzKSksIEV4KDQyKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSA8IEV4KDQyKSk7Cisg
ICAgRVhQRUNUX0dUKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgRXgoNDIpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRXgobWFrZVVuZXhwZWN0ZWQob29wcykpIDw9IEV4KDQyKSk7CisgICAgRVhQRUNU
X0dFKEV4KG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwgRXgoNDIpKTsKKworICAgIC8vIFR3byBFeHBl
Y3RlZCwgYWxsIGVycm9ycy4KKyAgICBFWFBFQ1RfRVEoRXIoNDIpLCBFcig0MikpOworICAgIEVY
UEVDVF9ORShFcig0MiksIEVyKDEwMjQpKTsKKyAgICBFWFBFQ1RfTFQoRXIoNDIpLCBFcigxMDI0
KSk7CisgICAgRVhQRUNUX0dUKEVyKDEwMjQpLCBFcig0MikpOworICAgIEVYUEVDVF9MRShFcig0
MiksIEVyKDQyKSk7CisgICAgRVhQRUNUX0dFKEVyKDQyKSwgRXIoNDIpKTsKKyAgICBFWFBFQ1Rf
TEUoRXIoNDIpLCBFcigxMDI0KSk7CisgICAgRVhQRUNUX0dFKEVyKDEwMjQpLCBFcig0MikpOwor
CisgICAgRVhQRUNUX0ZBTFNFKEVyKDQyKSA9PSBFcigxMDI0KSk7CisgICAgRVhQRUNUX0ZBTFNF
KEVyKDQyKSAhPSBFcig0MikpOworICAgIEVYUEVDVF9GQUxTRShFcigxMDI0KSA8IEVyKDQyKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEVyKDQyKSA+IEVyKDEwMjQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RXIoMTAyNCkgPD0gRXIoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXIoNDIpID49IEVyKDEwMjQp
KTsKKworICAgIC8vIE9uZSBFeHBlY3RlZCwgb25lIHZhbHVlLgorICAgIEVYUEVDVF9FUShFeCg0
MiksIDQyKTsKKyAgICBFWFBFQ1RfTkUoRXgoNDIpLCAwKTsKKyAgICBFWFBFQ1RfTFQoRXgoNDIp
LCAxMDI0KTsKKyAgICBFWFBFQ1RfR1QoRXgoMTAyNCksIDQyKTsKKyAgICBFWFBFQ1RfTEUoRXgo
NDIpLCA0Mik7CisgICAgRVhQRUNUX0dFKEV4KDQyKSwgNDIpOworICAgIEVYUEVDVF9MRShFeCg0
MiksIDEwMjQpOworICAgIEVYUEVDVF9HRShFeCgxMDI0KSwgNDIpOworCisgICAgRVhQRUNUX0ZB
TFNFKEV4KDQyKSA9PSAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoRXgoNDIpICE9IDQyKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRXgoMTAyNCkgPCA0Mik7CisgICAgRVhQRUNUX0ZBTFNFKEV4KDQyKSA+IDEw
MjQpOworICAgIEVYUEVDVF9GQUxTRShFeCgxMDI0KSA8IDQyKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RXgoNDIpID49IDEwMjQpOworCisgICAgRVhQRUNUX0VRKDQyLCBFeCg0MikpOworICAgIEVYUEVD
VF9ORSg0MiwgRXgoMTAyNCkpOworICAgIEVYUEVDVF9MVCg0MiwgRXgoMTAyNCkpOworICAgIEVY
UEVDVF9HVCgxMDI0LCBFeCg0MikpOworICAgIEVYUEVDVF9MRSg0MiwgRXgoNDIpKTsKKyAgICBF
WFBFQ1RfR0UoNDIsIEV4KDQyKSk7CisgICAgRVhQRUNUX0xFKDQyLCBFeCgxMDI0KSk7CisgICAg
RVhQRUNUX0dFKDEwMjQsIEV4KDQyKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoNDIgPT0gRXgoMTAy
NCkpOworICAgIEVYUEVDVF9GQUxTRSg0MiAhPSBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRSgx
MDI0IDwgRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoNDIgPiBFeCgxMDI0KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKDEwMjQgPD0gRXgoNDIpKTsKKyAgICBFWFBFQ1RfRkFMU0UoNDIgPj0gRXgoMTAy
NCkpOworCisgICAgLy8gT25lIEV4cGVjdGVkLCBvbmUgdW5leHBlY3RlZC4KKyAgICBFWFBFQ1Rf
RkFMU0UoRXgoNDIpID09IG1ha2VVbmV4cGVjdGVkKG9vcHMpKTsKKyAgICBFWFBFQ1RfTkUoRXgo
NDIpLCBtYWtlVW5leHBlY3RlZChvb3BzKSk7CisgICAgRVhQRUNUX0xUKEV4KDQyKSwgbWFrZVVu
ZXhwZWN0ZWQob29wcykpOworICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPiBtYWtlVW5leHBlY3Rl
ZChvb3BzKSk7CisgICAgRVhQRUNUX0xFKEV4KDQyKSwgbWFrZVVuZXhwZWN0ZWQob29wcykpOwor
ICAgIEVYUEVDVF9GQUxTRShFeCg0MikgPj0gbWFrZVVuZXhwZWN0ZWQob29wcykpOworCisgICAg
RVhQRUNUX0ZBTFNFKG1ha2VVbmV4cGVjdGVkKG9vcHMpID09IEV4KDQyKSk7CisgICAgRVhQRUNU
X05FKG1ha2VVbmV4cGVjdGVkKG9vcHMpLCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShtYWtl
VW5leHBlY3RlZChvb3BzKSA8IEV4KDQyKSk7CisgICAgRVhQRUNUX0dUKG1ha2VVbmV4cGVjdGVk
KG9vcHMpLCBFeCg0MikpOworICAgIEVYUEVDVF9GQUxTRShtYWtlVW5leHBlY3RlZChvb3BzKSA8
PSBFeCg0MikpOworICAgIEVYUEVDVF9HRShtYWtlVW5leHBlY3RlZChvb3BzKSwgRXgoNDIpKTsK
K30KKworc3RydWN0IE5vblRyaXZpYWxEdG9yIHsKKyAgICB+Tm9uVHJpdmlhbER0b3IoKSB7ICsr
Y291bnQ7IH0KKyAgICBzdGF0aWMgaW50IGNvdW50OworfTsKK2ludCBOb25Ucml2aWFsRHRvcjo6
Y291bnQgPSAwOworCitURVNUKFdURl9FeHBlY3RlZCwgZGVzdHJ1Y3RvcnMpCit7CisgICAgdHlw
ZWRlZiBFeHBlY3RlZDxOb25Ucml2aWFsRHRvciwgY29uc3QgY2hhcio+IE5UOworICAgIHR5cGVk
ZWYgRXhwZWN0ZWQ8Y29uc3QgY2hhciosIE5vblRyaXZpYWxEdG9yPiBUTjsKKyAgICB0eXBlZGVm
IEV4cGVjdGVkPE5vblRyaXZpYWxEdG9yLCBOb25Ucml2aWFsRHRvcj4gTk47CisgICAgdHlwZWRl
ZiBFeHBlY3RlZDx2b2lkLCBOb25Ucml2aWFsRHRvcj4gVk47CisgICAgRVhQRUNUX0VRKE5vblRy
aXZpYWxEdG9yOjpjb3VudCwgMCk7CisgICAgeyBOVCBudDsgfQorICAgIEVYUEVDVF9FUShOb25U
cml2aWFsRHRvcjo6Y291bnQsIDEpOworICAgIHsgTlQgbnQgPSBtYWtlVW5leHBlY3RlZChvb3Bz
KTsgfQorICAgIEVYUEVDVF9FUShOb25Ucml2aWFsRHRvcjo6Y291bnQsIDEpOworICAgIHsgVE4g
dG47IH0KKyAgICBFWFBFQ1RfRVEoTm9uVHJpdmlhbER0b3I6OmNvdW50LCAxKTsKKyAgICB7IFRO
IHRuID0gbWFrZVVuZXhwZWN0ZWQoTm9uVHJpdmlhbER0b3IoKSk7IH0KKyAgICBFWFBFQ1RfRVEo
Tm9uVHJpdmlhbER0b3I6OmNvdW50LCA0KTsKKyAgICB7IE5OIG5uOyB9CisgICAgRVhQRUNUX0VR
KE5vblRyaXZpYWxEdG9yOjpjb3VudCwgNSk7CisgICAgeyBOTiBubiA9IG1ha2VVbmV4cGVjdGVk
KE5vblRyaXZpYWxEdG9yKCkpOyB9CisgICAgRVhQRUNUX0VRKE5vblRyaXZpYWxEdG9yOjpjb3Vu
dCwgOCk7CisgICAgeyBWTiB2bjsgfQorICAgIEVYUEVDVF9FUShOb25Ucml2aWFsRHRvcjo6Y291
bnQsIDgpOworICAgIHsgVk4gdm4gPSBtYWtlVW5leHBlY3RlZChOb25Ucml2aWFsRHRvcigpKTsg
fQorICAgIEVYUEVDVF9FUShOb25Ucml2aWFsRHRvcjo6Y291bnQsIDExKTsKK30KKworVEVTVChX
VEZfRXhwZWN0ZWQsIGhhc2gpCit7CisgICAgdHlwZWRlZiBFeHBlY3RlZDxpbnQsIGNvbnN0IGNo
YXIqPiBFOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxFLCBpbnQ+IG07CisgICAgbS5pbnNlcnQo
eyBFKDQyKSwgNDIgfSk7CisgICAgbS5pbnNlcnQoeyBFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKSwg
NSB9KTsKKyAgICBtLmluc2VydCh7IEUoMTAyNCksIDEwMjQgfSk7CisgICAgbS5pbnNlcnQoeyBF
KG1ha2VVbmV4cGVjdGVkKGZvb2YpKSwgMHhmMDBmIH0pOworICAgIEVYUEVDVF9FUShtW0UoNDIp
XSwgNDIpOworICAgIEVYUEVDVF9FUShtW0UoMTAyNCldLCAxMDI0KTsKKyAgICBFWFBFQ1RfRVEo
bVtFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKV0sIDUpOworICAgIEVYUEVDVF9FUShtW0UobWFrZVVu
ZXhwZWN0ZWQoZm9vZikpXSwgMHhmMDBmKTsKK30KKworVEVTVChXVEZfRXhwZWN0ZWQsIGhhc2hf
dm9pZCkKK3sKKyAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIGNvbnN0IGNoYXIqPiBFOworICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxFLCBpbnQ+IG07CisgICAgbS5pbnNlcnQoeyBFKCksIDQyIH0p
OworICAgIG0uaW5zZXJ0KHsgRShtYWtlVW5leHBlY3RlZChvb3BzKSksIDUgfSk7CisgICAgbS5p
bnNlcnQoeyBFKG1ha2VVbmV4cGVjdGVkKGZvb2YpKSwgMHhmMDBmIH0pOworICAgIEVYUEVDVF9F
UShtW0UoKV0sIDQyKTsKKyAgICBFWFBFQ1RfRVEobVtFKG1ha2VVbmV4cGVjdGVkKG9vcHMpKV0s
IDUpOworICAgIEVYUEVDVF9FUShtW0UobWFrZVVuZXhwZWN0ZWQoZm9vZikpXSwgMHhmMDBmKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYmtpdEFQSQotLSAKMi45LjMKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>