<?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>152952</bug_id>
          
          <creation_ts>2016-01-09 19:57:28 -0800</creation_ts>
          <short_desc>Air needs a Shuffle instruction</short_desc>
          <delta_ts>2016-01-25 09:22:09 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>152953</dependson>
    
    <dependson>153132</dependson>
    
    <dependson>153426</dependson>
          <blocked>150456</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154185</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-09 19:57:28 -0800</bug_when>
    <thetext>Shuffle would allow you to shuffle data between multiple temporaries and memory locations.  It can be lowered to Move&apos;s late.  There are a variety of things we can use this for:

- More efficient lowering of Phi/Upsilon.
- Strength reduction of multiple consecutive Move instructions.
- Intelligently marshalling arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154520</commentid>
    <comment_count>1</comment_count>
      <attachid>268720</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-11 15:55:07 -0800</bug_when>
    <thetext>Created attachment 268720
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154557</commentid>
    <comment_count>2</comment_count>
      <attachid>268731</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-11 17:05:25 -0800</bug_when>
    <thetext>Created attachment 268731
wrote some stuff

Dude, shuffles are so gnarly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154603</commentid>
    <comment_count>3</comment_count>
      <attachid>268740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-11 18:55:07 -0800</bug_when>
    <thetext>Created attachment 268740
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154615</commentid>
    <comment_count>4</comment_count>
      <attachid>268743</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-11 20:42:11 -0800</bug_when>
    <thetext>Created attachment 268743
some more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154625</commentid>
    <comment_count>5</comment_count>
      <attachid>268746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-11 21:40:09 -0800</bug_when>
    <thetext>Created attachment 268746
some more lowering done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154807</commentid>
    <comment_count>6</comment_count>
      <attachid>268792</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-12 11:44:53 -0800</bug_when>
    <thetext>Created attachment 268792
almost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154922</commentid>
    <comment_count>7</comment_count>
      <attachid>268817</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-12 15:16:49 -0800</bug_when>
    <thetext>Created attachment 268817
starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154990</commentid>
    <comment_count>8</comment_count>
      <attachid>268836</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-12 18:47:33 -0800</bug_when>
    <thetext>Created attachment 268836
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154991</commentid>
    <comment_count>9</comment_count>
      <attachid>268837</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-12 19:10:47 -0800</bug_when>
    <thetext>Created attachment 268837
starting to work on tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155000</commentid>
    <comment_count>10</comment_count>
      <attachid>268841</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-12 19:25:47 -0800</bug_when>
    <thetext>Created attachment 268841
it compiled its first shuffle!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155176</commentid>
    <comment_count>11</comment_count>
      <attachid>268893</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 12:36:43 -0800</bug_when>
    <thetext>Created attachment 268893
more tests

I haven&apos;t tested this on JS code or even B3.  I&apos;m still writing shuffle tests in testair.  I&apos;m finding a lot of bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155242</commentid>
    <comment_count>12</comment_count>
      <attachid>268904</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 14:30:21 -0800</bug_when>
    <thetext>Created attachment 268904
even more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155253</commentid>
    <comment_count>13</comment_count>
      <attachid>268906</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 14:59:34 -0800</bug_when>
    <thetext>Created attachment 268906
fixed the &quot;fringe&quot; case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155335</commentid>
    <comment_count>14</comment_count>
      <attachid>268928</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 18:43:09 -0800</bug_when>
    <thetext>Created attachment 268928
even more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155340</commentid>
    <comment_count>15</comment_count>
      <attachid>268929</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 19:12:55 -0800</bug_when>
    <thetext>Created attachment 268929
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155344</commentid>
    <comment_count>16</comment_count>
      <attachid>268931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 20:11:48 -0800</bug_when>
    <thetext>Created attachment 268931
write all the shuffle tests

And they all pass.

Now I need to actually test B3 and JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155368</commentid>
    <comment_count>17</comment_count>
      <attachid>268942</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-13 22:00:14 -0800</bug_when>
    <thetext>Created attachment 268942
passes testb3

Not brave enough to run JSC tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155502</commentid>
    <comment_count>18</comment_count>
      <attachid>268982</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 11:42:00 -0800</bug_when>
    <thetext>Created attachment 268982
passes everything

Next I&apos;ll rebase and test performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155506</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 11:51:28 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created attachment 268982 [details]
&gt; passes everything
&gt; 
&gt; Next I&apos;ll rebase and test performance.

I messed up.  I never tested JSC, because I had FTL_USES_B3 disabled accidentally.  Testing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155532</commentid>
    <comment_count>20</comment_count>
      <attachid>268990</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 12:52:52 -0800</bug_when>
    <thetext>Created attachment 268990
fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155560</commentid>
    <comment_count>21</comment_count>
      <attachid>268999</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 13:41:33 -0800</bug_when>
    <thetext>Created attachment 268999
the patch

Passes tests for real now.

Still running perf tests.  Note that this patch may not be a speed-up yet since the function calls that we&apos;re most interested in slowpathing may not be marked as slow in FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155564</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-14 13:44:31 -0800</bug_when>
    <thetext>Attachment 268999 did not pass style-queue:

ERROR: Source/JavaScriptCore/b3/air/AirArg.h:899:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirArg.h:1067:  The parameter name &quot;tmp&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.cpp:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:111:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:172:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:173:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:174:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:175:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:208:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:209:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:211:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:212:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:257:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:258:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:259:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:260:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:261:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:262:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:263:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:264:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:309:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:310:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:311:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:312:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:313:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:314:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:315:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:316:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:349:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:350:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:351:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:352:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:385:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:386:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:387:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:388:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:429:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:474:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:475:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:476:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:477:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:478:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:479:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:480:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:481:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:526:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:527:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:528:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:529:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:530:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:531:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:532:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:533:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:581:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:582:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:583:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:584:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:585:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:586:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:587:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:588:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:626:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:627:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:628:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:629:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:630:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:631:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:671:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:672:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:673:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:674:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:675:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:676:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:716:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:717:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:718:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:719:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:720:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:721:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:761:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:762:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:763:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:764:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:765:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:766:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:805:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:806:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:807:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:808:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:809:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:810:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:844:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:915:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:916:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:917:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:918:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:952:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:953:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:954:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:955:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:956:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:988:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:989:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:990:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1025:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1026:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1027:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1028:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1063:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1064:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1065:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1066:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1110:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1111:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1112:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1113:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1114:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1159:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1160:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1163:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1164:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1209:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1213:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1214:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1273:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/test
air.cpp:1280:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1322:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1323:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1324:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1325:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1367:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1368:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1369:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1370:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1412:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1414:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1463:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1466:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1467:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1519:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1551:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1552:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1553:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1554:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1585:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1586:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1587:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1588:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1660:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.h:160:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:43:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:260:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:274:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:279:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:301:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:202:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirArg.cpp:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 163 in 36 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>1155599</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 15:00:35 -0800</bug_when>
    <thetext>This budges Octane a bit.

Benchmark report for Octane on shakezilla (MacBookPro11,3).

VMs tested:
&quot;B3ToT&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r195068)
&quot;MyB3&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r195068)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                             B3ToT                      MyB3                                       

encrypt                 0.18547+-0.00245          0.18219+-0.00320         might be 1.0180x faster
decrypt                 3.33338+-0.01012    ^     3.28963+-0.01887       ^ definitely 1.0133x faster
deltablue      x2       0.15472+-0.00308    ?     0.15811+-0.00299       ? might be 1.0219x slower
earley                  0.28600+-0.00586          0.28277+-0.00154         might be 1.0114x faster
boyer                   4.39554+-0.02106    ?     4.48437+-0.13929       ? might be 1.0202x slower
navier-stokes  x2       4.97240+-0.06165    ^     4.86395+-0.03798       ^ definitely 1.0223x faster
raytrace       x2       0.89450+-0.00688    ?     0.90239+-0.00609       ?
richards       x2       0.10200+-0.00085    ^     0.09807+-0.00122       ^ definitely 1.0400x faster
splay          x2       0.35827+-0.00617    ?     0.36379+-0.00655       ? might be 1.0154x slower
regexp         x2      25.07125+-0.42479         24.77402+-0.44224         might be 1.0120x faster
pdfjs          x2      37.57652+-0.46403    ?    37.59875+-0.18492       ?
mandreel       x2      54.51440+-0.45828         54.28113+-0.42725       
gbemu          x2      31.46078+-0.20345         31.31054+-0.20906       
closure                 0.58992+-0.00356    ?     0.59301+-0.00166       ?
jquery                  7.40003+-0.06696    ?     7.45680+-0.04719       ?
box2d          x2       9.47360+-0.05937          9.44264+-0.06581       
zlib           x2     405.78555+-5.11582        402.11728+-14.82079      
typescript     x2     666.00041+-9.36410    ?   675.34041+-21.78033      ? might be 1.0140x slower

&lt;geometric&gt;             5.65118+-0.01075          5.63621+-0.03861         might be 1.0027x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155602</commentid>
    <comment_count>24</comment_count>
      <attachid>269013</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 15:02:20 -0800</bug_when>
    <thetext>Created attachment 269013
the ptach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155604</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-14 15:04:03 -0800</bug_when>
    <thetext>Attachment 269013 did not pass style-queue:

ERROR: Source/JavaScriptCore/b3/air/AirArg.h:899:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirArg.h:1067:  The parameter name &quot;tmp&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.cpp:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExitHandle.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:111:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:172:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:173:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:174:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:175:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:208:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:209:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:211:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:212:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:257:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:258:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:259:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:260:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:261:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:262:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:263:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:264:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:309:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:310:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:311:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:312:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:313:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:314:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:315:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:316:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:349:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:350:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:351:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:352:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:385:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:386:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:387:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:388:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:429:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:474:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:475:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:476:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:477:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:478:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:479:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:480:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:481:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:526:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:527:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:528:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:529:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:530:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:531:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:532:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:533:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:581:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:582:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:583:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:584:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:585:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:586:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:587:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:588:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:626:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:627:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:628:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:629:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:630:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:631:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:671:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:672:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:673:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:674:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:675:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:676:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:716:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:717:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:718:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:719:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:720:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:721:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:761:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:762:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:763:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:764:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:765:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:766:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:805:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:806:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:807:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:808:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:809:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:810:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:844:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:915:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:916:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:917:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:918:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:952:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:953:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:954:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:955:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:956:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:988:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:989:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:990:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1025:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1026:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1027:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1028:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1063:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1064:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1065:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1066:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1110:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1111:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1112:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1113:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1114:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1159:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1160:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1163:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1164:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1209:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1213:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1214:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3
/air/testair.cpp:1273:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1280:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1322:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1323:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1324:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1325:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1367:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1368:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1369:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1370:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1412:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1414:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1463:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1466:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1467:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1519:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1551:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1552:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1553:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1554:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1585:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1586:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1587:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1588:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/testair.cpp:1660:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCustom.h:160:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:43:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:260:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:274:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:279:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:301:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:202:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:87:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirArg.cpp:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 165 in 40 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>1155624</commentid>
    <comment_count>26</comment_count>
      <attachid>269013</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-14 16:09:51 -0800</bug_when>
    <thetext>Comment on attachment 269013
the ptach

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155639</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-14 16:59:05 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/195084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155789</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-01-15 09:02:27 -0800</bug_when>
    <thetext>This broke the build:

JavaScriptCore/b3/air/AirInst.h:32:10: fatal error: &apos;AirOpcode.h&apos; file not found

Sorry that it took so long to notice, only rolling out now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155792</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-15 09:04:41 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 153132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156337</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-17 15:04:07 -0800</bug_when>
    <thetext>This was relanded with Alexey&apos;s help in http://trac.webkit.org/changeset/195139.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268720</attachid>
            <date>2016-01-11 15:55:07 -0800</date>
            <delta_ts>2016-01-11 17:05:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15400</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5
NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI1LDE2ICsyMjUsMTYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEFyZwogewogICAgIHN3aXRjaCAod2lkdGgpIHsKICAgICBjYXNlIEFyZzo6V2lk
dGg4OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIpOworICAgICAgICBvdXQucHJpbnQoIjgi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDE2OgotICAgICAgICBvdXQu
cHJpbnQoIldpZHRoMTYiKTsKKyAgICAgICAgb3V0LnByaW50KCIxNiIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgzMiIp
OworICAgICAgICBvdXQucHJpbnQoIjMyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFy
Zzo6V2lkdGg2NDoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIG91dC5w
cmludCgiNjQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiArNjA1LDE5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAg
ICBib29sIGlzTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBD
YWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
a2luZCgpID09IFJlbENvbmQ7CkBAIC02ODAsMTggKzY5Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fYmFzZTsKICAgICB9CiAKLSAgICBib29sIGhhc09mZnNldCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgICAgICBjYXNlIEFkZHI6Ci0gICAgICAg
IGNhc2UgU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2FsbEFyZzoKLSAgICAgICAgY2FzZSBJbmRleDoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gaXNNZW1vcnkoKTsgfQogICAgIAogICAgIGludDMyX3Qgb2Zmc2V0KCkgY29u
c3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJTaHVmZmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
U2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+IiwgZHN0KCkpOworfQorCitWZWN0b3I8SW5zdD4g
ZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFpcnMsIHN0ZDo6
YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQor
eworICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBpcyB0aGUga2luZCBvZiBzaHVmZmxl
IHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAgIGZvciAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFpci5maXJzdCgpLmlzVHlwZSh0
eXBlKSk7CisgICAgICAgIEFTU0VSVChwYWlyLnNlY29uZCgpLmlzVHlwZSh0eXBlKSk7CisgICAg
ICAgIEFTU0VSVChwYWlyLnNlY29uZCgpLmlzVG1wKCkgfHwgcGFpci5zZWNvbmQoKS5pc01lbW9y
eSgpKTsKKyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9w
ZXJhdGlvbnMgdGhhdCB3ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBs
ZTogKGEgPT4gYiwgYiA9PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwg
YiIuIFRoaXMgb25seSByZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhl
cmUgYXJlIG1lbW9yeS0+bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0
aGVzZSBhcworICAgIC8vICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLgorICAg
IC8vCisgICAgLy8gLSBSb3RhdGUuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQg
dG8gZW1pdCB0aGlzIGFzICJTd2FwIGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8v
ICAgbWF5IG5vdCBiZSBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3Jh
dGNoIHJlZ2lzdGVyIG9yIGEgc2NyYXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGdu
YXJsaWVyIGV4YW1wbGUgaXMgKGEgPT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0
aGlzIGFzICJTd2FwIGIsIGM7CisgICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBp
bmcgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAg
IC8vIFdlIHdpbGwgZmluZCBtdWx0aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJhdGlvbnMuIFdlIGNh
biBleGVjdXRlIHRoZW0gaW4gYW55IG9yZGVyLgorCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNl
IGFzIE1vdmVzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4KKyAgICBWZWN0b3I8
VmVjdG9yPFNodWZmbGVQYWlyPj4gc2hpZnRzOworCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNl
IGFzIFN3YXBzIG92ZXIgc3JjKCkncyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMs
IGkuZS4gZm9yIGEgbGlzdAorICAgIC8vIG9mIHNpemUgMyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0
WzFdLnNyYygpLCBsaXN0WzJdLnNyYygpOyBTd2FwIGxpc3RbMF0uc3JjKCksIGxpc3RbMV0uc3Jj
KCkiLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3
aWR0aHMgZG9uJ3QgbWF0Y2ggb3Igb3RoZXIgYmFkIHRoaW5ncyBoYXBwZW4uCisgICAgVmVjdG9y
PFZlY3RvcjxTaHVmZmxlUGFpcj4+IHJvdGF0ZXM7CisKKyAgICB7CisgICAgICAgIEhhc2hNYXA8
QXJnLCBTaHVmZmxlUGFpcj4gbWFwcGluZzsKKyAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFp
ciYgcGFpciA6IHBhaXJzKQorICAgICAgICAgICAgbWFwcGluZy5hZGQocGFpci5zcmMoKSwgcGFp
cik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7CisKKyAgICAg
ICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgSGFzaE1hcDxBcmcs
IFNodWZmbGVQYWlyPjo6aXRlcmF0b3IgaXRlciA9IG1hcHBpbmcuYmVnaW4oKTsKKyAgICAgICAg
ICAgIFNodWZmbGVQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgICAgIG1hcHBpbmcucmVtb3Zl
KGl0ZXIpOworCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgY3VycmVu
dFBhaXJzLmFwcGVuZChwYWlyKTsKKworICAgICAgICAgICAgICAgIGl0ZXIgPSBtYXBwaW5nLmZp
bmQocGFpci5kc3QoKSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbWFwcGluZy5lbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKSA9PSBjdXJyZW50UGFpcnNb
MF0uc3JjKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChXVEZNb3Zl
KGN1cnJlbnRQYWlycykpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBzaGlmdHMuYXBwZW5kKFdURk1vdmUoY3VycmVudFBhaXJzKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBwYWlyID0gKml0ZXI7CisgICAgICAgICAgICAgICAgbWFwcGluZy5y
ZW1vdmUoaXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJ
biB0aGUgd29yc3QgY2FzZSwgd2UgbmVlZCB0d28gc2NyYXRjaCByZWdpc3RlcnMuIFRoZSB3YXkg
d2UgZG8gdGhpcyBpcyB0aGF0IHRoZSBjbGllbnQgcGFzc2VzCisgICAgLy8gdXMgd2hhdCBzY3Jh
dGNoIHJlZ2lzdGVycyBoZSBoYXBwZW5zIHRvIGhhdmUgbGF5aW5nIGFyb3VuZC4gV2Ugd2lsbCBu
ZWVkIHNjcmF0Y2ggcmVnaXN0ZXJzIGluCisgICAgLy8gdGhlIGZvbGxvd2luZyBjYXNlczoKKyAg
ICAvLworICAgIC8vIC0gU2h1ZmZsZSBwYWlycyB3aGVyZSBib3RoIHNyYyBhbmQgZHN0IHJlZmVy
IHRvIG1lbW9yeS4KKyAgICAvLyAtIFJvdGF0ZSB3aGVuIG5vIFN3YXAgaW5zdHJ1Y3Rpb24gaXMg
YXZhaWxhYmxlLgorICAgIC8vCisgICAgLy8gTHVja3kgZm9yIHVzLCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBoYXZlIGV4dHJhIHNjcmF0Y2ggcmVnaXN0ZXJzIGFueXRpbWUgd2UgaGF2ZSBhIFNoaWZ0
IHRoYXQKKyAgICAvLyBlbmRzIHdpdGggYSByZWdpc3Rlci4gV2Ugc2VhcmNoIGZvciBzdWNoIGEg
cmVnaXN0ZXIgcmlnaHQgbm93LgorCisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlm
dCA6IHNoaWZ0cykgeworICAgICAgICBBcmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsK
KyAgICAgICAgaWYgKGxhc3REc3QuaXNUbXAoKSkgeworICAgICAgICAgICAgZm9yIChBcmcmIHNj
cmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBs
YXN0RHN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgeworICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoID0gbGFzdERzdDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgYXV0byBtb3ZlRm9yV2lkdGggPSBbJl0gKFdpZHRoIHdpZHRoKSAtPiBPcGNvZGUgewor
ICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAg
ICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAg
IGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3Zl
IDogTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3Bjb2RlIGNvbnNl
cnZhdGl2ZU1vdmUgPSBtb3ZlRm9yV2lkdGgoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSk7
CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBjb25zdCBBcmcm
IGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgLT4gVG1wIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hlc1tp
bmRleF0uaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoZXNbaW5kZXhdLnRtcCgp
OworCisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblBy
aW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAg
ICAgICAgYXV0byBleGNsdWRlVG1wID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRtcCA9PSBUbXAocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBhcmcxLmZvckVhY2hUbXBGYXN0KGV4Y2x1ZGVUbXAp
OworICAgICAgICAgICAgYXJnMi5mb3JFYWNoVG1wRmFzdChleGNsdWRlVG1wKTsKKyAgICAgICAg
ICAgIGlmIChvaykgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlZzsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHJlc3VsdCwgc2NyYXRjaGVzW2lu
ZGV4XSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICBhdXRvIHJldHVy
blNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChB
cmcodG1wKSA9PSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHNjcmF0Y2hl
c1tpbmRleF0sIHRtcCkpOworICAgIH07CisKKyAgICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFpcj4m
IHNoaWZ0IDogc2hpZnRzKSB7CisgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiBzaGlm
dCkgeworICAgICAgICAgICAgaWYgKHNoaWZ0LnNyYygpLmlzTWVtb3J5KCkgJiYgc2hpZnQuZHN0
KCkuaXNNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRj
aCgwLCBzaGlmdC5zcmMoKSwgc2hpZnQuZHN0KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgoc2hpZnQud2lkdGgoKSksIG9yaWdpbiwgc2hpZnQuc3Jj
KCksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZv
cldpZHRoKHNoaWZ0LndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gsIHNoaWZ0LmRzdCgpKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzaGlmdC53aWR0aCgpKSwgb3JpZ2luLiBzaGlm
dC5zcmMoKSwgc2hpZnQuZHN0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoVmVj
dG9yPFNodWZmbGVQYWlyPiYgcm90YXRlIDogcm90YXRlcykgeworICAgICAgICAKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAg
Y29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxB
cmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoKQor
eworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXJnLCBBcmc+PiBncFBhaXJzOworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8QXJnLCBBcmc+PiBmcFBhaXJzOworICAgIGZvciAoc3RkOjpwYWlyPEFyZywgQXJn
PiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QuaXNNZW1vcnkoKSAmJiBw
YWlyLnNlY29uZC5pc01lbW9yeSgpICYmIHBhaXIud2lkdGgoKSA+IHBvaW50ZXJXaWR0aCgpKSB7
CisgICAgICAgICAgICAvLyA4LWJ5dGUgbWVtb3J5LXRvLW1lbW9yeSBtb3ZlcyBvbiBhIDMyLWJp
dCBwbGF0Zm9ybSBhcmUgYmVzdCBoYW5kbGVkIGFzIGZsb2F0IG1vdmVzLgorICAgICAgICAgICAg
ZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgICAgIH0gZWxzZSBpZiAocGFpci5maXJzdC5pc0dQ
KCkgJiYgcGFpci5zZWNvbmQuaXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgZ3BQYWlycyBnZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9u
IGlzIHRoYXQgd2UKKyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkg
dXNpbmcgR1BScywgZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAg
ICBncFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBh
aXJzLmFwcGVuZChwYWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAg
IHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6
OkdQKSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNj
cmF0Y2gsIEFyZzo6RlApKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRW1pdFNodWZmbGVfaAorI2RlZmluZSBBaXJF
bWl0U2h1ZmZsZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1Ymxp
YzoKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIFdpZHRo
IHdpZHRoKQorICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAgICAgLCBtX2RzdChkc3QpCisgICAg
ICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJnJiBzcmMo
KSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0IEFyZyYgZHN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kc3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRoZSBraW5kIG9m
IG1vdmUgd2UgZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0aDY0IHJpZ2h0
IG5vdy4KKyAgICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFuZCBNb3ZlLiBG
b3IgRlAsIGl0IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91YmxlLgorICAgIFdp
ZHRoIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBB
cmcgbV9kc3Q7CisgICAgV2lkdGggbV93aWR0aDsKK307CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxl
IG9mIGEgZ2l2ZW4gdHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5LiBZb3Ug
c2hvdWxkIHBhc3MgaXQgYXMKKy8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUg
c2NyYXRjaCByZWdpc3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBpcywgdGhl
eSdyZQorLy8gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNodWZmbGUs
IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKKy8vIGxpdmUg
YXQgdGhlIHNodWZmbGUgLSB0aGVuIHlvdSBjYW4gcGFzcyB0aGVtLiBJZiB5b3UgZG9uJ3QgaGF2
ZSBzY3JhdGNoIHJlZ2lzdGVycyBhdmFpbGFibGUgb3IgaWYKKy8vIHlvdSBkb24ndCBmZWVsIGxp
a2UgbG9va2luZyBmb3IgdGhlbSwgeW91IGNhbiBwYXNzIG1lbW9yeSBsb2NhdGlvbnMuIEl0J3Mg
YWx3YXlzIHNhZmUgdG8gcGFzcyBhCisvLyBwYWlyIG9mIG1lbW9yeSBsb2NhdGlvbnMsIGFuZCBy
ZXBsYWNpbmcgZWl0aGVyIG1lbW9yeSBsb2NhdGlvbiB3aXRoIGEgcmVnaXN0ZXIgY2FuIGJlIHZp
ZXdlZCBhcyBhbgorLy8gb3B0aW1pemF0aW9uLiBJdCdzIGEgcHJldHR5IGltcG9ydGFudCBvcHRp
bWl6YXRpb24uIFNvbWUgbW9yZSBub3RlczoKKy8vCisvLyAtIFdlIGRlZmluZSBzY3JhdGNoIHJl
Z2lzdGVycyBhcyB0aGluZ3MgdGhhdCBhcmUgbm90IGxpdmUgYWZ0ZXIgdGhlIHNodWZmbGUuIFRo
YXQgbWVhbnMgdGhhdAorLy8gICBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUgY2Fubm90IGJl
IHNjcmF0Y2guCisvLworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVl
ZGVkIHdoZW4geW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3Ro
CisvLyAgIGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFu
dGVlZCBub3QgdG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2Fw
IGluc3RydWN0aW9uIGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUuIEdQIHN1cHBvcnRzIFN3
YXAgb24geDg2IHdoaWxlIEZQIG5ldmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5n
IG1lbW9yeSBsb2NhdGlvbnMgYXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgp
IGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdp
bGwgY2F1c2UgZW1pdFNodWZmbGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdo
ZW4gaXQgZG9lcyBuZWVkCisvLyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0
IHByZWRpY2FtZW50IGlzIHRvIGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0
ZXIKKy8vICAgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFk
ZCBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZs
aW5ncyB1bnRpbCBhZnRlciByZWdhbGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5
PT5tZW1vcnkgcGFpcnMgYXJlIG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQg
dGhlbSBpZiB5b3Ugd2FudAorLy8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhl
bSwgdGhlbiBtYWtpbmcgc3VyZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3
YXkgdG8KKy8vICAgZ2V0IGFjY2VwdGFibGUgcGVyZm9ybWFuY2UuCitWZWN0b3I8SW5zdD4gZW1p
dFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYsIHN0ZDo6YXJyYXk8QXJn
LCAyPiBzY3JhdGNoLCBBcmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEg
c2h1ZmZsZSB0aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCBy
ZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcg
dG8gdGhlIHJ1bGVzIGFib3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0
IFZlY3RvcjxTaHVmZmxlUGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BT
Y3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSog
b3JpZ2luKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCSh3b3JraW5nIGNvcHkpCkBAIC02NzYsMyArNjc2LDQgQEAgT29wcyAvdGVybWluYWwKICMg
d2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KIGN1c3RvbSBQYXRjaAogCitjdXN0b20g
Q29sZENDYWxsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268731</attachid>
            <date>2016-01-11 17:05:25 -0800</date>
            <delta_ts>2016-01-11 18:55:07 -0800</delta_ts>
            <desc>wrote some stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24467</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAg
IHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
c3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwog
ICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NTUsNiArNjU1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRo
aXMpOwogICAgIH0KIAorICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihz
cmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4
NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDYgKzE0MzEs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdf
RXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisK
ICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwg
c3JjLCBkc3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KICNlbmRp
ZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDg1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI1LDE2ICsyMjUsMTYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIEFyZwogewogICAgIHN3aXRjaCAod2lkdGgpIHsKICAgICBjYXNlIEFyZzo6V2lkdGg4
OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIpOworICAgICAgICBvdXQucHJpbnQoIjgiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDE2OgotICAgICAgICBvdXQucHJp
bnQoIldpZHRoMTYiKTsKKyAgICAgICAgb3V0LnByaW50KCIxNiIpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgzMiIpOwor
ICAgICAgICBvdXQucHJpbnQoIjMyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6
V2lkdGg2NDoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIG91dC5wcmlu
dCgiNjQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiArNjA1LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBi
b29sIGlzTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxs
QXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4ga2lu
ZCgpID09IFJlbENvbmQ7CkBAIC02ODAsMTggKzY5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fYmFzZTsKICAgICB9CiAKLSAgICBib29sIGhhc09mZnNldCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgICAgICBjYXNlIEFkZHI6Ci0gICAgICAgIGNh
c2UgU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2FsbEFyZzoKLSAgICAgICAgY2FzZSBJbmRleDoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gaXNNZW1vcnkoKTsgfQogICAgIAogICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QK
ICAgICB7CkBAIC05NzQsNiArOTc2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGJvb2wgdXNlc1RtcChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VzID0gZmFs
c2U7CisgICAgICAgIGZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJU
bXApIHsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAg
ICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdXNl
czsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4g
YWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8g
dG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJTaHVmZmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUg
dHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJ
blByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgaWYgKGZ1bmN0b3IocmVnKSkKKyAgICAg
ICAgICAgIHJldHVybiByZWc7CisgICAgfQorICAgIHJldHVybiBUbXAoKTsKK30KKworVG1wIGZp
bmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0IEFyZyYgYXJnMSwgY29uc3Qg
QXJnJiBhcmcyKSB7CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNjcmF0Y2goCisgICAgICAgIHR5
cGUsCisgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IWFyZzEudXNlc1RtcChUbXAocmVnKSkgJiYgIWFyZzIudXNlc1RtcChUbXAocmVnKSk7CisgICAg
ICAgIH0pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBTaHVmZmxlUGFp
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCh3aWR0aCgp
LCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZs
ZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWlycywgc3RkOjphcnJheTxBcmcs
IDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUsIFZhbHVlKiBvcmlnaW4pCit7CisgICAgLy8g
Rmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3ZSBr
bm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6
IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLmZpcnN0KCkuaXNUeXBlKHR5cGUpKTsKKyAg
ICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kKCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJU
KHBhaXIuc2Vjb25kKCkuaXNUbXAoKSB8fCBwYWlyLnNlY29uZCgpLmlzTWVtb3J5KCkpOworICAg
IH0KKworICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0
aGF0IHdlIHdpbGwgZG86CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBi
LCBiID0+IGMpLiBXZSBlbWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBv
bmx5IHJlcXVpcmVzCisgICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVt
b3J5LT5tZW1vcnkgbW92ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisg
ICAgLy8gICBwb3NzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFwZXIuCisgICAgLy8KKyAgICAv
LyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhKS4gV2Ugd2FudCB0byBlbWl0IHRo
aXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0IGluc3RydWN0aW9uCisgICAgLy8gICBtYXkgbm90
IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0
ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAgIC8vICAgbG9jYXRpb24uIEEgZ25hcmxpZXIgZXhh
bXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMgPT4gYSkuIFdlIGNhbiBlbWl0IHRoaXMgYXMgIlN3
YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwgYiIuIE5vdGUgdGhhdCBzd2FwcGluZyBoYXMgdG8g
YmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcgd2lkdGhzLgorICAgIC8vCisgICAgLy8gV2Ugd2ls
bCBmaW5kIG11bHRpcGxlIGRpc2pvaW50IHN1Y2ggb3BlcmF0aW9ucy4gV2UgY2FuIGV4ZWN1dGUg
dGhlbSBpbiBhbnkgb3JkZXIuCisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgTW92ZXMg
dGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgYmFja3dhcmRzLgorICAgIFZlY3RvcjxWZWN0b3I8U2h1
ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMg
b3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3Ig
YSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCks
IGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisgICAg
Ly8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24n
dCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICBWZWN0b3I8VmVjdG9yPFNo
dWZmbGVQYWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxBcmcsIFNodWZm
bGVQYWlyPiBtYXBwaW5nOworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDog
cGFpcnMpCisgICAgICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBwYWlyKTsKKworICAg
ICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAgICAgICB3aGlsZSAo
IW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBIYXNoTWFwPEFyZywgU2h1ZmZsZVBh
aXI+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5iZWdpbigpOworICAgICAgICAgICAgU2h1ZmZs
ZVBhaXIgcGFpciA9ICppdGVyOworICAgICAgICAgICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisK
KyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBw
ZW5kKHBhaXIpOworCisgICAgICAgICAgICAgICAgaXRlciA9IG1hcHBpbmcuZmluZChwYWlyLmRz
dCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpID09IGN1cnJlbnRQYWlyc1swXS5zcmMoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5kKFdURk1vdmUoY3VycmVudFBh
aXJzKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNoaWZ0cy5hcHBlbmQoV1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEluIHRoZSB3b3Jz
dCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4gVGhlIHdheSB3ZSBkbyB0aGlz
IGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3aGF0IHNjcmF0Y2ggcmVnaXN0
ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBXZSB3aWxsIG5lZWQgc2NyYXRj
aCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vCisgICAg
Ly8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBkc3QgcmVmZXIgdG8gbWVtb3J5
LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUu
CisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUg
ZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZlIGEgU2hpZnQgdGhhdAorICAg
IC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9yIHN1Y2ggYSByZWdpc3RlciBy
aWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsmXSAoV2lkdGggd2lkdGgpIC0+
IE9wY29kZSB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUzMiA6IE1vdmVGbG9h
dDsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJn
OjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBP
cGNvZGUgY29uc2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNlcnZhdGl2ZVdp
ZHRoKHR5cGUpKTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2Ug
bWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1p
dAorICAgIC8vIGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRo
ZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBsYWNlZAorICAgIC8vIGZpcnN0
KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0IGZyZWVzIHVw
IGl0cyBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8gaXQgYWZmZWN0cyBob3cgd2Ug
ZW1pdCB0aGluZ3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+IHJlc3VsdFBh
Y2tzOworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1pdFJlc3VsdCA9
IFsmXSAoKSB7CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwor
ICAgIH07CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAg
cG9zc2libGVTY3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAoc2NyYXRjaGVzW2luZGV4XS5p
c1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1wKCk7CisKKyAg
ICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAgICByZXR1cm4gVG1wKCk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHBvc3Np
YmxlU2NyYXRjaCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAgICByZXR1cm4gcG9zc2libGVT
Y3JhdGNoOworICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVk
IGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1wKSAhPSBzY3JhdGNoZXNbaW5k
ZXhdKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9y
aWdpbiwgc2NyYXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxl
U2hpZnRQYWlyID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciwgdW5zaWduZWQgc2NyYXRj
aEluZGV4KSB7CisgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgJiYgcGFpci5kc3Qo
KS5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9CisgICAgICAgICAgICAg
ICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZpbmRQb3NzaWJsZVNjcmF0Y2godHlwZSwgcGFp
ci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRj
aCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lk
dGgoKSksIG9yaWdpbiwgcGFpci5zcmMoKSwgc2NyYXRjaCkpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gs
IHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdp
bi4gcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgIH0KKworICAgIGF1dG8gaGFuZGxlU2hp
ZnQgPSBbJl0gKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHNoaWZ0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFp
cihzaGlmdFtpXSwgMCk7CisKKyAgICAgICAgQXJnIGxhc3REc3QgPSBzaGlmdC5sYXN0KCkuZHN0
KCk7CisgICAgICAgIGlmIChsYXN0RHN0LmlzVG1wKCkpIHsKKyAgICAgICAgICAgIGZvciAoQXJn
JiBzY3JhdGNoIDogc2NyYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2gg
IT0gbGFzdERzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFzY3JhdGNoLmlzVG1wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2NyYXRjaCA9IGxhc3REc3Q7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZpcnN0IGhhbmRsZSBzaGlmdHMgd2hvc2UgbGFzdCBkZXN0aW5hdGlvbiBp
cyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUgdXAgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgLy8g
VGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNlLCBzbyB0aGUgZmluYWwgZGVz
dGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdpbGwgYmUKKyAgICAvLyBhdmFpbGFibGUgYXMgYSBz
Y3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGluZyBlbWl0dGVkIHByaW9yIChzbywgYWZ0ZXIsIHNp
bmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAgLy8gcmV2ZXJzZSkuCisgICAgZm9yIChWZWN0b3I8
U2h1ZmZsZVBhaXI+JiBzaGlmdCA6IHNoaWZ0cykgeworICAgICAgICBpZiAoc2hpZnQubGFzdCgp
LmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAg
IGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgdGhlIHJlc3Qgb2Yg
dGhlIHNoaWZ0cy4KKyAgICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0IDogc2hpZnRz
KSB7CisgICAgICAgIGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAg
ICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKwor
ICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYgcm90YXRlIDogcm90YXRlcykgeworICAgICAg
ICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3YXAgPSBPb3BzOworICAg
ICAgICBXaWR0aCBzd2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8gYm9ndXMgdmFsdWUKKyAgICAg
ICAgCisgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKKyAgICAgICAgICAgIHN3YXAgPSBT
d2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoMzI7CisgICAgICAgICAg
ICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6Oldp
ZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7CisgICAgICAgICAgICAg
ICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBj
YW5Td2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6VG1wKTsKKyAgICAgICAg
ICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocGFpci5zcmMoKS5pc01lbW9yeSgpIHx8IHBhaXIuZHN0KCkuaXNNZW1vcnkoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBB
cmc6OkFkZHIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHRha2UgdGhlIHN3
YXBwaW5nIHBhdGggaWYgdGhlcmUgaXMgYSBtaXggb2Ygd2lkdGhzLiBUaGF0IGdldHMgdG9vCisg
ICAgICAgICAgICAgICAgICAgIC8vIGNvbmZ1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgY2Fu
U3dhcCAmPSAocGFpci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuU3dhcCkgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAtIDE7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsKKyAgICAgICAgICAgICAgICBB
cmcgcmlnaHQgPSByb3RhdGVbaSArIDFdLnNyYygpOworCisgICAgICAgICAgICAgICAgaWYgKGxl
ZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21lLiBSb3RhdGVzIGFyZSBy
YXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmluZyBkYXRh
IGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBhIGxvdCBvZiByYXJlIHN0
dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFwcGVuIGF0IG9uY2UuCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGdl
dFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCByaWdodCkpOworICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4s
IGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0
KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIHNjcmF0Y2gs
IGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdodCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWly
LndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBk
byBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0LCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdHJlYXQgdGhpcyBh
cyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5hdGlvbiAoaS5lLiBm
aXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJzdC4gVGhlbiB3ZSBo
YW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3RhdGUKKyAgICAgICAg
ICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBkZXN0aW5hdGlvbi4g
VGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAgICAgLy8gZmluZCBh
IHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZlIGEgcm90YXRlIHRo
YXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUgcmVnaXN0ZXIgZmls
ZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVTY3JhdGNoKAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIu
ZHN0KCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBzY3JhdGNoID0g
Z2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUgPSBz
Y3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1ZmZsZVBhaXIocm90YXRlLmxhc3QoKS5kc3QoKSwg
cm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAgaGFu
ZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7CisKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFp
cihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGVbMF0uZHN0KCksIHJvdGF0ZVswXS53aWR0
aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAgICAgICAgICAgIHJl
dHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBjb21taXRSZXN1
bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAgICAgIHJlc3VsdC5h
cHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
VmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4m
IHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBz
dGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFy
ZywgQXJnPj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFyZywgQXJnPj4gZnBQYWly
czsKKyAgICBmb3IgKHN0ZDo6cGFpcjxBcmcsIEFyZz4gcGFpciA6IHBhaXJzKSB7CisgICAgICAg
IGlmIChwYWlyLmZpcnN0LmlzTWVtb3J5KCkgJiYgcGFpci5zZWNvbmQuaXNNZW1vcnkoKSAmJiBw
YWlyLndpZHRoKCkgPiBwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gOC1ieXRlIG1l
bW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJlIGJlc3QgaGFuZGxl
ZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOworICAg
ICAgICB9IGVsc2UgaWYgKHBhaXIuZmlyc3QuaXNHUCgpICYmIHBhaXIuc2Vjb25kLmlzR1AoKSkg
eworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBtZW1vcnktdG8t
bWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisgICAgICAgICAgICAv
LyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2VwdCBpbiB0aGUg
c3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQocGFpcik7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgfQor
CisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRT
aHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCkpOworICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3IoZW1pdFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBBcmc6OkZQKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJFbWl0U2h1ZmZsZV9oCisjZGVmaW5lIEFpckVtaXRTaHVmZmxlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgU2h1ZmZsZVBhaXIgeworcHVibGljOgorICAgIFNodWZmbGVQYWlyKGNvbnN0
IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgV2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMo
c3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9
CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8g
VGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5
IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQg
cGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBN
b3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgV2lkdGggd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgQXJnIG1fc3JjOworICAgIEFyZyBtX2RzdDsKKyAgICBXaWR0aCBtX3dp
ZHRoOworfTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2Ny
YXRjaCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcworLy8gZm9s
bG93czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1w
b3JhcmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCisvLyByZWdpc3RlcnMgdGhhdCBh
cmUgbm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRo
ZSBzaHVmZmxlLCBhbmQgYXJlIG5vdAorLy8gbGl2ZSBhdCB0aGUgc2h1ZmZsZSAtIHRoZW4geW91
IGNhbiBwYXNzIHRoZW0uIElmIHlvdSBkb24ndCBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIGF2YWls
YWJsZSBvciBpZgorLy8geW91IGRvbid0IGZlZWwgbGlrZSBsb29raW5nIGZvciB0aGVtLCB5b3Ug
Y2FuIHBhc3MgbWVtb3J5IGxvY2F0aW9ucy4gSXQncyBhbHdheXMgc2FmZSB0byBwYXNzIGEKKy8v
IHBhaXIgb2YgbWVtb3J5IGxvY2F0aW9ucywgYW5kIHJlcGxhY2luZyBlaXRoZXIgbWVtb3J5IGxv
Y2F0aW9uIHdpdGggYSByZWdpc3RlciBjYW4gYmUgdmlld2VkIGFzIGFuCisvLyBvcHRpbWl6YXRp
b24uIEl0J3MgYSBwcmV0dHkgaW1wb3J0YW50IG9wdGltaXphdGlvbi4gU29tZSBtb3JlIG5vdGVz
OgorLy8KKy8vIC0gV2UgZGVmaW5lIHNjcmF0Y2ggcmVnaXN0ZXJzIGFzIHRoaW5ncyB0aGF0IGFy
ZSBub3QgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYW5kIGFyZSBub3Qgb25lIG9mCisvLyAgIHRo
ZSBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUuIE5vdCBiZWluZyBsaXZlIGJlZm9yZSB0aGUg
c2h1ZmZsZSBhbHNvIG1lYW5zIHRoYXQgdGhleSBjYW5ub3QKKy8vICAgYmUgdXNlZCAKKy8vCisv
LyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24gaXMgb25seSBuZWVkZWQgd2hlbiB5b3UgaGF2
ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgKKy8vICAgYXMgc291cmNl
IGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlvdSdyZSBndWFyYW50ZWVkIG5vdCB0byBuZWVk
IGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAgaW5zdHJ1Y3Rpb24gYXZh
aWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQgeW91IGRvbid0IGhhdmUgYW55IG1lbW9yeSBs
b2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gb2YK
Ky8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYgd2hpbGUgRlAgbmV2ZXIg
c3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3NpbmcgbWVtb3J5IGxvY2F0aW9ucyBhcyBzY3Jh
dGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRp
b24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBlbWl0U2h1ZmZsZSgpIHRv
IHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMgd2hlbiBpdCBkb2VzIG5lZWQKKy8vICAgc2Ny
YXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1lbnQgaXMgdG8gZW5zdXJl
IHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBhZnRlcgorLy8gICByZWdpc3RlciBhbGxvY2F0
aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQgYWRkIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbiBz
byB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVmZmxpbmdzIHVudGlsIGFmdGVyIHJlZ2FsbG9j
LgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBwYWlycyBhcmUgbm90IHZl
cnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlvdSB3YW50CisvLyAgIHBl
cmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0aGVtLCB0aGVuIG1ha2luZyBzdXJlIHRoYXQg
eW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25lIHdheSB0bworLy8gICBnZXQgYWNjZXB0YWJs
ZSBwZXJmb3JtYW5jZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0
b3I8U2h1ZmZsZVBhaXI+Jiwgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2gsIEFyZzo6VHlwZSwg
VmFsdWUqIG9yaWdpbik7CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxlIHRoYXQgaW52b2x2ZXMgYW55
IG51bWJlciBvZiB0eXBlcy4gUGFzcyBzY3JhdGNoIHJlZ2lzdGVycyBvciBtZW1vcnkgbG9jYXRp
b25zCisvLyBmb3IgZWFjaCB0eXBlIGFjY29yZGluZyB0byB0aGUgcnVsZXMgYWJvdmUuCitWZWN0
b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYsCisg
ICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8
QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyRW1pdFNodWZmbGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTQw
Nyw2ICs0MDcsMTQgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgVG1wLCBJbmRleCBhcyBz
dG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKK3g4NjogU3dhcDMyIFVE
Okc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgorCit4ODZfNjQ6IFN3
YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKwogTW92
ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAg
ICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjc2LDMgKzY4NCw0IEBAIE9vcHMgL3Rlcm1pbmFs
CiAjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAorY3Vz
dG9tIENvbGRDQ2FsbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268740</attachid>
            <date>2016-01-11 18:55:07 -0800</date>
            <delta_ts>2016-01-11 20:42:11 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32763</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAg
IHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
c3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwog
ICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NTUsNiArNjU1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRo
aXMpOwogICAgIH0KIAorICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihz
cmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4
NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDYgKzE0MzEs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdf
RXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBz
cmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisK
ICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwg
c3JjLCBkc3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KICNlbmRp
ZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDIxICsyMDAsMTQgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgIGNhc2UgQXJnOjpUbXA6CiAgICAg
Y2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6SW1tNjQ6Ci0gICAgY2FzZSBBcmc6OlN0YWNr
OgotICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICBicmVhazsgLy8gT0sKLSAgICBjYXNl
IEFyZzo6QWRkcjoKLSAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKQotICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZv
ckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsKIAotICAgIHJldHVybiBhcmcuaXNUeXBlKHR5cGUpOwor
ICAgIHJldHVybiBhcmcuY2FuUmVwcmVzZW50KHZhbHVlKTsKIH0KIAogYm9vbCBTdGFja21hcFNw
ZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6OkFyZyYg
YXJnLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTYgKzIyNSwxNiBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3
aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4
Iik7CisgICAgICAgIG91dC5wcmludCgiOCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBB
cmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQu
cHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAg
ICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQo
IldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnByaW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9u
IDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyMCw2ICsyMjAsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNB
bnlVc2Uocm9sZSkgJiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUm9s
ZSBjb29sZWQoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAg
ICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2Fz
ZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBEZWY6CisgICAg
ICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0
Y2g6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gcm9sZTsKKyAg
ICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAgICAgICAgY2Fz
ZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAgICAgICB9Cisg
ICAgfQorCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUg
SW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0
YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTU4NSw2ICs2MDUsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAg
IGJvb2wgaXNTb21lSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8
IGlzSW1tNjQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjMwLDMzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzTWVt
b3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgcmV0dXJuIGFyZy5iYXNlKCkgPT0gVG1wKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHx8IGFyZy5iYXNlKCkg
PT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGNh
c2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNjgwLDE4ICs3MzIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAgICAgY2FzZSBBZGRyOgotICAg
ICAgICBjYXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6Ci0gICAgICAgIGNhc2UgSW5k
ZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBib29sIGhhc09mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5KCk7IH0KICAgICAKICAgICBpbnQzMl90IG9mZnNldCgp
IGNvbnN0CiAgICAgewpAQCAtODEyLDYgKzg1MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICBib29sIGNhblJlcHJlc2VudChWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNUeXBlKHR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAg
IH0KKwogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1w
KCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAgLTk3NCw2ICsxMDIwLDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChUbXAgdG1wKQorICAgIHsKKyAgICAgICAg
Ym9vbCB1c2VzID0gZmFsc2U7CisgICAgICAgIGZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAg
WyZdIChUbXAgb3RoZXJUbXApIHsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJUbXAgPT0gdG1w
KQorICAgICAgICAgICAgICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gdXNlczsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0
byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1
c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlz
OgogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckN1c3RvbS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitib29sIENDYWxsQ3VzdG9tOjppc1Zh
bGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSAxICsg
KHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxKSArIHZhbHVlLT5udW1DaGlsZHJlbigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgYXJndW1lbnRzIGNhbiBvbmx5IHJl
ZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3IgaW1tZWRpYXRlcy4KKyAgICBmb3IgKEFyZyYgYXJn
IDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJnLmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNr
KCkgJiYgIWFyZy5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1
bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgp
ICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVz
ZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGkt
LTspIHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBB
cmcgYXJnID0gaW5zdC5hcmdzW29mZnNldCArIGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXBy
ZXNlbnQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQgdG8gY2Fycnkg
ZXh0cmEgc3RhdGUgYXJvdW5kIHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBTcGVjaWFscyBt
ZWFuIHRoYXQgeW91CiAvLyBhbHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZlbiBpbiBtZXRo
b2RzIHRoYXQgZG9uJ3QgdGFrZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBEZWZpbml0aW9u
IG9mIFBhdGNoIGluc3RydWN0aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRlIHRoZSBiZWhh
dmlvciBvZiB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVjdCwgd2hpY2gg
d2lsbCBiZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgogc3RydWN0IFBh
dGNoQ3VzdG9tIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2
b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKQEAgLTk2
LDYgKzk4LDcyIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAorLy8gRGVmaW5p
dGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90IHBhdGggQyBm
dW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGggYW4gQWlyIEND
YWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlvbnMuIFRoZSBs
b3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhhdCB0
aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0IENDYWxsQ3Vz
dG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZv
ckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisK
KyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdz
W2luZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNh
bGxlZQorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAg
ICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFy
Zzo6RGVmLAorICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgp
KSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2lu
ZGV4KytdLCBBcmc6OlVzZSwKKyAgICAgICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUoY2hp
bGQtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+
dHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmIGluc3QpOworCisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5zdCYpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpK
dW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCisg
ICAgeworICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICAgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworICAgIH0KK307CisKK3N0cnVjdCBDb2xkQ0NhbGxDdXN0
b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgbGlrZSBhIGNhbGwsIGJ1dCB1c2VzIGJl
Y29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1c3RvbTo6Zm9yRWFjaEFyZygKKyAgICAgICAgICAg
IGluc3QsCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGFy
ZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTaHVmZmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25h
bWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3NpYmxl
U2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAgIGZv
ciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgaWYgKGZ1
bmN0b3IocmVnKSkKKyAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgfQorICAgIHJldHVybiBU
bXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0
IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNj
cmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7Cisg
ICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1RtcChUbXAocmVnKSkgJiYgIWFyZzIudXNlc1Rt
cChUbXAocmVnKSk7CisgICAgICAgIH0pOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7Cit9CisKK1ZlY3Rv
cjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWly
cywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUsIFZhbHVlKiBv
cmlnaW4pCit7CisgICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9m
IHNodWZmbGUgdGhhdCB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBT
aHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLmZpcnN0KCku
aXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kKCkuaXNUeXBlKHR5cGUp
KTsKKyAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kKCkuaXNUbXAoKSB8fCBwYWlyLnNlY29uZCgp
LmlzTWVtb3J5KCkpOworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2libGUga2lu
ZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdpbGwgZG86CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0
LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMpLiBXZSBlbWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsg
TW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVpcmVzCisgICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVy
cyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1vcnkgbW92ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBt
YW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBwb3NzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFw
ZXIuCisgICAgLy8KKyAgICAvLyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhKS4g
V2Ugd2FudCB0byBlbWl0IHRoaXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0IGluc3RydWN0aW9u
CisgICAgLy8gICBtYXkgbm90IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgbmVl
ZCBhIHNjcmF0Y2ggcmVnaXN0ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAgIC8vICAgbG9jYXRp
b24uIEEgZ25hcmxpZXIgZXhhbXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMgPT4gYSkuIFdlIGNh
biBlbWl0IHRoaXMgYXMgIlN3YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwgYiIuIE5vdGUgdGhh
dCBzd2FwcGluZyBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcgd2lkdGhzLgorICAg
IC8vCisgICAgLy8gV2Ugd2lsbCBmaW5kIG11bHRpcGxlIGRpc2pvaW50IHN1Y2ggb3BlcmF0aW9u
cy4gV2UgY2FuIGV4ZWN1dGUgdGhlbSBpbiBhbnkgb3JkZXIuCisKKyAgICAvLyBXZSBpbnRlcnBy
ZXQgdGhlc2UgYXMgTW92ZXMgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgYmFja3dhcmRzLgorICAg
IFZlY3RvcjxWZWN0b3I8U2h1ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnBy
ZXQgdGhlc2UgYXMgU3dhcHMgb3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJh
Y2t3YXJkcywgaS5lLiBmb3IgYSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJT
d2FwIGxpc3RbMV0uc3JjKCksIGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlz
dFsxXS5zcmMoKSIuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQg
aWYgdGhlIHdpZHRocyBkb24ndCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAg
ICBWZWN0b3I8VmVjdG9yPFNodWZmbGVQYWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAg
SGFzaE1hcDxBcmcsIFNodWZmbGVQYWlyPiBtYXBwaW5nOworICAgICAgICBmb3IgKGNvbnN0IFNo
dWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpCisgICAgICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNy
YygpLCBwYWlyKTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsK
KworICAgICAgICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBIYXNo
TWFwPEFyZywgU2h1ZmZsZVBhaXI+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5iZWdpbigpOwor
ICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpciA9ICppdGVyOworICAgICAgICAgICAgbWFwcGlu
Zy5yZW1vdmUoaXRlcik7CisKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UGFpcnMuYXBwZW5kKHBhaXIpOworCisgICAgICAgICAgICAgICAgaXRlciA9IG1h
cHBpbmcuZmluZChwYWlyLmRzdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBw
aW5nLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpID09IGN1cnJl
bnRQYWlyc1swXS5zcmMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5k
KFdURk1vdmUoY3VycmVudFBhaXJzKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNoaWZ0cy5hcHBlbmQoV1RGTW92ZShjdXJyZW50UGFpcnMpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICBt
YXBwaW5nLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4g
VGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3
aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBX
ZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNh
c2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBk
c3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVj
dGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBn
dWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZl
IGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9y
IHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsm
XSAoV2lkdGggd2lkdGgpIC0+IE9wY29kZSB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAg
ICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/
IE1vdmUzMiA6IE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAg
cmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChB
cmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGlu
Z3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9u
cywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVy
c2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBs
YWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGlu
ZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8g
aXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0
b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBh
dXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVu
c2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAo
c2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tp
bmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVN
b3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAg
ICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0
Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1w
KSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNv
bnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsK
KworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFp
ciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVt
b3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICBUbXAgc2NyYXRj
aCA9CisgICAgICAgICAgICAgICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZpbmRQb3NzaWJs
ZVNjcmF0Y2godHlwZSwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2NyYXRjaCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92
ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgcGFpci5zcmMoKSwgc2NyYXRjaCkpOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkp
LCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNjcmF0
Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBh
aXIud2lkdGgoKSksIG9yaWdpbi4gcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgIH0KKwor
ICAgIGF1dG8gaGFuZGxlU2hpZnQgPSBbJl0gKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNoaWZ0LnNpemUoKTsgaS0tOykKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcihzaGlmdFtpXSwgMCk7CisKKyAgICAgICAgQXJnIGxhc3REc3Qg
PSBzaGlmdC5sYXN0KCkuZHN0KCk7CisgICAgICAgIGlmIChsYXN0RHN0LmlzVG1wKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoQXJnJiBzY3JhdGNoIDogc2NyYXRjaGVzKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHNjcmF0Y2ggIT0gbGFzdERzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFzY3Jh
dGNoLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaCA9IGxhc3REc3Q7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpcnN0IGhhbmRsZSBzaGlmdHMgd2hvc2Ug
bGFzdCBkZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUgdXAgc2NyYXRjaCBy
ZWdpc3RlcnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNl
LCBzbyB0aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdpbGwgYmUKKyAgICAv
LyBhdmFpbGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGluZyBlbWl0dGVkIHBy
aW9yIChzbywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAgLy8gcmV2ZXJzZSku
CisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA6IHNoaWZ0cykgeworICAgICAg
ICBpZiAoc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlm
dChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBo
YW5kbGUgdGhlIHJlc3Qgb2YgdGhlIHNoaWZ0cy4KKyAgICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFp
cj4mIHNoaWZ0IDogc2hpZnRzKSB7CisgICAgICAgIGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlz
VG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJl
c3VsdCgpOworICAgIH0KKworICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYgcm90YXRlIDog
cm90YXRlcykgeworICAgICAgICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2Rl
IHN3YXAgPSBPb3BzOworICAgICAgICBXaWR0aCBzd2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8g
Ym9ndXMgdmFsdWUKKyAgICAgICAgCisgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKKyAg
ICAgICAgICAgIHN3YXAgPSBTd2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6Oldp
ZHRoMzI7CisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2Fw
NjQ7CisgICAgICAgICAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYW5Td2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKTsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocGFpci5zcmMoKS5pc01lbW9yeSgpIHx8IHBhaXIuZHN0KCku
aXNNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IGlzVmFsaWRGb3Jt
KHN3YXAsIEFyZzo6VG1wLCBBcmc6OkFkZHIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IHRha2UgdGhlIHN3YXBwaW5nIHBhdGggaWYgdGhlcmUgaXMgYSBtaXggb2Ygd2lkdGhz
LiBUaGF0IGdldHMgdG9vCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbmZ1c2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2FuU3dhcCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAt
IDE7IGktLTspIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsK
KyAgICAgICAgICAgICAgICBBcmcgcmlnaHQgPSByb3RhdGVbaSArIDFdLnNyYygpOworCisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRj
b21lLiBSb3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAg
ICAgIC8vIE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVy
ZSBhIGxvdCBvZiByYXJlIHN0dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwg
aGFwcGVuIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBUbXAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBs
ZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNo
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChz
d2FwV2lkdGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgp
LCBvcmlnaW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2Ny
YXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCBy
aWdodCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBh
aXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBX
aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAg
ICAgICAgLy8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0LCBwYWlyLmRz
dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBX
ZSBjYW4gdHJlYXQgdGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBk
ZXN0aW5hdGlvbiAoaS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBp
dCBmaXJzdC4gVGhlbiB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRo
ZSByb3RhdGUKKyAgICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUg
bGFzdCBkZXN0aW5hdGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAg
ICAgICAgICAgLy8gZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3
ZSBoYXZlIGEgcm90YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFp
bGFibGUgcmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9z
c2libGVTY3JhdGNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcChUbXAocmVnKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhaXIuZHN0KCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAg
QXJnIHJvdGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1ZmZsZVBhaXIocm90
YXRlLmxhc3QoKS5kc3QoKSwgcm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsgaS0tID4gMTspCisg
ICAgICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7CisKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGVbMF0uZHN0
KCksIHJvdGF0ZVswXS53aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQor
ICAgICAgICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKwor
ICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1w
dHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTsp
CisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZl
Y3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYg
Z3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCkKK3sKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPEFyZywgQXJnPj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8c3RkOjpwYWly
PEFyZywgQXJnPj4gZnBQYWlyczsKKyAgICBmb3IgKHN0ZDo6cGFpcjxBcmcsIEFyZz4gcGFpciA6
IHBhaXJzKSB7CisgICAgICAgIGlmIChwYWlyLmZpcnN0LmlzTWVtb3J5KCkgJiYgcGFpci5zZWNv
bmQuaXNNZW1vcnkoKSAmJiBwYWlyLndpZHRoKCkgPiBwb2ludGVyV2lkdGgoKSkgeworICAgICAg
ICAgICAgLy8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZv
cm0gYXJlIGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMu
YXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuZmlyc3QuaXNHUCgpICYmIHBh
aXIuc2Vjb25kLmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFp
cnMgZ2V0cyBtZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0
IHdlCisgICAgICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQ
UnMsIGV4Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWly
cy5hcHBlbmQocGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBl
bmQocGFpcik7CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQu
YXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCkpOwor
ICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBB
cmc6OkZQKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNo
dWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTaHVmZmxlUGFpciB7CitwdWJsaWM6Cisg
ICAgU2h1ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZHN0LCBXaWR0aCB3aWR0
aCkKKyAgICAgICAgOiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0KQorICAgICAgICAs
IG1fd2lkdGgod2lkdGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZyYgc3JjKCkgY29u
c3QgeyByZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHN0OyB9CisKKyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3Zl
IHdlIGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cu
CisgICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQ
LCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KKyAgICBXaWR0aCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAgQXJnIG1f
ZHN0OworICAgIFdpZHRoIG1fd2lkdGg7Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBh
IGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3Vs
ZCBwYXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0
Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUK
Ky8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZl
IHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRo
ZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2Ny
YXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxv
b2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5
cyBzYWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFj
aW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQg
YXMgYW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0
aW9uLiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3Rl
cnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJl
IG5vdCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJl
aW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAor
Ly8gICBiZSB1c2VkIAorLy8KKy8vIC0gQSBzZWNvbmQgc2NyYXRjaCBsb2NhdGlvbiBpcyBvbmx5
IG5lZWRlZCB3aGVuIHlvdSBoYXZlIHNodWZmbGUgcGFpcnMgd2hlcmUgbWVtb3J5IGlzIHVzZWQg
Ym90aAorLy8gICBhcyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorLy8KKy8vIC0gWW91J3JlIGd1
YXJhbnRlZWQgbm90IHRvIG5lZWQgYW55IHNjcmF0Y2ggbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEg
U3dhcCBpbnN0cnVjdGlvbiBhdmFpbGFibGUgZm9yCisvLyAgIHRoZSB0eXBlIGFuZCB5b3UgZG9u
J3QgaGF2ZSBhbnkgbWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFyZSBib3RoIHRoZSBzb3VyY2UgYW5k
IHRoZSBkZXN0aW5hdGlvbiBvZgorLy8gICBzb21lIHBhaXJzLiBHUCBzdXBwb3J0cyBTd2FwIG9u
IHg4NiB3aGlsZSBGUCBuZXZlciBzdXBwb3J0cyBTd2FwLgorLy8KKy8vIC0gUGFzc2luZyBtZW1v
cnkgbG9jYXRpb25zIGFzIHNjcmF0Y2ggaWYgYXJlIHJ1bm5pbmcgZW1pdFNodWZmbGUoKSBiZWZv
cmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcworLy8gICBzaWxseSwgc2luY2UgdGhhdCB3aWxsIGNh
dXNlIGVtaXRTaHVmZmxlKCkgdG8gcGljayBzb21lIHNwZWNpZmljIHJlZ2lzdGVycyB3aGVuIGl0
IGRvZXMgbmVlZAorLy8gICBzY3JhdGNoLiBPbmUgZWFzeSB3YXkgdG8gYXZvaWQgdGhhdCBwcmVk
aWNhbWVudCBpcyB0byBlbnN1cmUgdGhhdCB5b3UgY2FsbCBlbWl0U2h1ZmZsZSgpIGFmdGVyCisv
LyAgIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciB0aGlzIHJlYXNvbiB3ZSBjb3VsZCBhZGQgYSBT
aHVmZmxlIGluc3RydWN0aW9uIHNvIHRoYXQgd2UgY2FuIGRlZmVyCisvLyAgIHNodWZmbGluZ3Mg
dW50aWwgYWZ0ZXIgcmVnYWxsb2MuCisvLworLy8gLSBTaHVmZmxlcyB3aXRoIG1lbW9yeT0+bWVt
b3J5IHBhaXJzIGFyZSBub3QgdmVyeSB3ZWxsIHR1bmVkLiBZb3Ugc2hvdWxkIGF2b2lkIHRoZW0g
aWYgeW91IHdhbnQKKy8vICAgcGVyZm9ybWFuY2UuIElmIHlvdSBuZWVkIHRvIGRvIHRoZW0sIHRo
ZW4gbWFraW5nIHN1cmUgdGhhdCB5b3UgcmVzZXJ2ZSBhIHRlbXBvcmFyeSBpcyBvbmUgd2F5IHRv
CisvLyAgIGdldCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVm
ZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mLCBzdGQ6OmFycmF5PEFyZywgMj4g
c2NyYXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZm
bGUgdGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0
ZXJzIG9yIG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRo
ZSBydWxlcyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0
b3I8U2h1ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRj
aCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdp
bik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwko
d29ya2luZyBjb3B5KQpAQCAtNDA3LDYgKzQwNywxNCBAQCBNb3ZlIFU6RzpQdHIsIEQ6RzpQdHIK
ICAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQ
dHIKIAoreDg2OiBTd2FwMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgVG1w
LCBBZGRyCisKK3g4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIFRtcAor
ICAgIFRtcCwgQWRkcgorCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMg
emVyb0V4dGVuZDMyVG9QdHIKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzYsMyArNjg0
LDggQEAgT29wcyAvdGVybWluYWwKICMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4K
IGN1c3RvbSBQYXRjaAogCisjIEluc3RydWN0aW9ucyB1c2VkIGZvciBsb3dlcmluZyBDIGNhbGxz
LiBUaGVzZSBkb24ndCBtYWtlIGl0IHRvIEFpciBnZW5lcmF0aW9uLiBUaGV5IGdldCBsb3dlcmVk
IHRvCisjIHNvbWV0aGluZyBlbHNlIGZpcnN0LiBUaGUgb3JpZ2luIFZhbHVlIG11c3QgYmUgYSBD
Q2FsbFZhbHVlLgorY3VzdG9tIENDYWxsCitjdXN0b20gQ29sZENDYWxsCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268743</attachid>
            <date>2016-01-11 20:42:11 -0800</date>
            <delta_ts>2016-01-11 21:40:09 -0800</delta_ts>
            <desc>some more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52750</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9CiAK
K2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9vbCBv
cHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJRElW
U3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRp
b25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAg
ICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0
LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjU1LDYgKzY1NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBEYXRhTGFi
ZWwzMih0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3FfcnIoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlKTsKKyAgICB9CisKICAgICB2b2lkIG1vdmU2NFRvRG91YmxlKFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dnFfcnIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw2
ICsxNDMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9YQ0hHX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hH
X0V2R3YsIHNyYywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwyMSArMjAwLDE0IEBAIGJv
b2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yVmFsdWUKICAgICBjYXNlIEFyZzo6VG1w
OgogICAgIGNhc2UgQXJnOjpJbW06CiAgICAgY2FzZSBBcmc6OkltbTY0OgotICAgIGNhc2UgQXJn
OjpTdGFjazoKLSAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgYnJlYWs7IC8vIE9LCi0g
ICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKLSAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6
OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSk7CiAKLSAgICByZXR1cm4gYXJnLmlzVHlwZSh0
eXBlKTsKKyAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7CiB9CiAKIGJvb2wgU3Rh
Y2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYgY29kZSwgY29uc3QgQWly
OjpBcmcmIGFyZywgY29uc3QgVmFsdWVSZXAmIHJlcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw5
IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVj
aWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTYxLDYgKzE2NCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBcmcKICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFs
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91
dC5wcmludCgiV2lkdGhBcmciKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjUsMTYgKzIzMSwxNiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewog
ICAgIGNhc2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAg
ICAgIG91dC5wcmludCgiOCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRo
MTY6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0
LnByaW50KCJXaWR0aDMyIik7CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQi
KTsKKyAgICAgICAgb3V0LnByaW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDggQEAgcHVibGljOgogICAgICAgICBSZWxDb25kLAogICAgICAgICBSZXND
b25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBTcGVjaWFsCisgICAgICAgIFNwZWNp
YWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7
CkBAIC0xNTYsNiArMTU3LDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0
YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihGUCk7CisgICAgfQorCiAgICAgZW51
bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwKICAgICAgICAgV2lkdGgxNiwKQEAg
LTIyMCw2ICsyMjgsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9sZSkg
JiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUm9sZSBjb29sZWQoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVz
ZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlz
RWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTU0OSw2ICs1NzcsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgd2lkdGhBcmco
V2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gV2lkdGhBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHdpZHRoOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBB
cmcmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVy
Lm1fb2Zmc2V0CkBAIC01ODUsNiArNjIxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW02NDsKICAgICB9CiAKKyAgICBib29sIGlzU29tZUltbSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0ltbTY0KCk7CisgICAgfQorCiAgICAgYm9v
bCBpc0FkZHIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOwpA
QCAtNjA1LDYgKzY0NiwzMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5k
ZXg7CiAgICAgfQogCisgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6
CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAg
IHJldHVybiBhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAg
ICAgICAgICAgICAgICB8fCBhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaXNSZWxDb25k
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYz
Nyw2ICs3MDUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7
CiAgICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwx
OCArNzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAg
IGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBD
YWxsQXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAg
ICAgCiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3OTIsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1f
b2Zmc2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdp
ZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MjIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1
cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzg0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODgyLDExIEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgY2FuUmVwcmVzZW50KFZhbHVl
KiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1R5cGUodHlwZUZvckIzVHlw
ZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTUzLDYgKzEw
MjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3Vi
bGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NCw2ICsxMDUw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChUbXAg
dG1wKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VzID0gZmFsc2U7CisgICAgICAgIGZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJUbXApIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3RoZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgICAgICB1c2VzID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdXNlczsKKyAgICB9CisKICAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgor
QXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3VtZW50Q291bnQsIHVu
c2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXggPSBhcmd1bWVudENvdW50Kys7CisgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBCYW5r
SW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIFRtcChCYW5r
SW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKKworICAgIHVuc2lnbmVk
IHNsb3RTaXplOworICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgeworICAgICAgICAvLyBB
cmd1bWVudHMgYXJlIHBhY2tlZC4KKyAgICAgICAgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNoaWxk
LT50eXBlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWxpZ25l
ZC4KKyAgICAgICAgc2xvdFNpemUgPSA4OworICAgIH0KKworICAgIHN0YWNrT2Zmc2V0ID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7CisgICAgQXJnIHJl
c3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7CisgICAgc3RhY2tPZmZzZXQgKz0gc2xv
dFNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVu
dCgKKyAgICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgZnBBcmd1bWVudENv
dW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICBzd2l0Y2gg
KEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNhc2UgQXJnOjpHUDoK
KyAgICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BSSW5mbz4oYXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKKyAgICBjYXNlIEFyZzo6RlA6CisgICAgICAg
IHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEZQUkluZm8+KGFyZ3VtZW50Q291bnQK
K30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2Fs
bGluZ0NvbnZlbnRpb24oQ29kZSYgY29kZSwgQ0NhbGxWYWx1ZSogdmFsdWUpCit7CisgICAgVmVj
dG9yPEFyZz4gcmVzdWx0OworICAgIHVuc2lnbmVkIGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAg
dW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyAr
K2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIG1hcnNoYWxsQ0NhbGxB
cmd1bWVudChncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHZh
bHVlLT5jaGlsZChpKSkpOworICAgIH0KKyAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUo
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZz
ZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVu
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbGluZ0NvbnZlbnRp
b25faAorI2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENDYWxsVmFsdWU7CisKK25hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdD
b252ZW50aW9uKENvZGUmLCBDQ2FsbFZhbHVlKik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworYm9vbCBDQ2FsbEN1
c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgIT0gMSArICh2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBj
YW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFh
cmcuaXNTdGFjaygpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKworICAgIC8vIElmIHRoZXJl
IGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fubm90IGJlIGFuIGltbWVkaWF0ZS4KKyAgICBpZiAodmFs
dWUtPnR5cGUoKSAhPSBWb2lkKSB7CisgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNTb21lSW1t
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaW5zdC5hcmdzWzFd
LmNhblJlcHJlc2VudCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG9mZnNldCsrOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5udW1DaGls
ZHJlbigpOyBpLS07KSB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlLT5jaGlsZChpKTsK
KyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgaWYgKCFh
cmcuY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsQ3VzdG9t
OjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYp
Cit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIgKyBpbnN0LCAiXG4i
KTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxw
ZXJzOjpKdW1wKCk7Cit9CisKK2Jvb2wgU2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYg
aW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAlIDMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1swXTsKKyAgICAgICAgdW5zaWduZWQg
bW9kZSA9IGkgJSAzOworCisgICAgICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8v
IEl0J3MgdGhlIHdpZHRoLgorICAgICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAg
ICBpZiAoIW1vZGUgJiYgYXJnLmlzU29tZUltbSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKGFyZy5pc1RtcCgpIHx8IGFyZy5pc01lbW9yeSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQ0NhbGxIZWxw
ZXJzOjpKdW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVy
cyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVk
IHNodWZmbGU6ICIgKyBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNpb24gMTk0ODU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlCiAvLyB5b3UgbmVlZCB0byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5z
dHJ1Y3Rpb24uIEFsc28sIFNwZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFj
Y2VzcyB0byBDb2RlJiBldmVuIGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlv
bkNvbnRleHQuCiAKKy8vIERlZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlz
IHVzZWQgdG8gZGVsZWdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUK
Ky8vIFNwZWNpYWwgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0
aGUgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQpAQCAtOTYsNiArOTgsMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3Rv
bSB7CiAgICAgfQogfTsKIAorLy8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0Nh
bGwgaXMgdXNlZCBmb3IgaG90IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRv
IGEKKy8vIFBhdGNoIHdpdGggYW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8g
bWFyc2hhbCBpbnN0cnVjdGlvbnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhl
IGNsb2JiZXJzLgorc3RydWN0IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5v
cmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwor
CisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwg
QXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQorICAgICAgICAKKyAgICAgICAgaWYgKHZh
bHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAorICAgICAgICAgICAgICAgIEFyZzo6
dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRo
Rm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFs
dWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwKKyAgICAgICAgICAg
ICAgICBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSksCisgICAgICAgICAgICAgICAg
QXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKworICAgIHN0
YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xF
ZmZlY3RzKEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gVGhpcyBqdXN0IGNyYXNoZXMsIHNpbmNlIHdlIGV4cGVjdCBDIGNhbGxzIHRvIGJlIGxvd2Vy
ZWQgYmVmb3JlIGdlbmVyYXRpb24uCisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKK3N0
cnVjdCBDb2xkQ0NhbGxDdXN0b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgbGlrZSBh
IGNhbGwsIGJ1dCB1c2VzIGJlY29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1c3RvbTo6Zm9yRWFj
aEFyZygKKyAgICAgICAgICAgIGluc3QsCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBmdW5jdG9yKGFyZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUsIHdpZHRoKTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlQ3VzdG9tIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGxpbWl0ID0gaW5zdC5hcmdzLnNpemUoKSAvIDMgKiAzOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gMykgeworICAgICAgICAgICAgQXJnJiBzcmMgPSBpbnN0
LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgQXJnJiBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOwor
ICAgICAgICAgICAgQXJnJiB3aWR0aEFyZyA9IGluc3QuYXJnc1tpICsgMl07CisgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gd2lkdGhBcmcud2lkdGgoKTsKKyAgICAgICAgICAgIEFyZzo6
VHlwZSB0eXBlID0gc3JjLmlzR1AoKSAmJiBkc3QuaXNHUCgpID8gQXJnOjpHUCA6IEFyZzo6RlA7
CisgICAgICAgICAgICBmdW5jdG9yKHNyYywgQXJnOjpVc2UsIHR5cGUsIHdpZHRoKTsKKyAgICAg
ICAgICAgIGZ1bmN0b3IoZHN0LCBBcmc6OkRlZiwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAg
ZnVuY3Rvcih3aWR0aEFyZywgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6V2lkdGg4KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5z
dCYpOworICAgIAorICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXggJSAzKSB7CisgICAgICAgIGNhc2Ug
MDoKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpK
dW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOwor
fTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1p
dFNodWZmbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpclNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNw
YWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5kUG9zc2libGVTY3Jh
dGNoKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChS
ZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICBpZiAoZnVuY3Rv
cihyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgp
OworfQorCitUbXAgZmluZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJn
JiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsKKyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRj
aCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAgWyZdIChSZWcgcmVnKSAtPiBib29sIHsKKyAgICAg
ICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1wKFRtcChyZWcpKSAmJiAhYXJnMi51c2VzVG1wKFRt
cChyZWcpKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2
b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9yPElu
c3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzLCBz
dGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlwZSwgVmFsdWUqIG9yaWdp
bikKK3sKKyAgICAvLyBGaXJzdCB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgdGhlIGtpbmQgb2Ygc2h1
ZmZsZSB0aGF0IHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aC4KKyAgICBmb3IgKGNvbnN0IFNodWZm
bGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgQVNTRVJUKHBhaXIuZmlyc3QoKS5pc1R5
cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQoKS5pc1R5cGUodHlwZSkpOwor
ICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQoKS5pc1RtcCgpIHx8IHBhaXIuc2Vjb25kKCkuaXNN
ZW1vcnkoKSk7CisgICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBraW5kcyBv
ZiBvcGVyYXRpb25zIHRoYXQgd2Ugd2lsbCBkbzoKKyAgICAvLworICAgIC8vIC0gU2hpZnQuIEV4
YW1wbGU6IChhID0+IGIsIGIgPT4gYykuIFdlIGVtaXQgdGhpcyBhcyAiTW92ZSBiLCBjOyBNb3Zl
IGEsIGIiLiBUaGlzIG9ubHkgcmVxdWlyZXMKKyAgICAvLyAgIHNjcmF0Y2ggcmVnaXN0ZXJzIGlm
IHRoZXJlIGFyZSBtZW1vcnktPm1lbW9yeSBtb3Zlcy4gV2Ugd2FudCB0byBmaW5kIGFzIG1hbnkg
b2YgdGhlc2UgYXMKKyAgICAvLyAgIHBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgY2hlYXBlci4K
KyAgICAvLworICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEpLiBXZSB3
YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rpb24KKyAg
ICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBuZWVkIGEg
c2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2NhdGlvbi4g
QSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2UgY2FuIGVt
aXQgdGhpcyBhcyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0aGF0IHN3
YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisgICAgLy8K
KyAgICAvLyBXZSB3aWxsIGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBX
ZSBjYW4gZXhlY3V0ZSB0aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdlIGludGVycHJldCB0
aGVzZSBhcyBNb3ZlcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuCisgICAgVmVj
dG9yPFZlY3RvcjxTaHVmZmxlUGFpcj4+IHNoaWZ0czsKKworICAgIC8vIFdlIGludGVycHJldCB0
aGVzZSBhcyBTd2FwcyBvdmVyIHNyYygpJ3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgYmFja3dh
cmRzLCBpLmUuIGZvciBhIGxpc3QKKyAgICAvLyBvZiBzaXplIDMgd2Ugd291bGQgZG8gIlN3YXAg
bGlzdFsxXS5zcmMoKSwgbGlzdFsyXS5zcmMoKTsgU3dhcCBsaXN0WzBdLnNyYygpLCBsaXN0WzFd
LnNyYygpIi4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgY2FuJ3QgZG8gdGhhdCBpZiB0
aGUgd2lkdGhzIGRvbid0IG1hdGNoIG9yIG90aGVyIGJhZCB0aGluZ3MgaGFwcGVuLgorICAgIFZl
Y3RvcjxWZWN0b3I8U2h1ZmZsZVBhaXI+PiByb3RhdGVzOworCisgICAgeworICAgICAgICBIYXNo
TWFwPEFyZywgU2h1ZmZsZVBhaXI+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3QgU2h1ZmZs
ZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIuc3JjKCks
IHBhaXIpOworCisgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gY3VycmVudFBhaXJzOworCisg
ICAgICAgIHdoaWxlICghbWFwcGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8
QXJnLCBTaHVmZmxlUGFpcj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBwaW5nLmJlZ2luKCk7CisgICAg
ICAgICAgICBTaHVmZmxlUGFpciBwYWlyID0gKml0ZXI7CisgICAgICAgICAgICBtYXBwaW5nLnJl
bW92ZShpdGVyKTsKKworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGN1
cnJlbnRQYWlycy5hcHBlbmQocGFpcik7CisKKyAgICAgICAgICAgICAgICBpdGVyID0gbWFwcGlu
Zy5maW5kKHBhaXIuZHN0KCkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1hcHBpbmcu
ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuZHN0KCkgPT0gY3VycmVudFBh
aXJzWzBdLnNyYygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlcy5hcHBlbmQoV1RG
TW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2hpZnRzLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnRQYWlycykpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgcGFpciA9ICppdGVyOworICAgICAgICAgICAgICAgIG1hcHBp
bmcucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gSW4gdGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUg
d2F5IHdlIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcworICAgIC8vIHVzIHdoYXQg
c2NyYXRjaCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBhcm91bmQuIFdlIHdp
bGwgbmVlZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FzZXM6
CisgICAgLy8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBzcmMgYW5kIGRzdCBy
ZWZlciB0byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2FwIGluc3RydWN0aW9u
IGlzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5IGZvciB1cywgd2UgYXJlIGd1YXJh
bnRlZWQgdG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1lIHdlIGhhdmUgYSBT
aGlmdCB0aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNlYXJjaCBmb3Igc3Vj
aCBhIHJlZ2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8gbW92ZUZvcldpZHRoID0gWyZdIChX
aWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAg
ICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92
ZTMyIDogTW92ZUZsb2F0OworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1
cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZvcldpZHRoKEFyZzo6
Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworCisgICAgLy8gV2Ugd2lsbCBlbWl0IHRoaW5ncyBp
biByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFja3Mgb2YgaW5zdHJ1Y3Rpb25zLCBh
bmQgdGhlbiB3ZSBlbWl0CisgICAgLy8gYXBwZW5kIHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSAo
Zm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2YgcmVzdWx0UGFja3MgaXMgcGxhY2Vk
CisgICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSBsYXN0IHRoaW5nIHdl
IGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgc28KKyAgICAvLyBpdCBh
ZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQuCisgICAgVmVjdG9yPFZlY3RvcjxJ
bnN0Pj4gcmVzdWx0UGFja3M7CisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKworICAgIGF1dG8g
Y29tbWl0UmVzdWx0ID0gWyZdICgpIHsKKyAgICAgICAgcmVzdWx0UGFja3MuYXBwZW5kKFdURk1v
dmUocmVzdWx0KSk7CisgICAgfTsKKworICAgIGF1dG8gZ2V0U2NyYXRjaCA9IFsmXSAodW5zaWdu
ZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRtcCB7CisgICAgICAgIGlmIChzY3Jh
dGNoZXNbaW5kZXhdLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaGVzW2luZGV4
XS50bXAoKTsKKworICAgICAgICBpZiAoIXBvc3NpYmxlU2NyYXRjaCkKKyAgICAgICAgICAgIHJl
dHVybiBUbXAoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUs
IG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNbaW5kZXhdKSk7CisgICAgICAgIHJl
dHVybiBwb3NzaWJsZVNjcmF0Y2g7CisgICAgfTsKKworICAgIGF1dG8gcmV0dXJuU2NyYXRjaCA9
IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXApIHsKKyAgICAgICAgaWYgKEFyZyh0bXApICE9
IHNjcmF0Y2hlc1tpbmRleF0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2Vy
dmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhdLCB0bXApKTsKKyAgICB9OworCisg
ICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyLCB1
bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnko
KSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0K
KyAgICAgICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2Ny
YXRjaCh0eXBlLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9y
V2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9y
aWdpbiwgc2NyYXRjaCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuU2NyYXRjaChz
Y3JhdGNoSW5kZXgsIHNjcmF0Y2gpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53
aWR0aCgpKSwgb3JpZ2luLiBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgfQorCisgICAg
YXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
aGFuZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBBcmcgbGFzdERzdCA9IHNo
aWZ0Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNUbXAoKSkgeworICAgICAg
ICAgICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2gu
aXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0gbGFzdERzdDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0cyB3aG9zZSBsYXN0
IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBzY3JhdGNoIHJlZ2lz
dGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwgc2VxdWVuY2UsIHNv
IHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBiZQorICAgIC8vIGF2
YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVtaXR0ZWQgcHJpb3Ig
KHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyByZXZlcnNlKS4KKyAg
ICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0IDogc2hpZnRzKSB7CisgICAgICAgIGlm
IChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNo
aWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRs
ZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYg
c2hpZnQgOiBzaGlmdHMpIHsKKyAgICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAo
KSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0
KCk7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiByb3RhdGUgOiByb3Rh
dGVzKSB7CisgICAgICAgIGJvb2wgY2FuU3dhcCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dh
cCA9IE9vcHM7CisgICAgICAgIFdpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAvLyBib2d1
cyB2YWx1ZQorICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCkgeworICAgICAg
ICAgICAgc3dhcCA9IFN3YXAzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGgz
MjsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgc3dhcCA9IFN3YXA2NDsK
KyAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpU
bXApOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZSkgeworICAg
ICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01l
bW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dh
cCwgQXJnOjpUbXAsIEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgdGFrZSB0aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMuIFRo
YXQgZ2V0cyB0b28KKyAgICAgICAgICAgICAgICAgICAgLy8gY29uZnVzaW5nLgorICAgICAgICAg
ICAgICAgICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRoKCkgPCBzd2FwV2lkdGgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYW5T
d2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6ZSgpIC0gMTsg
aS0tOykgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0ID0gcm90YXRlW2ldLnNyYygpOworICAg
ICAgICAgICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZVtpICsgMV0uc3JjKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91dGNvbWUu
IFJvdGF0ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gTW92aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEg
bG90IG9mIHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBw
ZW4gYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRt
cCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBX
aWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9y
aWdpbiwgc2NyYXRjaCwgbGVmdCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNo
KDAsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6
IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLndpZHRoKCkgPT0gc3dhcFdpZHRo
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6OldpZHRoMzIpOworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6OldpZHRoNjQpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdpbiwgcGFpci5kc3QsIHBhaXIuZHN0KCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNh
biB0cmVhdCB0aGlzIGFzIGEgc2hpZnQgc28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRlc3Rp
bmF0aW9uIChpLmUuIGZpcnN0CisgICAgICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0IGZp
cnN0LiBUaGVuIHdlIGhhbmRsZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhlIHJv
dGF0ZQorICAgICAgICAgICAgLy8gc3BlY2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBsYXN0
IGRlc3RpbmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAgICAg
ICAgICAvLyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhh
dmUgYSByb3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWlsYWJs
ZSByZWdpc3RlciBmaWxlLgorCisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJs
ZVNjcmF0Y2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFpci5zcmMoKS51c2VzVG1wKFRtcChyZWcpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFpci5kc3QoKS51c2VzVG1wKFRtcChyZWcpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIHNjcmF0Y2ggPSBnZXRTY3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICBBcmcg
cm90YXRlU2F2ZSA9IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGUu
bGFzdCgpLmRzdCgpLCByb3RhdGVTYXZlLCByb3RhdGVbMF0ud2lkdGgoKSksIDEpOworCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAg
ICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRlW2ldLCAxKTsKKworICAgICAgICAgICAg
aGFuZGxlU2hpZnRQYWlyKFNodWZmbGVQYWlyKHJvdGF0ZVNhdmUsIHJvdGF0ZVswXS5kc3QoKSwg
cm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAg
ICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9y
PFNodWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNj
cmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoKQoreworICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8QXJnLCBBcmc+PiBncFBhaXJzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXJn
LCBBcmc+PiBmcFBhaXJzOworICAgIGZvciAoc3RkOjpwYWlyPEFyZywgQXJnPiBwYWlyIDogcGFp
cnMpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QuaXNNZW1vcnkoKSAmJiBwYWlyLnNlY29uZC5p
c01lbW9yeSgpICYmIHBhaXIud2lkdGgoKSA+IHBvaW50ZXJXaWR0aCgpKSB7CisgICAgICAgICAg
ICAvLyA4LWJ5dGUgbWVtb3J5LXRvLW1lbW9yeSBtb3ZlcyBvbiBhIDMyLWJpdCBwbGF0Zm9ybSBh
cmUgYmVzdCBoYW5kbGVkIGFzIGZsb2F0IG1vdmVzLgorICAgICAgICAgICAgZnBQYWlycy5hcHBl
bmQocGFpcik7CisgICAgICAgIH0gZWxzZSBpZiAocGFpci5maXJzdC5pc0dQKCkgJiYgcGFpci5z
ZWNvbmQuaXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBn
ZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UK
KyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywg
ZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJzLmFw
cGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChw
YWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQKSk7CisgICAg
cmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFyZzo6
RlApKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyRW1pdFNodWZmbGVfaAorI2RlZmluZSBBaXJFbWl0U2h1ZmZs
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBT
aHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIFdpZHRoIHdpZHRoKQor
ICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAgICAgLCBtX2RzdChkc3QpCisgICAgICAgICwgbV93
aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7
IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0IEFyZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9k
c3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRoZSBraW5kIG9mIG1vdmUgd2Ug
ZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0aDY0IHJpZ2h0IG5vdy4KKyAg
ICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFuZCBNb3ZlLiBGb3IgRlAsIGl0
IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91YmxlLgorICAgIFdpZHRoIHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBBcmcgbV9kc3Q7
CisgICAgV2lkdGggbV93aWR0aDsKK307CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxlIG9mIGEgZ2l2
ZW4gdHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5LiBZb3Ugc2hvdWxkIHBh
c3MgaXQgYXMKKy8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUgc2NyYXRjaCBy
ZWdpc3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBpcywgdGhleSdyZQorLy8g
cmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNodWZmbGUsIGhhdmUgdGhl
IHNhbWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKKy8vIGxpdmUgYXQgdGhlIHNo
dWZmbGUgLSB0aGVuIHlvdSBjYW4gcGFzcyB0aGVtLiBJZiB5b3UgZG9uJ3QgaGF2ZSBzY3JhdGNo
IHJlZ2lzdGVycyBhdmFpbGFibGUgb3IgaWYKKy8vIHlvdSBkb24ndCBmZWVsIGxpa2UgbG9va2lu
ZyBmb3IgdGhlbSwgeW91IGNhbiBwYXNzIG1lbW9yeSBsb2NhdGlvbnMuIEl0J3MgYWx3YXlzIHNh
ZmUgdG8gcGFzcyBhCisvLyBwYWlyIG9mIG1lbW9yeSBsb2NhdGlvbnMsIGFuZCByZXBsYWNpbmcg
ZWl0aGVyIG1lbW9yeSBsb2NhdGlvbiB3aXRoIGEgcmVnaXN0ZXIgY2FuIGJlIHZpZXdlZCBhcyBh
bgorLy8gb3B0aW1pemF0aW9uLiBJdCdzIGEgcHJldHR5IGltcG9ydGFudCBvcHRpbWl6YXRpb24u
IFNvbWUgbW9yZSBub3RlczoKKy8vCisvLyAtIFdlIGRlZmluZSBzY3JhdGNoIHJlZ2lzdGVycyBh
cyB0aGluZ3MgdGhhdCBhcmUgbm90IGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFuZCBhcmUgbm90
IG9uZSBvZgorLy8gICB0aGUgZGVzdGluYXRpb25zIG9mIHRoZSBzaHVmZmxlLiBOb3QgYmVpbmcg
bGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYWxzbyBtZWFucyB0aGF0IHRoZXkgY2Fubm90CisvLyAg
IGJlIHVzZWQgCisvLworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVl
ZGVkIHdoZW4geW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3Ro
CisvLyAgIGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFu
dGVlZCBub3QgdG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2Fw
IGluc3RydWN0aW9uIGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBo
YXZlIGFueSBtZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhl
IGRlc3RpbmF0aW9uIG9mCisvLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2
IHdoaWxlIEZQIG5ldmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5nIG1lbW9yeSBs
b2NhdGlvbnMgYXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSBy
ZWdpc3RlciBhbGxvY2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2Ug
ZW1pdFNodWZmbGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9l
cyBuZWVkCisvLyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2Ft
ZW50IGlzIHRvIGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKKy8vICAg
cmVnaXN0ZXIgYWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZm
bGUgaW5zdHJ1Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZsaW5ncyB1bnRp
bCBhZnRlciByZWdhbGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkg
cGFpcnMgYXJlIG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5
b3Ugd2FudAorLy8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBt
YWtpbmcgc3VyZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KKy8v
ICAgZ2V0IGFjY2VwdGFibGUgcGVyZm9ybWFuY2UuCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUo
CisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3Jh
dGNoLCBBcmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0
aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMg
b3IgbWVtb3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1
bGVzIGFib3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxT
aHVmZmxlUGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBj
b25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJ
bnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9y
IChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIGlu
c3QpOworfQorCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBW
ZWN0b3I8SW5zdD4mJiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAg
ICAgICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0
aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9p
bnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NDg1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXBw
ZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7
CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3Rv
cjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5z
dD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZv
aWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCit7CisgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2MiKTsKKworICAgIC8v
IEZJWE1FOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGFwcGVuZGluZyBzY3JhdGNoIHRvIHRoZSBhcmds
aXN0LgorICAgIEhhc2hTZXQ8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOworCisg
ICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2
ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlICE9
IFNodWZmbGUgJiYgaW5zdC5vcGNvZGUgIT0gU2xvd0NDYWxsKSB7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBsb2NhbENhbGMubGl2
ZSgpKQorICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7
CisKKyAgICAgICAgICAgIC8vIFdlIGZpZ3VyZSBvdXQgd2hhdCBzY3JhdGNoIGxvY2F0aW9ucyB0
byB1c2Ugbm93LiBXZSBhcHBlbmQgdGhlbSB0byB0aGUgYXJncywgc28gdGhhdAorICAgICAgICAg
ICAgLy8gd2UgaGF2ZSB0aGVtIGF2YWlsYWJsZSBsYXRlciBmb3IgbG93ZXJpbmcuCisgICAgICAg
ICAgICBBcmc6OmZvckVhY2hUeXBlKAorICAgICAgICAgICAgICAgIFsmXSAoQXJnOjpUeXBlIHR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHJlZykp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OnN0YWNrKGNvZGUuYWRk
U3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRyYW5zZm9ybSB0aGUgY29kZS4KKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgYXV0byBnZXRTY3JhdGNo
ZXMgPSBbJl0gKCkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKKyAgICAgICAgICAgICAgICBzdGQ6
OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IGluc3Qu
YXJncy50YWtlTGFzdCgpOworICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IGluc3QuYXJncy50
YWtlTGFzdCgpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAg
ICAgICAgICBjYXNlIFNodWZmbGU6IHsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywg
Mj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJh
eTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcygpOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAg
ICBTaHVmZmxlUGFpciBwYWlyKGluc3QuYXJnc1tpICsgMF0sIGluc3QuYXJnc1tpICsgMV0sIGlu
c3QuYXJnc1tpICsgMl0ud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxl
KHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAg
ICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBjYXNlIFNsb3dDQ2FsbDogeworICAgICAgICAgICAgICAgIENDYWxs
VmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxWYWx1ZT4oKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0
U2NyYXRjaGVzKCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRj
aCA9IGdldFNjcmF0Y2hlcygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZl
Y3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwg
dmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxl
UGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
c3RpbmF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckFmdGVyUmVnQWxsb2MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisjZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvY19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgbG93ZXJzIFNo
dWZmbGUgYW5kIENvbGRDQ2FsbCBpbnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQg
dG8gYmUgcnVuIGFmdGVyIHJlZ2lzdGVyCisvLyBhbGxvY2F0aW9uLgorCit2b2lkIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxs
b2NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDE0IEBAIE1v
dmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKICAgICB4ODY6
IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisg
ICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6
Rzo2NAorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6
MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIsIFRtcCBhcyBs
b2FkMzIKQEAgLTY3Miw3ICs2ODAsMTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9v
cHMgL3Rlcm1pbmFsCiAKKyMgQSBTaHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBtdWx0aS1kZXN0
aW5hdGlvbiBtb3ZlLiBJdCBzaW11bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1vdmVzIGF0IG9u
Y2UuCisjIFRoZSBtb3ZlcyBhcmUgc3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNyYywgZHN0LCBh
bmQgd2lkdGguIEZvciBleGFtcGxlIHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhpcworIyB3YXk6
CisjICAgICBTaHVmZmxlICV0bXAxLCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwgNjQKK2N1c3Rv
bSBTaHVmZmxlCisKICMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3Mg
YmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAog
IyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNoCiAKKyMgSW5z
dHJ1Y3Rpb25zIHVzZWQgZm9yIGxvd2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0IG1ha2UgaXQg
dG8gQWlyIGdlbmVyYXRpb24uIFRoZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRoaW5nIGVsc2Ug
Zmlyc3QuIFRoZSBvcmlnaW4gVmFsdWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitjdXN0b20gQ0Nh
bGwKK2N1c3RvbSBDb2xkQ0NhbGwKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268746</attachid>
            <date>2016-01-11 21:40:09 -0800</date>
            <delta_ts>2016-01-12 11:44:53 -0800</delta_ts>
            <desc>some more lowering done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57061</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9CiAK
K2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9vbCBv
cHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJRElW
U3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRp
b25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAg
ICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0
LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjU1LDYgKzY1NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBEYXRhTGFi
ZWwzMih0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3FfcnIoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlKTsKKyAgICB9CisKICAgICB2b2lkIG1vdmU2NFRvRG91YmxlKFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dnFfcnIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw2
ICsxNDMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9YQ0hHX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hH
X0V2R3YsIHNyYywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwyMSArMjAwLDE0IEBAIGJv
b2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yVmFsdWUKICAgICBjYXNlIEFyZzo6VG1w
OgogICAgIGNhc2UgQXJnOjpJbW06CiAgICAgY2FzZSBBcmc6OkltbTY0OgotICAgIGNhc2UgQXJn
OjpTdGFjazoKLSAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgYnJlYWs7IC8vIE9LCi0g
ICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKLSAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6
OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSk7CiAKLSAgICByZXR1cm4gYXJnLmlzVHlwZSh0
eXBlKTsKKyAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7CiB9CiAKIGJvb2wgU3Rh
Y2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYgY29kZSwgY29uc3QgQWly
OjpBcmcmIGFyZywgY29uc3QgVmFsdWVSZXAmIHJlcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw5
IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVj
aWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTYxLDYgKzE2NCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBcmcKICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFs
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91
dC5wcmludCgiV2lkdGhBcmciKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjUsMTYgKzIzMSwxNiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewog
ICAgIGNhc2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAg
ICAgIG91dC5wcmludCgiOCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRo
MTY6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0
LnByaW50KCJXaWR0aDMyIik7CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQi
KTsKKyAgICAgICAgb3V0LnByaW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDggQEAgcHVibGljOgogICAgICAgICBSZWxDb25kLAogICAgICAgICBSZXND
b25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBTcGVjaWFsCisgICAgICAgIFNwZWNp
YWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7
CkBAIC0xNTYsNiArMTU3LDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0
YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihGUCk7CisgICAgfQorCiAgICAgZW51
bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwKICAgICAgICAgV2lkdGgxNiwKQEAg
LTIyMCw2ICsyMjgsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9sZSkg
JiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUm9sZSBjb29sZWQoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVz
ZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlz
RWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTU0OSw2ICs1NzcsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgd2lkdGhBcmco
V2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gV2lkdGhBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHdpZHRoOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBB
cmcmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVy
Lm1fb2Zmc2V0CkBAIC01ODUsNiArNjIxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW02NDsKICAgICB9CiAKKyAgICBib29sIGlzU29tZUltbSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0ltbTY0KCk7CisgICAgfQorCiAgICAgYm9v
bCBpc0FkZHIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOwpA
QCAtNjA1LDYgKzY0NiwzMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5k
ZXg7CiAgICAgfQogCisgICAgYm9vbCBpc01lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6
CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAg
IHJldHVybiBhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAg
ICAgICAgICAgICAgICB8fCBhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaXNSZWxDb25k
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYz
Nyw2ICs3MDUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7
CiAgICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwx
OCArNzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAg
IGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBD
YWxsQXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAg
ICAgCiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3OTIsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1f
b2Zmc2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFdpZHRoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdp
ZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MjIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1
cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzg0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODgyLDExIEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgY2FuUmVwcmVzZW50KFZhbHVl
KiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1R5cGUodHlwZUZvckIzVHlw
ZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTUzLDYgKzEw
MjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3Vi
bGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NCw2ICsxMDUw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChUbXAg
dG1wKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VzID0gZmFsc2U7CisgICAgICAgIGZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJUbXApIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3RoZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgICAgICB1c2VzID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdXNlczsKKyAgICB9CisKICAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4K
K0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsKHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1
bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICB1bnNpZ25lZCBhcmd1
bWVudEluZGV4ID0gYXJndW1lbnRDb3VudCsrOworICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFu
a0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpCisgICAgICAgIHJldHVybiBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7CisKKyAgICB1bnNpZ25l
ZCBzbG90U2l6ZTsKKyAgICBpZiAoaXNBUk02NCgpICYmIGlzSU9TKCkpIHsKKyAgICAgICAgLy8g
QXJndW1lbnRzIGFyZSBwYWNrZWQuCisgICAgICAgIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGls
ZC0+dHlwZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsaWdu
ZWQuCisgICAgICAgIHNsb3RTaXplID0gODsKKyAgICB9CisKKyAgICBzdGFja09mZnNldCA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworICAgIEFyZyBy
ZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOworICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FyZyBtYXJzaGFsbENDYWxsQXJndW1l
bnQoCisgICAgdW5zaWduZWQmIGdwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJndW1lbnRD
b3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgc3dpdGNo
IChBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpIHsKKyAgICBjYXNlIEFyZzo6R1A6
CisgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+KGFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6OkZQOgorICAgICAg
ICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxGUFJJbmZvPihhcmd1bWVudENvdW50
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitWZWN0b3I8QXJnPiBjb21wdXRlQ0Nh
bGxpbmdDb252ZW50aW9uKENvZGUmIGNvZGUsIENDYWxsVmFsdWUqIHZhbHVlKQoreworICAgIFZl
Y3RvcjxBcmc+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKFRtcChDQ2FsbFNwZWNpYWw6OnNj
cmF0Y2hSZWdpc3RlcikpOworICAgIHVuc2lnbmVkIGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAg
dW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyAr
K2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIG1hcnNoYWxsQ0NhbGxB
cmd1bWVudChncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHZh
bHVlLT5jaGlsZChpKSkpOworICAgIH0KKyAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUo
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZz
ZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUbXAgY0NhbGxSZXN1bHQoVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgcmV0dXJu
IFRtcCgpOworICAgIGNhc2UgSW50MzI6CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgcmV0dXJu
IEdQUkluZm86OnJldHVyblZhbHVlR1BSOworICAgIGNhc2UgRmxvYXQ6CisgICAgY2FzZSBEb3Vi
bGU6CisgICAgICAgIHJldHVybiBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUbXAoKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZl
bnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNkZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50
aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihD
b2RlJiwgQ0NhbGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQoVHlwZSk7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBDQ2Fs
bFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgaWYg
KGluc3QuYXJncy5zaXplKCkgIT0gMSArICh2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkg
KyB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
VGhlIGFyZ3VtZW50cyBjYW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVk
aWF0ZXMuCisgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFy
Zy5pc1RtcCgpICYmICFhcmcuaXNTdGFjaygpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKwor
ICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fubm90IGJlIGFuIGltbWVkaWF0
ZS4KKyAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7CisgICAgICAgIGlmIChpbnN0LmFy
Z3NbMV0uaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghaW5zdC5hcmdzWzFdLmNhblJlcHJlc2VudCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLT5udW1DaGlsZHJlbigpOyBpLS07KSB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IHZh
bHVlLT5jaGlsZChpKTsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsK
KyAgICAgICAgaWYgKCFhcmcuY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpK
dW1wIENDYWxsQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6
ICIgKyBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2Jvb2wgU2h1ZmZsZUN1c3RvbTo6aXNW
YWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAlIDMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhhc2hTZXQ8QXJnPiBzcmNzOworICAgIEhhc2hT
ZXQ8QXJnPiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzWzBdOworICAgICAgICB1
bnNpZ25lZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAg
ICAgICAgLy8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJn
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUu
CisgICAgICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghc3Jjcy5hZGQoc3Jj
KS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFk
c3RzLmFkZChkc3QpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZy5pc1RtcCgpIHx8IGFyZy5pc01lbW9yeSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworQ0NhbGxIZWxwZXJzOjpKdW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3Qs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRB
TDogVW5sb3dlcmVkIHNodWZmbGU6ICIgKyBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQg
d2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNwZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFs
d2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVuIGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtl
IGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERlZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rp
b24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVj
dGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBh
cmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQpAQCAtOTYsNiArOTgsMTEzIEBAIHN0cnVj
dCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAorLy8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0
cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQn
cyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGggYW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3
aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlvbnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisv
LyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2Nh
dG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5z
dCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIENDYWxsVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgdW5zaWduZWQg
aW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVz
ZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQorICAgICAgICAKKyAg
ICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICAgICAgZnVuY3RvcigK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAorICAgICAgICAg
ICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAg
ICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAg
IGZ1bmN0b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwK
KyAgICAgICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSksCisgICAg
ICAgICAgICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3Qm
KTsKKworICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGhhc05vbkFy
Z05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBqdXN0IGNyYXNoZXMsIHNpbmNlIHdlIGV4cGVjdCBDIGNhbGxz
IHRvIGJlIGxvd2VyZWQgYmVmb3JlIGdlbmVyYXRpb24uCisgICAgc3RhdGljIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQm
KTsKK307CisKK3N0cnVjdCBDb2xkQ0NhbGxDdXN0b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3Qm
IGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBUaGlzIGlz
IGp1c3QgbGlrZSBhIGNhbGwsIGJ1dCB1c2VzIGJlY29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1
c3RvbTo6Zm9yRWFjaEFyZygKKyAgICAgICAgICAgIGluc3QsCisgICAgICAgICAgICBbJl0gKEFy
ZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGFyZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUs
IHdpZHRoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlQ3Vz
dG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZv
ckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGxpbWl0ID0gaW5zdC5hcmdzLnNpemUoKSAvIDMgKiAzOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gMykgeworICAgICAgICAgICAgQXJn
JiBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgQXJnJiBkc3QgPSBpbnN0LmFy
Z3NbaSArIDFdOworICAgICAgICAgICAgQXJnJiB3aWR0aEFyZyA9IGluc3QuYXJnc1tpICsgMl07
CisgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gd2lkdGhBcmcud2lkdGgoKTsKKyAgICAg
ICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3JjLmlzR1AoKSAmJiBkc3QuaXNHUCgpID8gQXJnOjpH
UCA6IEFyZzo6RlA7CisgICAgICAgICAgICBmdW5jdG9yKHNyYywgQXJnOjpVc2UsIHR5cGUsIHdp
ZHRoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoZHN0LCBBcmc6OkRlZiwgdHlwZSwgd2lkdGgpOwor
ICAgICAgICAgICAgZnVuY3Rvcih3aWR0aEFyZywgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6V2lk
dGg4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZEZvcm0oSW5zdCYpOworICAgIAorICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3Qm
LCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXggJSAzKSB7Cisg
ICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0
JikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9u
Q29udGV4dCYpOworfTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRW1pdFNodWZmbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNodWZmbGUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5k
UG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7
CisgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAg
ICBpZiAoZnVuY3RvcihyZWcpKQorICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisgICAg
cmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlw
ZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsKKyAgICByZXR1cm4gZmluZFBv
c3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAgWyZdIChSZWcgcmVnKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1wKFRtcChyZWcpKSAmJiAhYXJn
Mi51c2VzVG1wKFRtcChyZWcpKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCit2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30K
KworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mIHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlwZSwg
VmFsdWUqIG9yaWdpbikKK3sKKyAgICAvLyBGaXJzdCB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgdGhl
IGtpbmQgb2Ygc2h1ZmZsZSB0aGF0IHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aC4KKyAgICBmb3Ig
KGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgQVNTRVJUKHBhaXIu
Zmlyc3QoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQoKS5pc1R5
cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQoKS5pc1RtcCgpIHx8IHBhaXIu
c2Vjb25kKCkuaXNNZW1vcnkoKSk7CisgICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHR3byBwb3Nz
aWJsZSBraW5kcyBvZiBvcGVyYXRpb25zIHRoYXQgd2Ugd2lsbCBkbzoKKyAgICAvLworICAgIC8v
IC0gU2hpZnQuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYykuIFdlIGVtaXQgdGhpcyBhcyAiTW92
ZSBiLCBjOyBNb3ZlIGEsIGIiLiBUaGlzIG9ubHkgcmVxdWlyZXMKKyAgICAvLyAgIHNjcmF0Y2gg
cmVnaXN0ZXJzIGlmIHRoZXJlIGFyZSBtZW1vcnktPm1lbW9yeSBtb3Zlcy4gV2Ugd2FudCB0byBm
aW5kIGFzIG1hbnkgb2YgdGhlc2UgYXMKKyAgICAvLyAgIHBvc3NpYmxlIGJlY2F1c2UgdGhleSBh
cmUgY2hlYXBlci4KKyAgICAvLworICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBi
ID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5z
dHJ1Y3Rpb24KKyAgICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdl
IG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8g
ICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBh
KS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4g
Tm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0
aHMuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBv
cGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdl
IGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2Fy
ZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNl
LgorICAgIEhhc2hNYXA8QXJnLCA8VmVjdG9yPFNodWZmbGVQYWlyPj4gc2hpZnRzOworCisgICAg
Ly8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3YXBzIG92ZXIgc3JjKCkncyB0aGF0IHNob3VsZCBi
ZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4gZm9yIGEgbGlzdAorICAgIC8vIG9mIHNpemUgMyB3
ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNyYygpLCBsaXN0WzJdLnNyYygpOyBTd2FwIGxpc3Rb
MF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBj
YW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMgZG9uJ3QgbWF0Y2ggb3Igb3RoZXIgYmFkIHRoaW5n
cyBoYXBwZW4uCisgICAgVmVjdG9yPFZlY3RvcjxTaHVmZmxlUGFpcj4+IHJvdGF0ZXM7CisKKyAg
ICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBTaHVmZmxlUGFpcj4gbWFwcGluZzsKKyAgICAgICAg
Zm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAgICAgICAgbWFwcGlu
Zy5hZGQocGFpci5zcmMoKSwgcGFpcik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBj
dXJyZW50UGFpcnM7CisKKyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgSGFzaE1hcDxBcmcsIFNodWZmbGVQYWlyPjo6aXRlcmF0b3IgaXRlciA9IG1hcHBp
bmcuYmVnaW4oKTsKKyAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAg
ICAgICAgIG1hcHBpbmcucmVtb3ZlKGl0ZXIpOworCisgICAgICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZChwYWlyKTsKKworICAgICAgICAgICAg
ICAgIGl0ZXIgPSBtYXBwaW5nLmZpbmQocGFpci5kc3QoKSk7CisgICAgICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5k
c3QoKSA9PSBjdXJyZW50UGFpcnNbMF0uc3JjKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
b3RhdGVzLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnRQYWlycykpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBv
c3NpYmxlIHRoYXQgd2UgcHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzaGlmdC4gU2VlIGlmIHRoYXQncyB0aGUgY2FzZSBub3cuCisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBwZW5kVmVjdG9yKHNoaWZ0cy50
YWtlKHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0cy5hcHBlbmQo
V1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcGFpciA9ICppdGVyOworICAgICAgICAgICAgICAgIG1hcHBpbmcucmVt
b3ZlKGl0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW4g
dGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUgd2F5IHdl
IGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcworICAgIC8vIHVzIHdoYXQgc2NyYXRj
aCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBhcm91bmQuIFdlIHdpbGwgbmVl
ZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAg
Ly8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBzcmMgYW5kIGRzdCByZWZlciB0
byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2FwIGluc3RydWN0aW9uIGlzIGF2
YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5IGZvciB1cywgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1lIHdlIGhhdmUgYSBTaGlmdCB0
aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNlYXJjaCBmb3Igc3VjaCBhIHJl
Z2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8gbW92ZUZvcldpZHRoID0gWyZdIChXaWR0aCB3
aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNl
IFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDog
TW92ZUZsb2F0OworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsK
KworICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2Vy
dmF0aXZlV2lkdGgodHlwZSkpOworCisgICAgLy8gV2Ugd2lsbCBlbWl0IHRoaW5ncyBpbiByZXZl
cnNlLiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFja3Mgb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhl
biB3ZSBlbWl0CisgICAgLy8gYXBwZW5kIHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSAoZm9yIGV4
YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2YgcmVzdWx0UGFja3MgaXMgcGxhY2VkCisgICAg
Ly8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSBsYXN0IHRoaW5nIHdlIGVtaXQg
ZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgc28KKyAgICAvLyBpdCBhZmZlY3Rz
IGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQuCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0Pj4g
cmVzdWx0UGFja3M7CisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKworICAgIGF1dG8gY29tbWl0
UmVzdWx0ID0gWyZdICgpIHsKKyAgICAgICAgcmVzdWx0UGFja3MuYXBwZW5kKFdURk1vdmUocmVz
dWx0KSk7CisgICAgfTsKKworICAgIGF1dG8gZ2V0U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5k
ZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRtcCB7CisgICAgICAgIGlmIChzY3JhdGNoZXNb
aW5kZXhdLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaGVzW2luZGV4XS50bXAo
KTsKKworICAgICAgICBpZiAoIXBvc3NpYmxlU2NyYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBU
bXAoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdp
biwgcG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNbaW5kZXhdKSk7CisgICAgICAgIHJldHVybiBw
b3NzaWJsZVNjcmF0Y2g7CisgICAgfTsKKworICAgIGF1dG8gcmV0dXJuU2NyYXRjaCA9IFsmXSAo
dW5zaWduZWQgaW5kZXgsIFRtcCB0bXApIHsKKyAgICAgICAgaWYgKEFyZyh0bXApICE9IHNjcmF0
Y2hlc1tpbmRleF0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZl
TW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhdLCB0bXApKTsKKyAgICB9OworCisgICAgYXV0
byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyLCB1bnNpZ25l
ZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBw
YWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0KKyAgICAg
ICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0
eXBlLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzY3JhdGNoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgo
cGFpci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwg
c2NyYXRjaCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuU2NyYXRjaChzY3JhdGNo
SW5kZXgsIHNjcmF0Y2gpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgp
KSwgb3JpZ2luLiBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgfQorCisgICAgYXV0byBo
YW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgaGFuZGxl
U2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBBcmcgbGFzdERzdCA9IHNoaWZ0Lmxh
c3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNUbXAoKSkgeworICAgICAgICAgICAg
Zm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2guaXNUbXAo
KSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0gbGFzdERzdDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0cyB3aG9zZSBsYXN0IGRlc3Rp
bmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBzY3JhdGNoIHJlZ2lzdGVycy4K
KyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwgc2VxdWVuY2UsIHNvIHRoZSBm
aW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBiZQorICAgIC8vIGF2YWlsYWJs
ZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVtaXR0ZWQgcHJpb3IgKHNvLCBh
ZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyByZXZlcnNlKS4KKyAgICBmb3Ig
KFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0IDogc2hpZnRzKSB7CisgICAgICAgIGlmIChzaGlm
dC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsK
KyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRsZSB0aGUg
cmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQg
OiBzaGlmdHMpIHsKKyAgICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAg
ICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7Cisg
ICAgfQorCisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiByb3RhdGUgOiByb3RhdGVzKSB7
CisgICAgICAgIGJvb2wgY2FuU3dhcCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dhcCA9IE9v
cHM7CisgICAgICAgIFdpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1
ZQorICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCkgeworICAgICAgICAgICAg
c3dhcCA9IFN3YXAzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGgzMjsKKyAg
ICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpX
aWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgc3dhcCA9IFN3YXA2NDsKKyAgICAg
ICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0OworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpUbXApOwor
ICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAg
ICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJn
OjpUbXAsIEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdGFr
ZSB0aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMuIFRoYXQgZ2V0
cyB0b28KKyAgICAgICAgICAgICAgICAgICAgLy8gY29uZnVzaW5nLgorICAgICAgICAgICAgICAg
ICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRoKCkgPCBzd2FwV2lkdGgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6ZSgpIC0gMTsgaS0tOykg
eworICAgICAgICAgICAgICAgIEFyZyBsZWZ0ID0gcm90YXRlW2ldLnNyYygpOworICAgICAgICAg
ICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZVtpICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0
ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92
aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9m
IHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQg
b25jZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3Jh
dGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0
KSk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCks
IG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwg
c2NyYXRjaCwgbGVmdCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNj
cmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0
ZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6OldpZHRoMzIpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6OldpZHRoNjQpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdpbiwgcGFpci5kc3QsIHBhaXIuZHN0KCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiB0cmVh
dCB0aGlzIGFzIGEgc2hpZnQgc28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRlc3RpbmF0aW9u
IChpLmUuIGZpcnN0CisgICAgICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0IGZpcnN0LiBU
aGVuIHdlIGhhbmRsZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhlIHJvdGF0ZQor
ICAgICAgICAgICAgLy8gc3BlY2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBsYXN0IGRlc3Rp
bmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAgICAgICAgICAv
LyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgYSBy
b3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWlsYWJsZSByZWdp
c3RlciBmaWxlLgorCisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJsZVNjcmF0
Y2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFpci5zcmMoKS51c2VzVG1wKFRtcChyZWcpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFpci5kc3QoKS51c2VzVG1wKFRtcChyZWcpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHNj
cmF0Y2ggPSBnZXRTY3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICBBcmcgcm90YXRl
U2F2ZSA9IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGUubGFzdCgp
LmRzdCgpLCByb3RhdGVTYXZlLCByb3RhdGVbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAg
ICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRlW2ldLCAxKTsKKworICAgICAgICAgICAgaGFuZGxl
U2hpZnRQYWlyKFNodWZmbGVQYWlyKHJvdGF0ZVNhdmUsIHJvdGF0ZVswXS5kc3QoKSwgcm90YXRl
WzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAg
ICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
cmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZm
bGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gs
IGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoKQoreworICAgIFZlY3RvcjxzdGQ6
OnBhaXI8QXJnLCBBcmc+PiBncFBhaXJzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXJnLCBBcmc+
PiBmcFBhaXJzOworICAgIGZvciAoc3RkOjpwYWlyPEFyZywgQXJnPiBwYWlyIDogcGFpcnMpIHsK
KyAgICAgICAgaWYgKHBhaXIuZmlyc3QuaXNNZW1vcnkoKSAmJiBwYWlyLnNlY29uZC5pc01lbW9y
eSgpICYmIHBhaXIud2lkdGgoKSA+IHBvaW50ZXJXaWR0aCgpKSB7CisgICAgICAgICAgICAvLyA4
LWJ5dGUgbWVtb3J5LXRvLW1lbW9yeSBtb3ZlcyBvbiBhIDMyLWJpdCBwbGF0Zm9ybSBhcmUgYmVz
dCBoYW5kbGVkIGFzIGZsb2F0IG1vdmVzLgorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFp
cik7CisgICAgICAgIH0gZWxzZSBpZiAocGFpci5maXJzdC5pc0dQKCkgJiYgcGFpci5zZWNvbmQu
aXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRzIG1l
bW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAgICAg
ICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhjZXB0
IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVuZChw
YWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0
b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQKSk7CisgICAgcmVzdWx0
LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFyZzo6RlApKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyRW1pdFNodWZmbGVfaAorI2RlZmluZSBBaXJFbWl0U2h1ZmZsZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxl
UGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIFdpZHRoIHdpZHRoKQorICAgICAg
ICA6IG1fc3JjKHNyYykKKyAgICAgICAgLCBtX2RzdChkc3QpCisgICAgICAgICwgbV93aWR0aCh3
aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7IHJldHVy
biBtX3NyYzsgfQorICAgIGNvbnN0IEFyZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9kc3Q7IH0K
KworICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRoZSBraW5kIG9mIG1vdmUgd2UgZG8uIFlv
dSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0aDY0IHJpZ2h0IG5vdy4KKyAgICAvLyBG
b3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFuZCBNb3ZlLiBGb3IgRlAsIGl0IHBpY2tz
IGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91YmxlLgorICAgIFdpZHRoIHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBBcmcgbV9kc3Q7CisgICAg
V2lkdGggbV93aWR0aDsKK307CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxlIG9mIGEgZ2l2ZW4gdHlw
ZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5LiBZb3Ugc2hvdWxkIHBhc3MgaXQg
YXMKKy8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUgc2NyYXRjaCByZWdpc3Rl
cnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBpcywgdGhleSdyZQorLy8gcmVnaXN0
ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNodWZmbGUsIGhhdmUgdGhlIHNhbWUg
dHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKKy8vIGxpdmUgYXQgdGhlIHNodWZmbGUg
LSB0aGVuIHlvdSBjYW4gcGFzcyB0aGVtLiBJZiB5b3UgZG9uJ3QgaGF2ZSBzY3JhdGNoIHJlZ2lz
dGVycyBhdmFpbGFibGUgb3IgaWYKKy8vIHlvdSBkb24ndCBmZWVsIGxpa2UgbG9va2luZyBmb3Ig
dGhlbSwgeW91IGNhbiBwYXNzIG1lbW9yeSBsb2NhdGlvbnMuIEl0J3MgYWx3YXlzIHNhZmUgdG8g
cGFzcyBhCisvLyBwYWlyIG9mIG1lbW9yeSBsb2NhdGlvbnMsIGFuZCByZXBsYWNpbmcgZWl0aGVy
IG1lbW9yeSBsb2NhdGlvbiB3aXRoIGEgcmVnaXN0ZXIgY2FuIGJlIHZpZXdlZCBhcyBhbgorLy8g
b3B0aW1pemF0aW9uLiBJdCdzIGEgcHJldHR5IGltcG9ydGFudCBvcHRpbWl6YXRpb24uIFNvbWUg
bW9yZSBub3RlczoKKy8vCisvLyAtIFdlIGRlZmluZSBzY3JhdGNoIHJlZ2lzdGVycyBhcyB0aGlu
Z3MgdGhhdCBhcmUgbm90IGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFuZCBhcmUgbm90IG9uZSBv
ZgorLy8gICB0aGUgZGVzdGluYXRpb25zIG9mIHRoZSBzaHVmZmxlLiBOb3QgYmVpbmcgbGl2ZSBi
ZWZvcmUgdGhlIHNodWZmbGUgYWxzbyBtZWFucyB0aGF0IHRoZXkgY2Fubm90CisvLyAgIGJlIHVz
ZWQgCisvLworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdo
ZW4geW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3RoCisvLyAg
IGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFudGVlZCBu
b3QgdG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2FwIGluc3Ry
dWN0aW9uIGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBoYXZlIGFu
eSBtZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3Rp
bmF0aW9uIG9mCisvLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2IHdoaWxl
IEZQIG5ldmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5nIG1lbW9yeSBsb2NhdGlv
bnMgYXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSByZWdpc3Rl
ciBhbGxvY2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2UgZW1pdFNo
dWZmbGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9lcyBuZWVk
CisvLyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2FtZW50IGlz
IHRvIGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKKy8vICAgcmVnaXN0
ZXIgYWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZmbGUgaW5z
dHJ1Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZsaW5ncyB1bnRpbCBhZnRl
ciByZWdhbGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkgcGFpcnMg
YXJlIG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5b3Ugd2Fu
dAorLy8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBtYWtpbmcg
c3VyZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KKy8vICAgZ2V0
IGFjY2VwdGFibGUgcGVyZm9ybWFuY2UuCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAg
Y29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBB
cmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGlu
dm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMgb3IgbWVt
b3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFi
b3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxl
UGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBz
dGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTk0ODU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhz
aXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9yIChjb25z
dCBJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIGluc3QpOwor
fQorCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8
SW5zdD4mJiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAg
aW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0
OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRp
b25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NDg1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXBwZW5kSW5z
ZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CiAgICAg
fQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0
PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJik7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgaW5z
ZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2MiKTsKKworICAgIEhhc2hTZXQ8
SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2
ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRl
eC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAg
IGlmIChpbnN0Lm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qub3Bjb2RlID09IFNsb3dDQ2FsbCkg
eworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAg
ICAgaWYgKHNldC5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBn
ZXRTY3JhdGNoZXMgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIEFyZzo6VHlwZSB0eXBl
KSAtPiBzdGQ6OmFycmF5PEFyZywgMj4geworICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVz
dWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdz
SW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJl
ZykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkg
eworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soCisgICAgICAgICAgICAg
ICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpi
eXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIC8vIE5vdyB0cmFuc2Zvcm0g
dGhlIGNvZGUuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAg
IGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdICgpIC0+IHN0ZDo6YXJyYXk8QXJnLCAyPiB7CisgICAg
ICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbMV0gPSBpbnN0LmFyZ3MudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICByZXN1bHRb
MF0gPSBpbnN0LmFyZ3MudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChpbnN0
Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTaHVmZmxlOiB7CisgICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworICAgICAgICAgICAg
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAg
ICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAg
QXJnIGRzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzcmMuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQoc3JjLnJl
ZygpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywg
ZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OmFy
cmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7CisgICAg
ICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhz
ZXQsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygK
KyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3Jh
dGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgaW5zdCA9IElu
c3QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY2FzZSBTbG93Q0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luLT5hczxDQ2FsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCBwcmVVc2VkOworICAgICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9
IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOwor
ICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW3Jlc3VsdCA/IChpID49IDEg
PyBpICsgMSA6IGkpIDogaSBdOworICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gZGVzdGlu
YXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3
aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3JjLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldChz
cmMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJn
LCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7CisgICAgICAg
ICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVV
c2VkLCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCByZWdzVG9TYXZlID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworCisgICAgICAgICAg
ICAgICAgLy8gQWxzbyBuZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVnaXN0ZXJzLiBEb24ndCBuZWVk
IHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvLyByZWdpc3Rlci4K
KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9T
YXZlLmNsZWFyKHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xv
dCo+IHN0YWNrU2xvdHM7CisgICAgICAgICAgICAgICAgcG9zdFVzZWQuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
bXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVX
aWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3Rh
Y2tTbG90ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChB
cmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6c3RhY2soc3Rh
Y2tTbG90KSwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdHMuYXBw
ZW5kKHN0YWNrU2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAg
ICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0
Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdChQYXRjaCwg
aW5zdC5vcmlnaW4sIEFyZzo6c3BlY2lhbChjb2RlLmNDYWxsU3BlY2lhbCgpKSk7CisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbMF0pOworICAgICAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
KSk7CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVz
dGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBk
ZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byBlbWl0IGNvZGUgdG8g
cmVzdG9yZSByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgcGFpcnMucmVzaXplKDApOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2xvdEluZGV4ID0gMDsKKyAgICAgICAgICAgICAg
ICBwb3N0VXNlZC5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFja1Nsb3RzW3N0YWNrU2xvdElu
ZGV4KytdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWly
KEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAg
IFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBpbnN0LmFyZ3NbMV0sIEFyZzo6d2lkdGhGb3JCM1R5
cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQocGFp
cik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5zZXQocmVzdWx0LnJlZygpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0g
Z2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpG
UCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShw
YWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNl
cnRpb25TZXQuZXhlY3V0ZShjb2RlKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvY19oCisjZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgbG93ZXJzIFNodWZmbGUgYW5kIENvbGRDQ2FsbCBp
bnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGFmdGVyIHJlZ2lz
dGVyCisvLyBhbGxvY2F0aW9uLgorCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJik7CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3
b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgog
ICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0
cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAs
IEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisg
ICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6
ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3ICs2ODAs
MTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBT
aHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBtdWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11
bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1vdmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUg
c3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNyYywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxl
IHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhpcworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAx
LCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwgNjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFs
bG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5l
ZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBm
aXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNoCiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxv
d2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRo
ZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFs
dWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitjdXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwK
KworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268792</attachid>
            <date>2016-01-12 11:44:53 -0800</date>
            <delta_ts>2016-01-12 15:16:49 -0800</delta_ts>
            <desc>almost</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9CiAK
K2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9vbCBv
cHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJRElW
U3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRp
b25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsKKyAg
ICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0
LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjU1LDYgKzY1NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBEYXRhTGFi
ZWwzMih0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3FfcnIoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXA2NChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ3Ffcm0oc3JjLCBkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlKTsKKyAgICB9CisKICAgICB2b2lkIG1vdmU2NFRvRG91YmxlKFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dnFfcnIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw2
ICsxNDMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChP
UF9YQ0hHX0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lz
dGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Cisg
ICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hH
X0V2R3YsIHNyYywgZHN0KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDEsMzcgKzE1NDEsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaW52ZXJ0ZWQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZv
PgotICAgIEFyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQodW5zaWduZWQmIGFyZ3VtZW50Q291bnQs
IHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKLSAgICAgICAgaWYgKGFyZ3Vt
ZW50SW5kZXggPCBCYW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgewotICAgICAg
ICAgICAgVG1wIHJlc3VsdCA9IFRtcChCYW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3Vt
ZW50SW5kZXgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY2hpbGQt
PnR5cGUoKSksIGltbU9yVG1wKGNoaWxkKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLQotI2lmIENQVShBUk02NCkgJiYgUExBVEZPUk0oSU9TKQotICAg
ICAgICAvLyBpT1MgZG9lcyBub3QgZm9sbG93IHRoZSBBUk02NCBBQkkgcmVnYXJkaW5nIGZ1bmN0
aW9uIGNhbGxzLgotICAgICAgICAvLyBBcmd1bWVudHMgbXVzdCBiZSBwYWNrZWQuCi0gICAgICAg
IHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKLSAgICAgICAg
c3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zm
c2V0KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mKHZvaWQqKTsK
LSNlbmRpZgotICAgICAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0KTsK
LSAgICAgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7Ci0gICAgICAgIAotICAgICAgICAvLyBQ
dXQgdGhlIGNvZGUgZm9yIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGJlZm9yZSBhbnl0aGluZyBlbHNl
LiBUaGlzIHNpZ25pZmljYW50bHkgZWFzZXMgdGhlCi0gICAgICAgIC8vIGJ1cmRlbiBvbiB0aGUg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBJZiB3ZSBjb3VsZCwgd2UnZCBob2lzdCB0aGVzZSBzdG9yZXMg
YXMgZmFyIGFzCi0gICAgICAgIC8vIHBvc3NpYmxlLgotICAgICAgICAvLyBGSVhNRTogQWRkIGEg
cGhhc2UgdG8gaG9pc3Qgc3RvcmVzIGFzIGhpZ2ggYXMgcG9zc2libGUgdG8gcmVsaWV2ZSByZWdp
c3RlciBwcmVzc3VyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MTA2MwotICAgICAgICBtX2luc3RzLmxhc3QoKS5pbnNlcnQoMCwgY3JlYXRl
U3RvcmUoY2hpbGQsIHJlc3VsdCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+b3Bjb2RlKCkpIHsKQEAgLTE5MTksMTQgKzE4ODgsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAgICBj
YXNlIEIzOjpDQ2FsbDogewogICAgICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3ZhbHVl
LT5hczxDQ2FsbFZhbHVlPigpOwotICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2FsbCwg
QXJnOjpzcGVjaWFsKG1fY29kZS5jQ2FsbFNwZWNpYWwoKSkpOwotCi0gICAgICAgICAgICAvLyBU
aGlzIGlzIGEgYml0IHdlaXJkIC0gd2UgaGF2ZSBhIHN1cGVyIGludGVuc2UgY29udHJhY3Qgd2l0
aCBBcmc6OkNDYWxsU3BlY2lhbC4gSXQgbWlnaHQKLSAgICAgICAgICAgIC8vIGJlIGJldHRlciBp
ZiB3ZSBmYWN0b3JlZCBBaXI6OkNDYWxsU3BlY2lhbCBvdXQgb2YgdGhlIEFpciBuYW1lc3BhY2Ug
YW5kIG1hZGUgaXQgYSBCMwotICAgICAgICAgICAgLy8gdGhpbmcuCi0gICAgICAgICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA0NQorICAg
ICAgICAgICAgSW5zdCBpbnN0KEFpcjo6Q0NhbGwsIGNDYWxsKTsKIAogICAgICAgICAgICAgLy8g
V2UgaGF2ZSBhIHRvbiBvZiBmbGV4aWJpbGl0eSByZWdhcmRpbmcgdGhlIGNhbGxlZSBhcmd1bWVu
dCwgYnV0IGN1cnJlbnRseSwgd2UgZG9uJ3QKICAgICAgICAgICAgIC8vIHVzZSBpdCB5ZXQuIEl0
IGdldHMgd2VpcmQgZm9yIHJlYXNvbnM6CkBAIC0xOTM5LDQ4ICsxOTAzLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MTA1MgogICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0NhbGwtPmNo
aWxkKDApKSk7CiAKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdGVsbCBBaXIgd2hhdCByZWdp
c3RlcnMgdGhpcyBkZWZpbmVzLgotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZChUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKLQotICAgICAgICAgICAgLy8gTm93IG1h
cnNoYWxsIHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgd2hlcmUgd2UgaW1wbGVtZW50IHRoZSBDIGNh
bGxpbmcgY29udmVudGlvbi4gQWZ0ZXIKLSAgICAgICAgICAgIC8vIHRoaXMsIEFpciBkb2VzIG5v
dCBrbm93IHdoYXQgdGhlIGNvbnZlbnRpb24gaXM7IGl0IGp1c3QgdGFrZXMgb3VyIHdvcmQgZm9y
IGl0LgotICAgICAgICAgICAgdW5zaWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
dGFja09mZnNldCA9IDA7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0Nh
bGwtPm51bUNoaWxkcmVuKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBhcmdDaGls
ZCA9IGNDYWxsLT5jaGlsZChpKTsKLSAgICAgICAgICAgICAgICBBcmcgYXJnOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGFyZ0No
aWxkLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgotICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8R1BSSW5mbz4oZ3BBcmd1bWVu
dENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChjQ2FsbC0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0NhbGwpKTsKIAotICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50
PEZQUkluZm8+KGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGFyZ0NoaWxkKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGNDYWxsLT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5z
dC5hcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGTW92ZShpbnN0KSk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoY0NhbGwtPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNh
c2UgSW50NjQ6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiksIHRtcChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBGbG9hdDoKLSAgICAgICAgICAgIGNhc2UgRG91YmxlOgotICAgICAgICAgICAg
ICAgIGFwcGVuZChNb3ZlRG91YmxlLCBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpLCB0bXAo
Y0NhbGwpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMCwyMSArMjAwLDE0IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yVmFs
dWUKICAgICBjYXNlIEFyZzo6VG1wOgogICAgIGNhc2UgQXJnOjpJbW06CiAgICAgY2FzZSBBcmc6
OkltbTY0OgotICAgIGNhc2UgQXJnOjpTdGFjazoKLSAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAg
ICAgICAgYnJlYWs7IC8vIE9LCi0gICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAgICAgIGlmIChhcmcu
YmFzZSgpICE9IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKLSAgICAgICAgICAgICYm
IGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAg
QXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSk7CiAKLSAg
ICByZXR1cm4gYXJnLmlzVHlwZSh0eXBlKTsKKyAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2
YWx1ZSk7CiB9CiAKIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6
Q29kZSYgY29kZSwgY29uc3QgQWlyOjpBcmcmIGFyZywgY29uc3QgVmFsdWVSZXAmIHJlcCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDg1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDYgKzExMSw5IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAo
c3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBv
dXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE2NCw5IEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKICAgICAg
ICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6
V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmciKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjUsMTYg
KzIzMSwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiB7CiAg
ICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgxNiIpOwor
ICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6
V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7CisgICAgICAgIG91dC5wcmlu
dCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAg
ICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnByaW50KCI2NCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgcHVibGljOgogICAgICAgICBS
ZWxDb25kLAogICAgICAgICBSZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBT
cGVjaWFsCisgICAgICAgIFNwZWNpYWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAg
IGVudW0gUm9sZSA6IGludDhfdCB7CkBAIC0xNTYsNiArMTU3LDEzIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihG
UCk7CisgICAgfQorCiAgICAgZW51bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwK
ICAgICAgICAgV2lkdGgxNiwKQEAgLTIyMCw2ICsyMjgsMjYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaXNBbnlVc2Uocm9sZSkgJiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBz
dGF0aWMgUm9sZSBjb29sZWQoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBj
YXNlIFNjcmF0Y2g6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4g
cm9sZTsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAg
ICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAg
ICAgICB9CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMg
dGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNl
LgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTU0OSw2
ICs1NzcsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAg
IHN0YXRpYyBBcmcgd2lkdGhBcmcoV2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gV2lkdGhBcmc7CisgICAgICAgIHJlc3VsdC5t
X29mZnNldCA9IHdpZHRoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CkBAIC01ODUsNiArNjIxLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKICAgICB9CiAKKyAgICBib29sIGlz
U29tZUltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0ltbTY0
KCk7CisgICAgfQorCiAgICAgYm9vbCBpc0FkZHIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBBZGRyOwpAQCAtNjA1LDYgKzY0NiwzMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc01lbW9yeSgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6
CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc1N0
YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgICAgICB8fCBhcmcuYmFzZSgpID09IFRtcChN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBjYXNlIFN0YWNr
OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5k
KCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs3MDUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4ga2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAg
ICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8
IGlzU3RhY2soKTsKQEAgLTY4MCwxOCArNzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9iYXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBT
dGFjazoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAg
IHsKQEAgLTczMCw2ICs3OTIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFdpZHRoKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBp
c0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1AoKTsKQEAgLTc1NCw2ICs4MjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoK
ICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAg
IGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBU
bXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzg0MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAg
ICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2Fz
ZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6
CkBAIC04MTIsNiArODgyLDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJv
b2wgY2FuUmVwcmVzZW50KFZhbHVlKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc1R5cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgfQorCiAgICAgYm9v
bCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5p
c0dQUigpOwpAQCAtOTUzLDYgKzEwMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29u
ZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAg
ICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTk3NCw2ICsxMDUwLDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGJvb2wgdXNlc1RtcChUbXAgdG1wKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VzID0gZmFs
c2U7CisgICAgICAgIGZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJU
bXApIHsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAg
ICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdXNl
czsKKyAgICB9CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4g
YWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8g
dG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNDQ2Fs
bFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rSW5mbz4KK0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsKHVuc2ln
bmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkK
K3sKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gYXJndW1lbnRDb3VudCsrOworICAgIGlm
IChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpCisg
ICAgICAgIHJldHVybiBUbXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudElu
ZGV4KSk7CisKKyAgICB1bnNpZ25lZCBzbG90U2l6ZTsKKyAgICBpZiAoaXNBUk02NCgpICYmIGlz
SU9TKCkpIHsKKyAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBwYWNrZWQuCisgICAgICAgIHNsb3RT
aXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBBcmd1bWVudHMgYXJlIGFsaWduZWQuCisgICAgICAgIHNsb3RTaXplID0gODsKKyAgICB9CisK
KyAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6ZSwgc3Rh
Y2tPZmZzZXQpOworICAgIEFyZyByZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOwor
ICAgIHN0YWNrT2Zmc2V0ICs9IHNsb3RTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Fy
ZyBtYXJzaGFsbENDYWxsQXJndW1lbnQoCisgICAgdW5zaWduZWQmIGdwQXJndW1lbnRDb3VudCwg
dW5zaWduZWQmIGZwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSog
Y2hpbGQpCit7CisgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkp
IHsKKyAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1l
bnRJbXBsPEdQUkluZm8+KGFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAg
Y2FzZSBBcmc6OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxG
UFJJbmZvPihhcmd1bWVudENvdW50Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitW
ZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUmIGNvZGUsIENDYWxsVmFs
dWUqIHZhbHVlKQoreworICAgIFZlY3RvcjxBcmc+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5k
KFRtcChDQ2FsbFNwZWNpYWw6OnNjcmF0Y2hSZWdpc3RlcikpOworICAgIHVuc2lnbmVkIGdwQXJn
dW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICB1
bnNpZ25lZCBzdGFja09mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZh
bHVlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAg
ICAgICAgIG1hcnNoYWxsQ0NhbGxBcmd1bWVudChncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQsIHZhbHVlLT5jaGlsZChpKSkpOworICAgIH0KKyAgICBjb2RlLnJl
cXVlc3RDYWxsQXJnQXJlYVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgc3RhY2tPZmZzZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUbXAg
Y0NhbGxSZXN1bHQoVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
Vm9pZDoKKyAgICAgICAgcmV0dXJuIFRtcCgpOworICAgIGNhc2UgSW50MzI6CisgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJldHVyblZhbHVlR1BSOworICAgIGNhc2Ug
RmxvYXQ6CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVybiBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBUbXAoKTsKK30KKworSW5zdCBidWlsZENDYWxsKENvZGUmIGNvZGUsIGNvbnN0IFZl
Y3RvcjxBcmc+JiBhcmd1bWVudHMpCit7CisgICAgSW5zdCByZXN1bHQoUGF0Y2gsIGluc3Qub3Jp
Z2luLCBBcmc6OnNwZWNpYWwoY29kZS5jQ2FsbFNwZWNpYWwoKSkpOworICAgIGluc3QuYXJncy5h
cHBlbmQoZGVzdGluYXRpb25zWzBdKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJldHVy
blZhbHVlRlBSKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAgICBpZiAo
YXJnLmlzVG1wKCkpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisj
ZGVmaW5lIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxW
YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK1ZlY3RvcjxBcmc+IGNv
bXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxsVmFsdWUqKTsKKworVG1wIGNDYWxs
UmVzdWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYsIGNvbnN0IFZlY3RvcjxBcmc+
Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5z
dCkKK3sKKyAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVl
PigpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpICE9IDEgKyAodmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDEpICsg
dmFsdWUtPm51bUNoaWxkcmVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRo
ZSBhcmd1bWVudHMgY2FuIG9ubHkgcmVmZXIgdG8gdGhlIHN0YWNrLCB0bXBzLCBvciBpbW1lZGlh
dGVzLgorICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgaWYgKCFhcmcu
aXNUbXAoKSAmJiAhYXJnLmlzU3RhY2soKSAmJiAhYXJnLmlzU29tZUltbSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisKKyAg
ICAvLyBJZiB0aGVyZSBpcyBhIHJlc3VsdCB0aGVuIGl0IGNhbm5vdCBiZSBhbiBpbW1lZGlhdGUu
CisgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBpZiAoaW5zdC5hcmdz
WzFdLmlzU29tZUltbSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWluc3QuYXJnc1sxXS5jYW5SZXByZXNlbnQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBvZmZzZXQrKzsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2
YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgaS0tOykgeworICAgICAgICBWYWx1ZSogdmFsdWUgPSB2YWx1
ZS0+Y2hpbGQoaSk7CisgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV07Cisg
ICAgICAgIGlmICghYXJnLmNhblJlcHJlc2VudCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NDYWxsSGVscGVyczo6SnVt
cCBDQ2FsbEN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgQyBjYWxsOiAi
ICsgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0
dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVDdXN0b206OmlzVmFs
aWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgJSAzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1heSBvbmx5IGFwcGVh
ciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0aGUgdW5kZWZpbmVk
IGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhhdCBpcyBzdXBwb3Nl
ZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBhbHNvCisgICAgLy8g
aW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAic2hhcGUiIG9mIHRo
ZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8vIGFzIGFuIGVkZ2Ug
YW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGluYXRpb24gcmVxdWly
ZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNvbnNpc3RzIG9mIHR3
byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5uaW5nIHRyZWVzLiBX
ZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMgYSBzZXF1ZW5jZSBv
ZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFsbHkgcmVxdWlyZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxvb3BzLiBUaGVzZSBs
b29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29yIGFuZCBvbmUgcHJl
ZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdldCBpbnRvIiB0aGUg
bG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRlZCB1c2luZyBzd2Fw
cworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBhIHNjcmF0Y2ggcmVn
aXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hTZXQ8QXJnPiBkc3Rz
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkg
eworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzWzBdOworICAgICAgICB1bnNpZ25lZCBtb2Rl
ID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAgLy8gSXQn
cyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJnKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUuCisgICAgICAgIGlm
ICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtb2Rl
ID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChkc3QpLmlzTmV3RW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZy5p
c1RtcCgpIHx8IGFyZy5pc01lbW9yeSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIFNodWZmbGVD
dXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIHNodWZmbGU6ICIgKyBpbnN0
LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0Nh
bGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0
byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNw
ZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVu
IGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERl
ZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUg
dGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0
LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBz
dHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQpAQCAtOTYsNiArOTgsMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAor
Ly8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90
IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGgg
YW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlv
bnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwg
c28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0
IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRp
YyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFs
dWU+KCk7CisKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3Io
aW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgo
KSk7IC8vIGNhbGxlZQorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9p
ZCkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5k
ZXgrK10sIEFyZzo6RGVmLAorICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1
ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50
eXBlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUt
PmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAgICAgICAgICAgaW5z
dC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwKKyAgICAgICAgICAgICAgICBBcmc6OnR5cGVGb3JC
M1R5cGUoY2hpbGQtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3aWR0aEZvckIzVHlw
ZShjaGlsZC0+dHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJn
dW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKworICAgIHN0YXRpYyBib29sIGFkbWl0c1N0
YWNrKEluc3QmLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gVGhpcyBqdXN0IGNyYXNo
ZXMsIHNpbmNlIHdlIGV4cGVjdCBDIGNhbGxzIHRvIGJlIGxvd2VyZWQgYmVmb3JlIGdlbmVyYXRp
b24uCisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxI
ZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKK3N0cnVjdCBDb2xkQ0NhbGxDdXN0
b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgbGlrZSBhIGNhbGwsIGJ1dCB1c2VzIGJl
Y29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1c3RvbTo6Zm9yRWFjaEFyZygKKyAgICAgICAgICAg
IGluc3QsCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGFy
ZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KK307CisKK3N0cnVjdCBTaHVmZmxlQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gaW5zdC5hcmdz
LnNpemUoKSAvIDMgKiAzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGltaXQ7
IGkgKz0gMykgeworICAgICAgICAgICAgQXJnJiBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOworICAg
ICAgICAgICAgQXJnJiBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAgICAgICAgQXJnJiB3
aWR0aEFyZyA9IGluc3QuYXJnc1tpICsgMl07CisgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRo
ID0gd2lkdGhBcmcud2lkdGgoKTsKKyAgICAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3JjLmlz
R1AoKSAmJiBkc3QuaXNHUCgpID8gQXJnOjpHUCA6IEFyZzo6RlA7CisgICAgICAgICAgICBmdW5j
dG9yKHNyYywgQXJnOjpVc2UsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoZHN0
LCBBcmc6OkRlZiwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVuY3Rvcih3aWR0aEFyZywg
QXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6V2lkdGg4KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
Rm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworICAgIAorICAgIHN0
YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoaW5kZXggJSAzKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSAx
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKwogfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpclNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBl
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJp
b3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICBpZiAoZnVuY3RvcihyZWcpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlZzsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBv
c3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcm
IGFyZzIpIHsKKyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwK
KyAgICAgICAgWyZdIChSZWcgcmVnKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJn
MS51c2VzVG1wKFRtcChyZWcpKSAmJiAhYXJnMi51c2VzVG1wKFRtcChyZWcpKTsKKyAgICAgICAg
fSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFNodWZmbGVQYWlyOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHdpZHRoKCksICI6
Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAor
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNo
ZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQoreworICAgIHBhaXJzLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09IHBhaXIuZHN0KCk7CisgICAgICAg
IH0pOworICAgIAorICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBpcyB0aGUga2luZCBv
ZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAgIGZvciAoY29uc3Qg
U2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFpci5maXJzdCgp
LmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VSVChwYWlyLnNlY29uZCgpLmlzVHlwZSh0eXBl
KSk7CisgICAgICAgIEFTU0VSVChwYWlyLnNlY29uZCgpLmlzVG1wKCkgfHwgcGFpci5zZWNvbmQo
KS5pc01lbW9yeSgpKTsKKyAgICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtp
bmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlm
dC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7
IE1vdmUgYSwgYiIuIFRoaXMgb25seSByZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdpc3Rl
cnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMg
bWFueSBvZiB0aGVzZSBhcworICAgIC8vICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVh
cGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNhbiBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9u
ZWQKKyAgICAvLyAgIG11bHRpcGxlIHRpbWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIg
PT4gZCwgYiA9PiBlKS4KKyAgICAvLworICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBi
LCBiID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQg
aW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNl
IHdlIG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAg
Ly8gICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9
PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBi
Ii4gTm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3
aWR0aHMuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3Vj
aCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVtIGluIGFueSBvcmRlci4KKworICAgIC8v
IFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNr
d2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291
cmNlLgorICAgIEhhc2hNYXA8QXJnLCA8VmVjdG9yPFNodWZmbGVQYWlyPj4gc2hpZnRzOworCisg
ICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3YXBzIG92ZXIgc3JjKCkncyB0aGF0IHNob3Vs
ZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4gZm9yIGEgbGlzdAorICAgIC8vIG9mIHNpemUg
MyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNyYygpLCBsaXN0WzJdLnNyYygpOyBTd2FwIGxp
c3RbMF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxs
eSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMgZG9uJ3QgbWF0Y2ggb3Igb3RoZXIgYmFkIHRo
aW5ncyBoYXBwZW4uCisgICAgVmVjdG9yPFZlY3RvcjxTaHVmZmxlUGFpcj4+IHJvdGF0ZXM7CisK
KyAgICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBtYXBwaW5n
OworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpCisgICAgICAg
ICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFp
cik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7CisKKyAgICAg
ICAgR3JhcGhOb2RlV29ya2xpc3Q8QXJnPiB3b3JrbGlzdDsKKyAgICAgICAgd2hpbGUgKCFtYXBw
aW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgd29ya2xpc3QucHVzaChtYXBwaW5nLmJlZ2lu
KCktPmtleSk7CisgICAgICAgICAgICB3aGlsZSAoQXJnIHNyYyA9IHdvcmtsaXN0LnBvcCgpKSB7
CisgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+OjppdGVy
YXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXaXRoIGEgc2hpZnQg
aXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkgYnVpbHQgdGhlIHRhaWwgb2YgdGhpcyBz
aGlmdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoYXQncyB0aGUgY2FzZSBub3cu
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmRWZWN0b3Ioc2hpZnRzLnRh
a2Uoc3JjKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzID0gV1RGTW92ZShp
dGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkgPT0gc3JjKTsKKyAgICAgICAgICAgICAgICAgICAg
d29ya2xpc3QucHVzaChwYWlyLmRzdCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuc2l6ZSgpKTsKKworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRQYWlycy5sYXN0KCkuZHN0KCkgPT0gY3VycmVudFBhaXJzWzBdLnNy
YygpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdyYXBoIHNlYXJjaCB0ZXJtaW5hdGVz
IGJlY2F1c2Ugd2UgcmV0dXJuZWQgdG8gdGhlIGZpcnN0IHNvdXJjZSwgdGhlbiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBwYWlyIGxpc3QgaGFzIHRvIGhhdmUgYSB2ZXJ5IHBhcnRpY3VsYXIgc2hh
cGUuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudFBhaXJzLnNpemUo
KSAtIDE7IGktLTspCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnNbaV0u
ZHN0KCkgPT0gY3VycmVudFBhaXJzW2kgKyAxXS5zcmMoKSk7CisgICAgICAgICAgICAgICAgcm90
YXRlcy5hcHBlbmQoY3VycmVudFBhaXJzKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHNoaWZ0cy5hcHBlbmQoY3VycmVudFBhaXJzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4g
VGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3
aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBX
ZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNh
c2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBk
c3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVj
dGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBn
dWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZl
IGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9y
IHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsm
XSAoV2lkdGggd2lkdGgpIC0+IE9wY29kZSB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAg
ICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/
IE1vdmUzMiA6IE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAg
cmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChB
cmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGlu
Z3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9u
cywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVy
c2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBs
YWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGlu
ZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8g
aXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0
b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBh
dXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVu
c2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAo
c2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tp
bmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVN
b3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAg
ICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0
Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1w
KSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNv
bnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsK
KworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFp
ciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9wY29kZSBtb3ZlID0gbW92ZUZv
cldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzVmFsaWRGb3Jt
KG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtpbmQoKSkpIHsKKyAgICAgICAg
ICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRl
eCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2lu
LCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qo
TW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFsdWUoKSksIHNjcmF0Y2gpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lk
dGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWlyLmRzdCgpKSk7CisgICAgICAg
ICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRjaCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0
KG1vdmUsIG9yaWdpbi4gcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgIH0KKworICAgIGF1
dG8gaGFuZGxlU2hpZnQgPSBbJl0gKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNoaWZ0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGhh
bmRsZVNoaWZ0UGFpcihzaGlmdFtpXSwgMCk7CisKKyAgICAgICAgQXJnIGxhc3REc3QgPSBzaGlm
dC5sYXN0KCkuZHN0KCk7CisgICAgICAgIGlmIChsYXN0RHN0LmlzVG1wKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoQXJnJiBzY3JhdGNoIDogc2NyYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHNjcmF0Y2ggIT0gbGFzdERzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFzY3JhdGNoLmlz
VG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaCA9IGxhc3REc3Q7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEZpcnN0IGhhbmRsZSBzaGlmdHMgd2hvc2UgbGFzdCBk
ZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUgdXAgc2NyYXRjaCByZWdpc3Rl
cnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNlLCBzbyB0
aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdpbGwgYmUKKyAgICAvLyBhdmFp
bGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGluZyBlbWl0dGVkIHByaW9yIChz
bywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAgLy8gcmV2ZXJzZSkuCisgICAg
Zm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA6IHNoaWZ0cykgeworICAgICAgICBpZiAo
c2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlm
dCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUg
dGhlIHJlc3Qgb2YgdGhlIHNoaWZ0cy4KKyAgICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNo
aWZ0IDogc2hpZnRzKSB7CisgICAgICAgIGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkp
CisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgp
OworICAgIH0KKworICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYgcm90YXRlIDogcm90YXRl
cykgeworICAgICAgICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3YXAg
PSBPb3BzOworICAgICAgICBXaWR0aCBzd2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8gYm9ndXMg
dmFsdWUKKyAgICAgICAgCisgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKKyAgICAgICAg
ICAgIHN3YXAgPSBTd2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoMzI7
CisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlKSB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7Cisg
ICAgICAgICAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYW5Td2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6VG1w
KTsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocGFpci5zcmMoKS5pc01lbW9yeSgpIHx8IHBhaXIuZHN0KCkuaXNNZW1v
cnkoKSkgeworICAgICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAs
IEFyZzo6VG1wLCBBcmc6OkFkZHIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0
IHRha2UgdGhlIHN3YXBwaW5nIHBhdGggaWYgdGhlcmUgaXMgYSBtaXggb2Ygd2lkdGhzLiBUaGF0
IGdldHMgdG9vCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbmZ1c2luZy4KKyAgICAgICAgICAg
ICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuU3dh
cCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAtIDE7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsKKyAgICAg
ICAgICAgICAgICBBcmcgcmlnaHQgPSByb3RhdGVbaSArIDFdLnNyYygpOworCisgICAgICAgICAg
ICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21lLiBS
b3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIC8v
IE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBhIGxv
dCBvZiByYXJlIHN0dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFwcGVu
IGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUbXAg
c2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCBy
aWdodCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lk
dGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmln
aW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgw
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdodCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiBy
b3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAgICAg
Ly8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0LCBwYWlyLmRzdCgpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4g
dHJlYXQgdGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5h
dGlvbiAoaS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJz
dC4gVGhlbiB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3Rh
dGUKKyAgICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBk
ZXN0aW5hdGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAg
ICAgLy8gZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZl
IGEgcm90YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUg
cmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVT
Y3JhdGNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhaXIuZHN0KCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgQXJnIHJv
dGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1ZmZsZVBhaXIocm90YXRlLmxh
c3QoKS5kc3QoKSwgcm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsgaS0tID4gMTspCisgICAgICAg
ICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7CisKKyAgICAgICAgICAgIGhh
bmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGVbMF0uZHN0KCksIHJv
dGF0ZVswXS53aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAg
ICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAg
ICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAg
ICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxT
aHVmZmxlUGFpcj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3Jh
dGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCkKK3sKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPEFyZywgQXJnPj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFyZywg
QXJnPj4gZnBQYWlyczsKKyAgICBmb3IgKHN0ZDo6cGFpcjxBcmcsIEFyZz4gcGFpciA6IHBhaXJz
KSB7CisgICAgICAgIGlmIChwYWlyLmZpcnN0LmlzTWVtb3J5KCkgJiYgcGFpci5zZWNvbmQuaXNN
ZW1vcnkoKSAmJiBwYWlyLndpZHRoKCkgPiBwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAg
Ly8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJl
IGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5k
KHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuZmlyc3QuaXNHUCgpICYmIHBhaXIuc2Vj
b25kLmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0
cyBtZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisg
ICAgICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4
Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBl
bmQocGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFp
cik7CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCkpOworICAgIHJl
c3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBBcmc6OkZQ
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNodWZmbGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTaHVmZmxlUGFpciB7CitwdWJsaWM6CisgICAgU2h1
ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZHN0LCBXaWR0aCB3aWR0aCkKKyAg
ICAgICAgOiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0KQorICAgICAgICAsIG1fd2lk
dGgod2lkdGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZyYgc3JjKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHN0
OyB9CisKKyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3ZlIHdlIGRv
LiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cuCisgICAg
Ly8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQLCBpdCBw
aWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KKyAgICBXaWR0aCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0Owor
ICAgIFdpZHRoIG1fd2lkdGg7Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVu
IHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNz
IGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVn
aXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8vIHJl
Z2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBz
YW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBzaHVm
ZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRjaCBy
ZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tpbmcg
Zm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBzYWZl
IHRvIHBhc3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5nIGVp
dGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMgYW4K
Ky8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9uLiBT
b21lIG1vcmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMgYXMg
dGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5vdCBv
bmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5nIGxp
dmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8gICBi
ZSB1c2VkIAorLy8KKy8vIC0gQSBzZWNvbmQgc2NyYXRjaCBsb2NhdGlvbiBpcyBvbmx5IG5lZWRl
ZCB3aGVuIHlvdSBoYXZlIHNodWZmbGUgcGFpcnMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYm90aAor
Ly8gICBhcyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorLy8KKy8vIC0gWW91J3JlIGd1YXJhbnRl
ZWQgbm90IHRvIG5lZWQgYW55IHNjcmF0Y2ggbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEgU3dhcCBp
bnN0cnVjdGlvbiBhdmFpbGFibGUgZm9yCisvLyAgIHRoZSB0eXBlIGFuZCB5b3UgZG9uJ3QgaGF2
ZSBhbnkgbWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFyZSBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBk
ZXN0aW5hdGlvbiBvZgorLy8gICBzb21lIHBhaXJzLiBHUCBzdXBwb3J0cyBTd2FwIG9uIHg4NiB3
aGlsZSBGUCBuZXZlciBzdXBwb3J0cyBTd2FwLgorLy8KKy8vIC0gUGFzc2luZyBtZW1vcnkgbG9j
YXRpb25zIGFzIHNjcmF0Y2ggaWYgYXJlIHJ1bm5pbmcgZW1pdFNodWZmbGUoKSBiZWZvcmUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiBpcworLy8gICBzaWxseSwgc2luY2UgdGhhdCB3aWxsIGNhdXNlIGVt
aXRTaHVmZmxlKCkgdG8gcGljayBzb21lIHNwZWNpZmljIHJlZ2lzdGVycyB3aGVuIGl0IGRvZXMg
bmVlZAorLy8gICBzY3JhdGNoLiBPbmUgZWFzeSB3YXkgdG8gYXZvaWQgdGhhdCBwcmVkaWNhbWVu
dCBpcyB0byBlbnN1cmUgdGhhdCB5b3UgY2FsbCBlbWl0U2h1ZmZsZSgpIGFmdGVyCisvLyAgIHJl
Z2lzdGVyIGFsbG9jYXRpb24uIEZvciB0aGlzIHJlYXNvbiB3ZSBjb3VsZCBhZGQgYSBTaHVmZmxl
IGluc3RydWN0aW9uIHNvIHRoYXQgd2UgY2FuIGRlZmVyCisvLyAgIHNodWZmbGluZ3MgdW50aWwg
YWZ0ZXIgcmVnYWxsb2MuCisvLworLy8gLSBTaHVmZmxlcyB3aXRoIG1lbW9yeT0+bWVtb3J5IHBh
aXJzIGFyZSBub3QgdmVyeSB3ZWxsIHR1bmVkLiBZb3Ugc2hvdWxkIGF2b2lkIHRoZW0gaWYgeW91
IHdhbnQKKy8vICAgcGVyZm9ybWFuY2UuIElmIHlvdSBuZWVkIHRvIGRvIHRoZW0sIHRoZW4gbWFr
aW5nIHN1cmUgdGhhdCB5b3UgcmVzZXJ2ZSBhIHRlbXBvcmFyeSBpcyBvbmUgd2F5IHRvCisvLyAg
IGdldCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAor
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4sIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBBcmc6
OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGludm9s
dmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMgb3IgbWVtb3J5
IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3Zl
LgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6
OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYg
KzM1LDggQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFp
ckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuaCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKyNpbmNsdWRlICJB
aXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAi
QWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVy
cy5oIgpAQCAtNjUsNiArNjcsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNv
ZGUpCiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQogCisgICAgbG93ZXJNYWNyb3MoY29k
ZSk7CisKICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQg
dHJhbnNmb3JtYXRpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgpAQCAt
ODAsNiArODQsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAg
ZWxzZQogICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAorICAgIGxv
d2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKwogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhl
IHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNp
dC4gSXQgYWxzbwogICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVl
LXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVz
KGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
ZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywx
OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAK
K3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3Rv
cjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCisg
ICAgICAgIGluc2VydEluc3QoaW5kZXgsIGluc3QpOworfQorCit2b2lkIEluc2VydGlvblNldDo6
aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJiBpbnN0cykKK3sKKyAgICBm
b3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92
ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJs
b2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9u
cy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
ZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDkgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwg
c3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0
cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5z
dHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93
ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0Fs
bG9jKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dl
ckFmdGVyUmVnQWxsb2MiKTsKKworICAgIEhhc2hTZXQ8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2Vk
UmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2Fs
YyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVm
ZmxlIHx8IGluc3Qub3Bjb2RlID09IFNsb3dDQ2FsbCkgeworICAgICAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
cmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJl
Z2lzdGVycygpKQorICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQp
OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBnZXRTY3JhdGNoZXMgPSBbJl0gKGNvbnN0
IFJlZ2lzdGVyU2V0JiBzZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywgMj4g
eworICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHJlc3Vs
dFtpXSA9IEFyZzo6c3RhY2soCisgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90
KAorICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdp
ZHRoKHR5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfTsKKworICAgIC8vIE5vdyB0cmFuc2Zvcm0gdGhlIGNvZGUuCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZd
ICgpIC0+IHN0ZDo6YXJyYXk8QXJnLCAyPiB7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxB
cmcsIDI+IHJlc3VsdDsKKyAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBpbnN0LmFyZ3MudGFr
ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBpbnN0LmFyZ3MudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAg
Y2FzZSBTaHVmZmxlOiB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJl
Z2lzdGVycy5nZXQoJmluc3QpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4g
cGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJn
cy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5h
cmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGluc3QuYXJnc1tpICsg
MV07CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSAr
IDJdLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmMuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldC5zZXQoc3JjLnJlZygpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0aCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0g
Z2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxB
cmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6RlApOworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5z
dEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3Jp
Z2luKSk7CisgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBTbG93Q0NhbGw6IHsKKyAg
ICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsVmFs
dWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmVVc2VkOworICAgICAgICAg
ICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRp
b24oY29kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3Vs
dCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0
b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBBcmcg
c3JjID0gaW5zdC5hcmdzW3Jlc3VsdCA/IChpID49IDEgPyBpICsgMSA6IGkpIDogaSBdOworICAg
ICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAg
ICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywg
ZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldChzcmMpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3Jh
dGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcs
IDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkZQKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzVG9TYXZlID0gdXNlZFJl
Z2lzdGVycy5nZXQoJmluc3QpOworCisgICAgICAgICAgICAgICAgLy8gQWxzbyBuZWVkIHRvIHNh
dmUgYWxsIGxpdmUgcmVnaXN0ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1
bHQKKyAgICAgICAgICAgICAgICAvLyByZWdpc3Rlci4KKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmNsZWFyKHJlc3VsdC5yZWcoKSk7
CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7CisgICAgICAg
ICAgICAgICAgcG9zdFVzZWQuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6
OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChBcmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tT
bG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6c3RhY2soc3RhY2tTbG90KSwgd2lkdGgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdHMuYXBwZW5kKHN0YWNrU2xvdCk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0
U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAg
ICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBkZXN0aW5hdGlvbnMpOworCisg
ICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVn
aXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgcG9zdFVzZWQu
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcg
YXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJn
Ojpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc3RhY2tTbG90ID0gc3RhY2tTbG90c1tzdGFja1Nsb3RJbmRleCsrXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihBcmc6OnN0YWNr
KHN0YWNrU2xvdCksIGFyZywgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFp
ciBwYWlyKHJlc3VsdCwgaW5zdC5hcmdzWzFdLCBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50
eXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAg
ICAgICAgIHJlZ3NUb1NhdmUuc2V0KHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hl
cyhyZWdzVG9TYXZlLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywg
Mj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6RlApOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2Ny
YXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoY29kZSk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAor
I2RlZmluZSBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBD
b2RlOworCisvLyBUaGlzIGxvd2VycyBTaHVmZmxlIGFuZCBDb2xkQ0NhbGwgaW5zdHJ1Y3Rpb25z
LiBUaGlzIHBoYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBhZnRlciByZWdpc3RlcgorLy8gYWxs
b2NhdGlvbi4KKwordm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJNYWNyb3MiKTsKKworICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIFZl
Y3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwg
dmFsdWUpOworCisgICAgICAgICAgICAgICAgSW5zdCBzaHVmZmxlQXJndW1lbnRzKFNodWZmbGUs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+dHlwZSgp
ID09IFZvaWQgPyAwIDogMTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFy
Z3VtZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV0pOworICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1tpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3aWR0
aEFyZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KGluc3RJbmRleCwg
V1RGTW92ZShzaHVmZmxlQXJndW1lbnRzKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRpY2F0
ZSB0aGF0IHdlJ3JlIHVzaW5nIG91ciBvcmlnaW5hbCBjYWxsZWUgYXJndW1lbnQuCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25zWzBdID0gaW5zdC5hcmdzWzBdOworCisgICAgICAgICAgICAg
ICAgLy8gU2F2ZSB3aGVyZSB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcHV0IGl0cyByZXN1bHQu
CisgICAgICAgICAgICAgICAgQXJnIHJlc3VsdERzdCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/
IEFyZygpIDogaW5zdC5hcmdzWzFdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAg
ICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1v
dmVGbG9hdCwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91YmxlLCByZXN1bHQsIHJlc3VsdERz
dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsg
MSwgTW92ZTMyLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZSwgcmVzdWx0LCByZXN1bHREc3QpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJNYWNyb3NfaAorI2RlZmluZSBBaXJMb3dl
ck1hY3Jvc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFpciBoYXMgc29t
ZSBvcGNvZGVzIHRoYXQgYXJlIHZlcnkgaGlnaC1sZXZlbCBhbmQgYXJlIG1lYW50IHRvIHJlZHVj
ZSB0aGUgYW1vdW50IG9mIGxvdy1sZXZlbAorLy8ga25vd2xlZGdlIGluIHRoZSBCMy0+QWlyIGxv
d2VyaW5nLiBUaGUgY3VycmVudCBleGFtcGxlIGlzIENDYWxsLgorCit2b2lkIGxvd2VyTWFjcm9z
KENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxvd2VyTWFjcm9zX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpH
OlB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKICAgICB4ODY6IEltbSwgQWRkciBhcyBz
dG9yZVB0cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBUbXAKKyAg
ICBUbXAsIEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwg
VG1wCisgICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRt
cCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3
ICs2ODAsMTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAK
KyMgQSBTaHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBtdWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJ
dCBzaW11bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1vdmVzIGF0IG9uY2UuCisjIFRoZSBtb3Zl
cyBhcmUgc3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNyYywgZHN0LCBhbmQgd2lkdGguIEZvciBl
eGFtcGxlIHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhpcworIyB3YXk6CisjICAgICBTaHVmZmxl
ICV0bXAxLCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwgNjQKK2N1c3RvbSBTaHVmZmxlCisKICMg
QWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0
ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAogIyB3aGljaCBtdXN0IGJl
IHRoZSBmaXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNoCiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQg
Zm9yIGxvd2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRp
b24uIFRoZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFRoZSBvcmln
aW4gVmFsdWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitjdXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xk
Q0NhbGwKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268817</attachid>
            <date>2016-01-12 15:16:49 -0800</date>
            <delta_ts>2016-01-12 18:47:33 -0800</delta_ts>
            <desc>starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87054</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCwxNSBAQAogCQkwRjVFRjkxRTE2ODc4
RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
Y3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQzE2ODc4
Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkEx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwICov
OyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjMxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkQxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1p
dFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2Vy
QWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovOyB9
OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjcxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgzMzExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJN
YWNyb3MuaCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi87IH07CkBAIC0yNTQxLDYgKzI1NTAsMTUgQEAKIAkJMEY1RUY5MUIxNjg3OEY3
ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBwYXRoID0gYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMjMxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbWl0U2h1ZmZs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJM
b3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlckFmdGVy
UmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyNjFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRoID0gYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYx
ODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvYWly
L0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJN
YWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFz
aWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNzAsOCArMzM4OCw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQw
MENBRTYxMyAvKiBKU0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pv
Yi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3
QkYgLyogTWFwUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gTWFwUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1
NTg3RDFDNDE4NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7
IHBhdGggPSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTcwMzU1ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFBy
b3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQx
ODQ1ODAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MDM1NTg3RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFu
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJvb2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwogCQk3MDVCNDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzkxLDEzICs0ODA5LDE4IEBACiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1
MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywK
IAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuY3Bw
ICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5j
cHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmgg
Ki8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3Rl
clN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4MzksMTAgQEAKIAkJCQky
NjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJM
aXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJM
b3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4NERCMiAvKiBBaXJP
cGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0
aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyog
QWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC02ODk2LDYgKzY5MjMsNyBAQAogCQkJCTBG
NDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlE
RjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKQEAgLTY5NTgsNiArNjk4Niw3IEBACiAJCQkJMEZFQzg1MTQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVDMTFC
RTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUx
NjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTUwLDYg
KzcxNzksNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXpl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlD
aGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQzFGMUIxQjg2
OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03NjI0LDYgKzc2NTQsNyBAQAogCQkJCTBGMkI2NkY3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2QzUxNzYxMTgy
NzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNG
NTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTg2OTMsNiArODcyNCw3IEBACiAJCQkJNTJC
NzE3QjUxQTA1OTdFMTAwN0FGNEYzIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCQURGNTQxQkQxRjRCODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBMTExMjQ1MTkyRkNF
NzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04NzQxLDYgKzg3NzMsNyBAQAogCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBE
RkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QkUwRjcyMTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzI5MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMzOEUxMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1
Y3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODc1Nyw2ICs4NzkwLDcgQEAKIAkJCQlBNzhBOTc3
NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJC
QyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlD
Qzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTkwNjgsNiArOTEwMiw3IEBACiAJCQkJRTMzRjUwODQxQjg0MzdBMDAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQx
Qjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MDNGQTFCMTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4
OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTcwMTNDQThCMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjEwLDYgKzkyNDUsNyBAQAogCQkJCTBG
OUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyQjFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFD
M0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlE
ZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUg
Ym9vbCBpc1g4Nl82NCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKIGlubGluZSBib29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVk
KCkKIHsKICAgICByZXR1cm4gaXNBUk12N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VB
cmNoaXRlY3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDEx
LDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hn
bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3Jj
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMs
IGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlv
bmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDYgKzE0MzEsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAg
IH0KIAorICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hH
X0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAg
IHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAg
LTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KKwor
ICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZH
diwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBtb3ZsX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0MSwz
NyArMTU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnZlcnRlZCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+Ci0gICAgQXJnIG1hcnNoYWxsQ0NhbGxBcmd1
bWVudCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1
ZSogY2hpbGQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gYXJndW1l
bnRDb3VudCsrOwotICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzKSB7Ci0gICAgICAgICAgICBUbXAgcmVzdWx0ID0gVG1wKEJhbmtJ
bmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOwotICAgICAgICAgICAgYXBw
ZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjaGlsZC0+dHlwZSgpKSwgaW1tT3JUbXAoY2hpbGQpLCBy
ZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0jaWYgQ1BV
KEFSTTY0KSAmJiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIGlPUyBkb2VzIG5vdCBmb2xsb3cg
dGhlIEFSTTY0IEFCSSByZWdhcmRpbmcgZnVuY3Rpb24gY2FsbHMuCi0gICAgICAgIC8vIEFyZ3Vt
ZW50cyBtdXN0IGJlIHBhY2tlZC4KLSAgICAgICAgdW5zaWduZWQgc2xvdFNpemUgPSBzaXplb2ZU
eXBlKGNoaWxkLT50eXBlKCkpOwotICAgICAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOwotI2Vsc2UKLSAgICAgICAgdW5zaWdu
ZWQgc2xvdFNpemUgPSBzaXplb2Yodm9pZCopOwotI2VuZGlmCi0gICAgICAgIEFyZyByZXN1bHQg
PSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCArPSBzbG90
U2l6ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFB1dCB0aGUgY29kZSBmb3Igc3RvcmluZyB0aGUg
YXJndW1lbnQgYmVmb3JlIGFueXRoaW5nIGVsc2UuIFRoaXMgc2lnbmlmaWNhbnRseSBlYXNlcyB0
aGUKLSAgICAgICAgLy8gYnVyZGVuIG9uIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIElmIHdlIGNv
dWxkLCB3ZSdkIGhvaXN0IHRoZXNlIHN0b3JlcyBhcyBmYXIgYXMKLSAgICAgICAgLy8gcG9zc2li
bGUuCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgYSBwaGFzZSB0byBob2lzdCBzdG9yZXMgYXMgaGln
aCBhcyBwb3NzaWJsZSB0byByZWxpZXZlIHJlZ2lzdGVyIHByZXNzdXJlLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDYzCi0gICAgICAgIG1f
aW5zdHMubGFzdCgpLmluc2VydCgwLCBjcmVhdGVTdG9yZShjaGlsZCwgcmVzdWx0KSk7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQogICAgIHZvaWQgbG93ZXIoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpAQCAtMTkxOSwxNCAr
MTg4OCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgIGNhc2UgQjM6OkNDYWxsOiB7CiAgICAgICAgICAg
ICBDQ2FsbFZhbHVlKiBjQ2FsbCA9IG1fdmFsdWUtPmFzPENDYWxsVmFsdWU+KCk7Ci0gICAgICAg
ICAgICBJbnN0IGluc3QoUGF0Y2gsIGNDYWxsLCBBcmc6OnNwZWNpYWwobV9jb2RlLmNDYWxsU3Bl
Y2lhbCgpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgLSB3ZSBoYXZl
IGEgc3VwZXIgaW50ZW5zZSBjb250cmFjdCB3aXRoIEFyZzo6Q0NhbGxTcGVjaWFsLiBJdCBtaWdo
dAotICAgICAgICAgICAgLy8gYmUgYmV0dGVyIGlmIHdlIGZhY3RvcmVkIEFpcjo6Q0NhbGxTcGVj
aWFsIG91dCBvZiB0aGUgQWlyIG5hbWVzcGFjZSBhbmQgbWFkZSBpdCBhIEIzCi0gICAgICAgICAg
ICAvLyB0aGluZy4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDQ1CisgICAgICAgICAgICBJbnN0IGluc3QoQWlyOjpDQ2Fs
bCwgY0NhbGwpOwogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5
IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3VtZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAog
ICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4gSXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAg
LTE5MzksNDggKzE5MDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJlZ2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7
Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UikpOwotCi0gICAgICAgICAgICAvLyBOb3cgbWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBp
cyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAg
ICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMgbm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBp
czsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBmb3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBn
cEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50
ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0NoaWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAg
ICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dp
dGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJnQ2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0Nh
bGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGls
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50
eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2Fs
bCkpOwogCi0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwt
Pm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGlt
bU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwogCi0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1Rt
cCgpKQotICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChX
VEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEludDMyOgotICAgICAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBh
cHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAg
ICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRtcChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDIxICsyMDAsMTQgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgIGNhc2UgQXJnOjpUbXA6CiAgICAg
Y2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6SW1tNjQ6Ci0gICAgY2FzZSBBcmc6OlN0YWNr
OgotICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICBicmVhazsgLy8gT0sKLSAgICBjYXNl
IEFyZzo6QWRkcjoKLSAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKQotICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6
dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsKIAotICAgIHJldHVybiBhcmcuaXNUeXBlKHR5
cGUpOworICAgIHJldHVybiBhcmcuY2FuUmVwcmVzZW50KHZhbHVlKTsKIH0KIAogYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6
OkFyZyYgYXJnLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwyNiBA
QAogCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BS
SW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CiAKK2Jvb2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6
OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3Rh
Y2s6CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNl
bnRhYmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTYxLDYgKzc4LDIyIEBAIGJvb2wgQXJnOjppc1Jl
cHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwKICAgICB9CiB9CiAKK2Jvb2wgQXJnOjp1c2VzVG1w
KEFpcjo6VG1wIHRtcCkKK3sKKyAgICBib29sIHVzZXMgPSBmYWxzZTsKKyAgICBmb3JFYWNoVG1w
RmFzdCgKKyAgICAgICAgWyZdIChBaXI6OlRtcCBvdGhlclRtcCkgeworICAgICAgICAgICAgaWYg
KG90aGVyVG1wID09IHRtcCkKKyAgICAgICAgICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAg
fSk7CisgICAgcmV0dXJuIHVzZXM7Cit9CisKK2Jvb2wgQXJnOjpjYW5SZXByZXNlbnQoVmFsdWUq
IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBpc1R5cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+
dHlwZSgpKSk7Cit9CisKIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTExMSw2ICsxNDQsOSBAQCB2b2lkIEFyZzo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0
LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBXaWR0aEFyZzoKKyAgICAgICAgb3V0LnByaW50KHdpZHRoKCkpOworICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE2MSw2ICsx
OTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2Fz
ZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBcmc6OldpZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQoIldpZHRo
QXJnIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjI1LDE2ICsyNjQsMTYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZwogewogICAgIHN3aXRjaCAod2lkdGgpIHsKICAgICBjYXNlIEFyZzo6
V2lkdGg4OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIpOworICAgICAgICBvdXQucHJpbnQo
IjgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDE2OgotICAgICAgICBv
dXQucHJpbnQoIldpZHRoMTYiKTsKKyAgICAgICAgb3V0LnByaW50KCIxNiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgz
MiIpOworICAgICAgICBvdXQucHJpbnQoIjMyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEFyZzo6V2lkdGg2NDoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIG91
dC5wcmludCgiNjQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywx
MSBAQAogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgewog
CiBjbGFzcyBTcGVjaWFsOwogY2xhc3MgU3RhY2tTbG90OwpAQCAtNjksNyArNzMsOCBAQCBwdWJs
aWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJsZUNv
bmQsCi0gICAgICAgIFNwZWNpYWwKKyAgICAgICAgU3BlY2lhbCwKKyAgICAgICAgV2lkdGhBcmcK
ICAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsKQEAgLTE1Niw2ICsxNjEsMTMgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFR5cGUo
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoR1ApOworICAg
ICAgICBmdW5jdG9yKEZQKTsKKyAgICB9CisKICAgICBlbnVtIFdpZHRoIDogaW50OF90IHsKICAg
ICAgICAgV2lkdGg4LAogICAgICAgICBXaWR0aDE2LApAQCAtMjIwLDYgKzIzMiwyNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAmJiAhaXNDb2xkVXNlKHJvbGUpOwog
ICAgIH0KIAorICAgIHN0YXRpYyBSb2xlIGNvb2xlZChSb2xlIHJvbGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIExh
dGVDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgor
ICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZUFk
ZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAg
ICAgICAgIHJldHVybiByb2xlOworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVy
biBDb2xkVXNlOworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgICAgICByZXR1cm4gTGF0
ZUNvbGRVc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRvaW5n
IGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUpCiAg
ICAgewpAQCAtNTQ5LDYgKzU4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCisgICAgc3RhdGljIEFyZyB3aWR0aEFyZyhXaWR0aCB3aWR0aCkKKyAgICB7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBXaWR0aEFyZzsKKyAg
ICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gd2lkdGg7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKQEAgLTU4NSw2ICs2
MjUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0K
IAorICAgIGJvb2wgaXNTb21lSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0lt
bSgpIHx8IGlzSW1tNjQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjUwLDIxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29s
IGlzTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
ICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJn
OgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBib29sIGlzU3RhY2tNZW1vcnkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNSZWxDb25kKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2
ICs2OTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CiAg
ICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwxOCAr
NzQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAgIGJv
b2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0g
ICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBDYWxs
QXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAgICAg
CiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3ODQsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zm
c2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IFdpZHRoQXJnKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdp
ZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVD
b25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1
cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzgzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODc0LDggQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXByZXNlbnQoVmFsdWUq
IHZhbHVlKSBjb25zdDsKKwogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDE3LDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAg
ICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC05NzQsNiArMTAzOSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRtcCB0bXApOwor
CiAgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJn
IGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5l
dmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbCh1bnNpZ25lZCYgYXJndW1l
bnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgdW5z
aWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKKyAgICBpZiAoYXJndW1lbnRJ
bmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKQorICAgICAgICByZXR1
cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOworCisg
ICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlzQVJNNjQoKSAmJiBpc0lPUygpKSB7Cisg
ICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgorICAgICAgICBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJndW1lbnRz
IGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9IDg7CisgICAgfQorCisgICAgc3RhY2tP
ZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsK
KyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0KTsKKyAgICBzdGFja09m
ZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcmcgbWFyc2hhbGxD
Q2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBm
cEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQorewor
ICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSB7CisgICAgY2Fz
ZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxHUFJJ
bmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6
OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxGUFJJbmZvPihm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFyZygpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihD
b2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8QXJnPiByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVjaWFsOjpzY3JhdGNoUmVnaXN0ZXIpKTsK
KyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGZwQXJndW1l
bnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFsbENDYWxsQXJndW1lbnQoZ3BBcmd1bWVu
dENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB2YWx1ZS0+Y2hpbGQoaSkpKTsK
KyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICBjYXNl
IEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjsKKyAgICBjYXNlIEZsb2F0OgorICAgIGNhc2UgRG91YmxlOgorICAgICAgICByZXR1
cm4gRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFI7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVG1wKCk7Cit9CisKK0luc3QgYnVpbGRDQ2FsbChD
b2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8QXJnPiYgYXJndW1lbnRzKQoreworICAgIEluc3QgcmVz
dWx0KFBhdGNoLCBpbnN0Lm9yaWdpbiwgQXJnOjpzcGVjaWFsKGNvZGUuY0NhbGxTcGVjaWFsKCkp
KTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1swXSk7CisgICAgaW5zdC5hcmdz
LmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5k
KFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGFyZ3VtZW50
c1tpXTsKKyAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChhcmcpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb25faAorI2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOworCituYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29u
dmVudGlvbihDb2RlJiwgQ0NhbGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQoVHlwZSk7CisK
K0luc3QgYnVpbGRDQ2FsbChDb2RlJiwgY29uc3QgVmVjdG9yPEFyZz4mKTsKKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckN1c3RvbS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBDQ2Fs
bFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgp
ICE9IDEgKyAodmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDEpICsgdmFsdWUtPm51bUNoaWxk
cmVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBhcmd1bWVudHMgY2Fu
IG9ubHkgcmVmZXIgdG8gdGhlIHN0YWNrLCB0bXBzLCBvciBpbW1lZGlhdGVzLgorICAgIGZvciAo
QXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSAmJiAhYXJn
LmlzU3RhY2tNZW1vcnkoKSAmJiAhYXJnLmlzU29tZUltbSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisKKyAgICAvLyBJZiB0
aGVyZSBpcyBhIHJlc3VsdCB0aGVuIGl0IGNhbm5vdCBiZSBhbiBpbW1lZGlhdGUuCisgICAgaWYg
KHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBpZiAoaW5zdC5hcmdzWzFdLmlzU29t
ZUltbSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWluc3QuYXJn
c1sxXS5jYW5SZXByZXNlbnQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBvZmZzZXQrKzsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS0+bnVt
Q2hpbGRyZW4oKTsgaS0tOykgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQo
aSk7CisgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV07CisgICAgICAgIGlm
ICghYXJnLmNhblJlcHJlc2VudChjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbEN1
c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRl
eHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgQyBjYWxsOiAiLCBpbnN0LCAi
XG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxI
ZWxwZXJzOjpKdW1wKCk7Cit9CisKK2Jvb2wgU2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm0oSW5z
dCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAlIDMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEEgZGVzdGluYXRpb24gbWF5IG9ubHkgYXBwZWFyIG9uY2UuIFRo
aXMgcmVxdWlyZW1lbnQgYWxsb3dzIHVzIHRvIGF2b2lkIHRoZSB1bmRlZmluZWQgYmVoYXZpb3IK
KyAgICAvLyBvZiBoYXZpbmcgYSBkZXN0aW5hdGlvbiB0aGF0IGlzIHN1cHBvc2VkIHRvIGdldCBt
dWx0aXBsZSBpbnB1dHMgc2ltdWx0YW5lb3VzbHkuIEl0IGFsc28KKyAgICAvLyBpbXBvc2VzIHNv
bWUgaW50ZXJlc3RpbmcgY29uc3RyYWludHMgb24gdGhlICJzaGFwZSIgb2YgdGhlIHNodWZmbGUu
IElmIHdlIHRyZWF0IGEgc2h1ZmZsZSBwYWlyCisgICAgLy8gYXMgYW4gZWRnZSBhbmQgdGhlIEFy
Z3MgYXMgbm9kZXMsIHRoZW4gdGhlIHNpbmdsZS1kZXN0aW5hdGlvbiByZXF1aXJlbWVudCBtZWFu
cyB0aGF0IHRoZQorICAgIC8vIHNodWZmbGUgZ3JhcGggY29uc2lzdHMgb2YgdHdvIGtpbmRzIG9m
IHN1YmdyYXBoczoKKyAgICAvLworICAgIC8vIC0gU3Bhbm5pbmcgdHJlZXMuIFdlIGNhbGwgdGhl
c2Ugc2hpZnRzLiBUaGV5IGNhbiBiZSBleGVjdXRlZCBhcyBhIHNlcXVlbmNlIG9mIE1vdmUKKyAg
ICAvLyAgIGluc3RydWN0aW9ucyBhbmQgZG9uJ3QgdXN1YWxseSByZXF1aXJlIHNjcmF0Y2ggcmVn
aXN0ZXJzLgorICAgIC8vCisgICAgLy8gLSBDbG9zZWQgbG9vcHMuIFRoZXNlIGxvb3BzIGNvbnNp
c3Qgb2Ygbm9kZXMgdGhhdCBoYXZlIG9uZSBzdWNjZXNzb3IgYW5kIG9uZSBwcmVkZWNlc3Nvciwg
c28KKyAgICAvLyAgIHRoZXJlIGlzIG5vIHdheSB0byAiZ2V0IGludG8iIHRoZSBsb29wIGZyb20g
b3V0c2lkZSBvZiBpdC4gVGhlc2UgY2FuIGJlIGV4ZWN1dGVkIHVzaW5nIHN3YXBzCisgICAgLy8g
ICBvciBieSBzYXZpbmcgb25lIG9mIHRoZSBBcmdzIHRvIGEgc2NyYXRjaCByZWdpc3RlciBhbmQg
ZXhlY3V0aW5nIGl0IGFzIGEgc2hpZnQuCisgICAgSGFzaFNldDxBcmc+IGRzdHM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IEFyZyBhcmcgPSBpbnN0LmFyZ3NbMF07CisgICAgICAgIHVuc2lnbmVkIG1vZGUgPSBpICUgMzsK
KworICAgICAgICBpZiAobW9kZSA9PSAyKSB7CisgICAgICAgICAgICAvLyBJdCdzIHRoZSB3aWR0
aC4KKyAgICAgICAgICAgIGlmICghYXJnLmlzV2lkdGhBcmcoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFRoZSBzb3VyY2UgY2FuIGJlIGFuIGltbWVkaWF0ZS4KKyAgICAgICAgaWYgKCFtb2RlKSB7
CisgICAgICAgICAgICBpZiAoYXJnLmlzU29tZUltbSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1vZGUgPT0gMSk7Cisg
ICAgICAgICAgICBpZiAoIWRzdHMuYWRkKGFyZykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJnLmlzVG1wKCkgfHwg
YXJnLmlzTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NDYWxsSGVscGVyczo6SnVt
cCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBzaHVmZmxl
OiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgogI2luY2x1ZGUgIkFpclNwZWNpYWwu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiArNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0byBjYXJyeSBleHRyYSBzdGF0ZSBh
cm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNwZWNpYWxzIG1lYW4gdGhhdCB5b3UK
IC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVuIGluIG1ldGhvZHMgdGhhdCBkb24n
dCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERlZmluaXRpb24gb2YgUGF0Y2ggaW5z
dHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBp
bnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHRoZSBm
aXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUGF0Y2hDdXN0b20gewog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFy
ZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQpAQCAtOTYsNiArOTksMTEzIEBA
IHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAorLy8gRGVmaW5pdGlvbiBvZiBDQ2Fs
bCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90IHBhdGggQyBmdW5jdGlvbiBjYWxs
cy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGggYW4gQWlyIENDYWxsU3BlY2lhbCBh
bG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlvbnMuIFRoZSBsb3dlcmluZyBoYXBw
ZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhhdCB0aGUgcmVnaXN0ZXIg
YWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0IENDYWxsQ3VzdG9tIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIFZhbHVlKiB2
YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKworICAg
ICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6
cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS0+
dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAgICAgICAgICAg
aW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwKKyAgICAgICAgICAgICAgICBBcmc6OnR5cGVG
b3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3aWR0aEZvckIz
VHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiBj
aGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAg
ICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpVc2UsCisgICAgICAgICAgICAgICAg
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6
d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRG
b3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0Jik7CisKKyAgICBzdGF0aWMg
Ym9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0
cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFRo
aXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBjYWxscyB0byBiZSBsb3dlcmVkIGJl
Zm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
SW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cit9OworCitzdHJ1Y3Qg
Q29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGxpa2UgYSBjYWxs
LCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0NhbGxDdXN0b206OmZvckVhY2hBcmco
CisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0eXBlLCB3aWR0aCk7CisgICAgICAg
ICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZsZUN1c3RvbSB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsaW1p
dCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAgIEFyZyYgc3JjID0gaW5zdC5hcmdz
W2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAg
ICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSArIDJdOworICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7CisgICAgICAgICAgICBBcmc6OlR5cGUg
dHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFyZzo6R1AgOiBBcmc6OkZQOworICAg
ICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAg
ICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIGZ1bmN0
b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OldpZHRoOCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGlj
IGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsK
KyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5zdCYpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3NzaWJsZVNjcmF0
Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAgICBmb3IgKFJl
ZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIGlmIChmdW5jdG9y
KHJlZykpCisgICAgICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKyAgICByZXR1cm4gVG1wKCk7
Cit9CisKK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBBcmcm
IGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgeworICAgIHJldHVybiBmaW5kUG9zc2libGVTY3JhdGNo
KAorICAgICAgICB0eXBlLAorICAgICAgICBbJl0gKFJlZyByZWcpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuICFhcmcxLnVzZXNUbXAoVG1wKHJlZykpICYmICFhcmcyLnVzZXNUbXAoVG1w
KHJlZykpOworICAgICAgICB9KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+IiwgZHN0KCkpOworfQorCitWZWN0b3I8SW5z
dD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlycywgc3RkOjphcnJh
eTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUsIFZhbHVlKiBvcmlnaW4pCit7Cisg
ICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHBhaXIuc3JjKCkgPT0gcGFp
ci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0
aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGgu
CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIEFT
U0VSVChwYWlyLmZpcnN0KCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBhaXIuc2Vj
b25kKCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kKCkuaXNUbXAo
KSB8fCBwYWlyLnNlY29uZCgpLmlzTWVtb3J5KCkpOworICAgIH0KKworICAgIC8vIFRoZXJlIGFy
ZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdpbGwgZG86CisgICAg
Ly8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMpLiBXZSBlbWl0IHRo
aXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVpcmVzCisgICAgLy8g
ICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1vcnkgbW92ZXMuIFdl
IHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBwb3NzaWJsZSBiZWNh
dXNlIHRoZXkgYXJlIGNoZWFwZXIuIE5vdGUgdGhhdCBzaGlmdHMgY2FuIGludm9sdmUgdGhlIHNh
bWUgc291cmNlIG1lbnRpb25lZAorICAgIC8vICAgbXVsdGlwbGUgdGltZXMuIEV4YW1wbGU6IChh
ID0+IGIsIGEgPT4gYywgYiA9PiBkLCBiID0+IGUpLgorICAgIC8vCisgICAgLy8gLSBSb3RhdGUu
IEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQgdG8gZW1pdCB0aGlzIGFzICJTd2Fw
IGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8vICAgbWF5IG5vdCBiZSBhdmFpbGFi
bGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyIG9yIGEgc2Ny
YXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGduYXJsaWVyIGV4YW1wbGUgaXMgKGEg
PT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0aGlzIGFzICJTd2FwIGIsIGM7Cisg
ICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBpbmcgaGFzIHRvIGJlIGNhcmVmdWwg
YWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAgIC8vIFdlIHdpbGwgZmluZCBtdWx0
aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJhdGlvbnMuIFdlIGNhbiBleGVjdXRlIHRoZW0gaW4gYW55
IG9yZGVyLgorCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIE1vdmVzIHRoYXQgc2hvdWxk
IGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4gQWxsIHNoaWZ0cyBhcmUga2V5ZWQgYnkgdGhlaXIKKyAg
ICAvLyBzdGFydGluZyBzb3VyY2UuCisgICAgSGFzaE1hcDxBcmcsIDxWZWN0b3I8U2h1ZmZsZVBh
aXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMgb3ZlciBz
cmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3IgYSBsaXN0
CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCksIGxpc3Rb
Ml0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisgICAgLy8gTm90
ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24ndCBtYXRj
aCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICBWZWN0b3I8VmVjdG9yPFNodWZmbGVQ
YWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVm
ZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIg
OiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIuc3JjKCksIHsgfSkuaXRlcmF0
b3ItPnZhbHVlLmFkZChwYWlyKTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJl
bnRQYWlyczsKKworICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAg
ICAgICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKG1hcHBpbmcuYmVnaW4oKS0+a2V5KTsKKyAgICAgICAgICAgIHdoaWxlIChBcmcgc3JjID0g
d29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNo
dWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBwaW5nLmZpbmQoc3JjKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgcHJldmlvdXNseSBidWlsdCB0
aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhh
dCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVu
ZFZlY3RvcihzaGlmdHMudGFrZShzcmMpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4g
cGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLnJl
bW92ZShpdGVyKTsKKworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBh
aXIgOiBwYWlycykgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBwZW5kKHBh
aXIpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zcmMoKSA9PSBzcmMpOworICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHBhaXIuZHN0KCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5z
aXplKCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxhc3QoKS5kc3QoKSA9PSBj
dXJyZW50UGFpcnNbMF0uc3JjKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZ3JhcGgg
c2VhcmNoIHRlcm1pbmF0ZXMgYmVjYXVzZSB3ZSByZXR1cm5lZCB0byB0aGUgZmlyc3Qgc291cmNl
LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHBhaXIgbGlzdCBoYXMgdG8gaGF2ZSBhIHZl
cnkgcGFydGljdWxhciBzaGFwZS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBj
dXJyZW50UGFpcnMuc2l6ZSgpIC0gMTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGN1cnJlbnRQYWlyc1tpXS5kc3QoKSA9PSBjdXJyZW50UGFpcnNbaSArIDFdLnNyYygpKTsKKyAg
ICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChjdXJyZW50UGFpcnMpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgc2hpZnRzLmFwcGVuZChjdXJyZW50UGFpcnMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNj
cmF0Y2ggcmVnaXN0ZXJzLiBUaGUgd2F5IHdlIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBh
c3NlcworICAgIC8vIHVzIHdoYXQgc2NyYXRjaCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZl
IGxheWluZyBhcm91bmQuIFdlIHdpbGwgbmVlZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8v
IHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgLy8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hl
cmUgYm90aCBzcmMgYW5kIGRzdCByZWZlciB0byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hl
biBubyBTd2FwIGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5
IGZvciB1cywgd2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVy
cyBhbnl0aW1lIHdlIGhhdmUgYSBTaGlmdCB0aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0
ZXIuIFdlIHNlYXJjaCBmb3Igc3VjaCBhIHJlZ2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8g
bW92ZUZvcldpZHRoID0gWyZdIChXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dp
dGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4g
dHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0OworICAgICAgICBjYXNlIFdpZHRo
NjQ6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3Vi
bGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3Zl
ID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworCisgICAgLy8g
V2Ugd2lsbCBlbWl0IHRoaW5ncyBpbiByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFj
a3Mgb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB3ZSBlbWl0CisgICAgLy8gYXBwZW5kIHRoZW0g
dG9nZXRoZXIgaW4gcmV2ZXJzZSAoZm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2Yg
cmVzdWx0UGFja3MgaXMgcGxhY2VkCisgICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNh
dXNlIHRoZSBsYXN0IHRoaW5nIHdlIGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lz
dGVycywgc28KKyAgICAvLyBpdCBhZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQu
CisgICAgVmVjdG9yPFZlY3RvcjxJbnN0Pj4gcmVzdWx0UGFja3M7CisgICAgVmVjdG9yPEluc3Q+
IHJlc3VsdDsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0ID0gWyZdICgpIHsKKyAgICAgICAgcmVz
dWx0UGFja3MuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgfTsKKworICAgIGF1dG8gZ2V0
U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRt
cCB7CisgICAgICAgIGlmIChzY3JhdGNoZXNbaW5kZXhdLmlzVG1wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc2NyYXRjaGVzW2luZGV4XS50bXAoKTsKKworICAgICAgICBpZiAoIXBvc3NpYmxlU2Ny
YXRjaCkKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNb
aW5kZXhdKSk7CisgICAgICAgIHJldHVybiBwb3NzaWJsZVNjcmF0Y2g7CisgICAgfTsKKworICAg
IGF1dG8gcmV0dXJuU2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXApIHsKKyAg
ICAgICAgaWYgKEFyZyh0bXApICE9IHNjcmF0Y2hlc1tpbmRleF0pCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhd
LCB0bXApKTsKKyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0
IFNodWZmbGVQYWlyJiBwYWlyLCB1bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAgICAgT3Bj
b2RlIG1vdmUgPSBtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghaXNWYWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0KCkua2lu
ZCgpKSkgeworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPQorICAgICAgICAgICAgICAgIGdldFNj
cmF0Y2goc2NyYXRjaEluZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIHBhaXIuc3JjKCks
IHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAg
ICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBBcmc6OlRt
cCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWly
LndpZHRoKCkpLCBvcmlnaW4sIHBhaXIuc3JjKCksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzU29tZUltbSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobW92ZSA9PSBNb3ZlMzIpOworICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChNb3ZlLCBvcmlnaW4sIEFyZzo6aW1tNjQocGFpci5zcmMoKS52YWx1
ZSgpKSwgc2NyYXRjaCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIu
ZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNo
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QobW92ZSwgb3JpZ2luLiBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7
CisgICAgfQorCisgICAgYXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWly
PiYgc2hpZnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07
KQorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBB
cmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNU
bXAoKSkgeworICAgICAgICAgICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0g
bGFzdERzdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmlyc3QgaGFuZGxlIHNo
aWZ0cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1
cCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmlu
YWwgc2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2ls
bCBiZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5n
IGVtaXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAv
LyByZXZlcnNlKS4KKyAgICBmb3IgKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0IDogc2hpZnRz
KSB7CisgICAgICAgIGlmIChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAg
IGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisg
ICAgLy8gTm93IGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoVmVjdG9y
PFNodWZmbGVQYWlyPiYgc2hpZnQgOiBzaGlmdHMpIHsKKyAgICAgICAgaWYgKCFzaGlmdC5sYXN0
KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAg
ICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBhaXI+
JiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGJvb2wgY2FuU3dhcCA9IGZhbHNlOworICAg
ICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIFdpZHRoIHN3YXBXaWR0aCA9IEFyZzo6
V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQorICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJn
OjpHUCkgeworICAgICAgICAgICAgc3dhcCA9IFN3YXAzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0
aCA9IEFyZzo6V2lkdGgzMjsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiBy
b3RhdGUpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAg
c3dhcCA9IFN3YXA2NDsKKyAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0
aDY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBB
cmc6OlRtcCwgQXJnOjpUbXApOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6
IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwg
cGFpci5kc3QoKS5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0g
aXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdGFrZSB0aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1p
eCBvZiB3aWR0aHMgYW5kIHNvbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHNodWZm
bGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdldHMgdG9vIGNvbmZ1c2luZy4KKyAgICAgICAgICAg
ICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuU3dh
cCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAtIDE7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsKKyAgICAg
ICAgICAgICAgICBBcmcgcmlnaHQgPSByb3RhdGVbaSArIDFdLnNyYygpOworCisgICAgICAgICAg
ICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21lLiBS
b3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIC8v
IE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBhIGxv
dCBvZiByYXJlIHN0dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFwcGVu
IGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUbXAg
c2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCBy
aWdodCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lk
dGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmln
aW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgw
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdodCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiBy
b3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAgICAg
Ly8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0LCBwYWlyLmRzdCgpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4g
dHJlYXQgdGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5h
dGlvbiAoaS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJz
dC4gVGhlbiB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3Rh
dGUKKyAgICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBk
ZXN0aW5hdGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAg
ICAgLy8gZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZl
IGEgcm90YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUg
cmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVT
Y3JhdGNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhaXIuZHN0KCkudXNlc1RtcChUbXAocmVnKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgQXJnIHJv
dGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1ZmZsZVBhaXIocm90YXRlLmxh
c3QoKS5kc3QoKSwgcm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsgaS0tID4gMTspCisgICAgICAg
ICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7CisKKyAgICAgICAgICAgIGhh
bmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGVbMF0uZHN0KCksIHJv
dGF0ZVswXS53aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAg
ICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAg
ICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAg
ICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxT
aHVmZmxlUGFpcj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3Jh
dGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCkKK3sKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPEFyZywgQXJnPj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFyZywg
QXJnPj4gZnBQYWlyczsKKyAgICBmb3IgKHN0ZDo6cGFpcjxBcmcsIEFyZz4gcGFpciA6IHBhaXJz
KSB7CisgICAgICAgIGlmIChwYWlyLmZpcnN0LmlzTWVtb3J5KCkgJiYgcGFpci5zZWNvbmQuaXNN
ZW1vcnkoKSAmJiBwYWlyLndpZHRoKCkgPiBwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAg
Ly8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJl
IGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5k
KHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuZmlyc3QuaXNHUCgpICYmIHBhaXIuc2Vj
b25kLmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0
cyBtZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisg
ICAgICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4
Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBl
bmQocGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFp
cik7CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCkpOworICAgIHJl
c3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBBcmc6OkZQ
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNodWZmbGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU2h1ZmZsZVBhaXIgeworcHVibGlj
OgorICAgIFNodWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgV2lkdGgg
d2lkdGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAg
ICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygp
IGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJl
dHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2Yg
bW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQg
bm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZv
ciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgV2lk
dGggd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXJnIG1fc3JjOworICAgIEFy
ZyBtX2RzdDsKKyAgICBXaWR0aCBtX3dpZHRoOworfTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUg
b2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRjaCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBz
aG91bGQgcGFzcyBpdCBhcworLy8gZm9sbG93czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBz
Y3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3JhcmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5
J3JlCisvLyByZWdpc3RlcnMgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwg
aGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBzaHVmZmxlLCBhbmQgYXJlIG5vdAorLy8gbGl2ZSBh
dCB0aGUgc2h1ZmZsZSAtIHRoZW4geW91IGNhbiBwYXNzIHRoZW0uIElmIHlvdSBkb24ndCBoYXZl
IHNjcmF0Y2ggcmVnaXN0ZXJzIGF2YWlsYWJsZSBvciBpZgorLy8geW91IGRvbid0IGZlZWwgbGlr
ZSBsb29raW5nIGZvciB0aGVtLCB5b3UgY2FuIHBhc3MgbWVtb3J5IGxvY2F0aW9ucy4gSXQncyBh
bHdheXMgc2FmZSB0byBwYXNzIGEKKy8vIHBhaXIgb2YgbWVtb3J5IGxvY2F0aW9ucywgYW5kIHJl
cGxhY2luZyBlaXRoZXIgbWVtb3J5IGxvY2F0aW9uIHdpdGggYSByZWdpc3RlciBjYW4gYmUgdmll
d2VkIGFzIGFuCisvLyBvcHRpbWl6YXRpb24uIEl0J3MgYSBwcmV0dHkgaW1wb3J0YW50IG9wdGlt
aXphdGlvbi4gU29tZSBtb3JlIG5vdGVzOgorLy8KKy8vIC0gV2UgZGVmaW5lIHNjcmF0Y2ggcmVn
aXN0ZXJzIGFzIHRoaW5ncyB0aGF0IGFyZSBub3QgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYW5k
IGFyZSBub3Qgb25lIG9mCisvLyAgIHRoZSBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUuIE5v
dCBiZWluZyBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbHNvIG1lYW5zIHRoYXQgdGhleSBjYW5u
b3QKKy8vICAgYmUgdXNlZCAKKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24gaXMg
b25seSBuZWVkZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBpcyB1
c2VkIGJvdGgKKy8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlvdSdy
ZSBndWFyYW50ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVyZSBp
cyBhIFN3YXAgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQgeW91
IGRvbid0IGhhdmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291cmNl
IGFuZCB0aGUgZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMgU3dh
cCBvbiB4ODYgd2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3Npbmcg
bWVtb3J5IGxvY2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxlKCkg
YmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQgd2ls
bCBjYXVzZSBlbWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMgd2hl
biBpdCBkb2VzIG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRoYXQg
cHJlZGljYW1lbnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBhZnRl
cgorLy8gICByZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQgYWRk
IGEgU2h1ZmZsZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVmZmxp
bmdzIHVudGlsIGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1vcnk9
Pm1lbW9yeSBwYWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9pZCB0
aGVtIGlmIHlvdSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0aGVt
LCB0aGVuIG1ha2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25lIHdh
eSB0bworLy8gICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KK1ZlY3RvcjxJbnN0PiBlbWl0
U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4gc2Ny
YXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUg
dGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0ZXJz
IG9yIG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBy
dWxlcyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8
U2h1ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwg
Y29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbik7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisj
aW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgog
I2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9ydFVz
ZWRSZWdpc3RlcnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxvd2Vy
TWFjcm9zKGNvZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXph
dGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6
YXRpb25zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NTYKQEAgLTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBj
b2RlKQogICAgIGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7
CiAKKyAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0aGlz
IHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMg
aXQgZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdo
aWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVD
YWxsZWVTYXZlcyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgewogCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBj
b25zdCBWZWN0b3I8SW5zdD4mIGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6
IGluc3RzKQorICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNl
cnRpb25TZXQ6Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMp
Cit7CisgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5k
ZXgsIFdURk1vdmUoaW5zdCkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNp
Y0Jsb2NrKiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBt
X2luc2VydGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNlcnRp
b24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOwogICAgIH0KKworICAgIHZvaWQg
aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4mKTsKKyAgICB2b2lk
IGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYpOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGluc2VydChzaXplX3QgaW5k
ZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxv
YyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJB
ZnRlclJlZ0FsbG9jIik7CisKKyAgICBIYXNoU2V0PEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJl
Z2lzdGVyczsKKworICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMg
bG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgc2V0OworCisgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZs
ZSB8fCBpbnN0Lm9wY29kZSA9PSBTbG93Q0NhbGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJl
ZyByZWcgOiBsb2NhbENhbGMubGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJl
Zyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5l
eGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKSkKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChjb25zdCBS
ZWdpc3RlclNldCYgc2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsK
KyAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewor
ICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtpXSA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRb
aV0gPSBBcmc6OnN0YWNrKAorICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0
aCh0eXBlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1v
dXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07CisKKyAgICAvLyBOb3cgdHJhbnNmb3JtIHRoZSBjb2RlLgorICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAo
KSAtPiBzdGQ6OmFycmF5PEFyZywgMj4geworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJn
LCAyPiByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmVzdWx0WzFdID0gaW5zdC5hcmdzLnRha2VM
YXN0KCk7CisgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gaW5zdC5hcmdzLnRha2VMYXN0KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgU2h1ZmZsZTogeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdp
c3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBh
aXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJn
c1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFd
OworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAy
XS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQuc2V0KHNyYy5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdl
dFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJn
LCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdp
bikpOworICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgU2xvd0NDYWxsOiB7CisgICAg
ICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbFZhbHVl
PigpOworCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlVXNlZDsKKyAgICAgICAgICAg
ICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9u
KGNvZGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQo
dmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNy
YyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEgOiBpKSA6IGkgXTsKKyAgICAg
ICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRz
dCwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyYy5pc1JlZygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlVXNlZC5zZXQoc3JjKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRj
aGVzKHByZVVzZWQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAy
PiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpGUCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnc1RvU2F2ZSA9IHVzZWRSZWdp
c3RlcnMuZ2V0KCZpbnN0KTsKKworICAgICAgICAgICAgICAgIC8vIEFsc28gbmVlZCB0byBzYXZl
IGFsbCBsaXZlIHJlZ2lzdGVycy4gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcmVzdWx0
CisgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIuCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5jbGVhcihyZXN1bHQucmVnKCkpOwor
ICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOworICAgICAgICAg
ICAgICAgIHBvc3RVc2VkLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJl
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpX
aWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJnOjpieXRlcyh3aWR0aCksIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQo
U2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNrU2xvdCksIHdpZHRoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVuZChzdGFja1Nsb3QpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgZW1pdFNo
dWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworCisgICAg
ICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwgZGVzdGluYXRpb25zKTsKKworICAg
ICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lz
dGVycy4KKyAgICAgICAgICAgICAgICBwYWlycy5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgc3RhY2tTbG90SW5kZXggPSAwOworICAgICAgICAgICAgICAgIHBvc3RVc2VkLmZv
ckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFy
Zyh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6
Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIHN0YWNrU2xvdCA9IHN0YWNrU2xvdHNbc3RhY2tTbG90SW5kZXgrK107CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoQXJnOjpzdGFjayhz
dGFja1Nsb3QpLCBhcmcsIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIg
cGFpcihyZXN1bHQsIGluc3QuYXJnc1sxXSwgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlw
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAg
ICAgICByZWdzVG9TYXZlLnNldChyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMo
cmVnc1RvU2F2ZSwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+
IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkZQKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAg
ICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0
Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGNvZGUpOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKyNk
ZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1ZmZsZSBhbmQgQ29sZENDYWxsIGluc3RydWN0aW9ucy4g
VGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0byBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIKKy8vIGFsbG9j
YXRpb24uCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93
ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
Imxvd2VyTWFjcm9zIik7CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAg
ICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBDQ2FsbDog
eworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPEND
YWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMg
PSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKworICAgICAgICAgICAg
ICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxlLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDE7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQo
aSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoaW5z
dC5hcmdzW29mZnNldCArIGldKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50
cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICBzaHVm
ZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmcoQXJnOjp3aWR0aEZvckIzVHlw
ZShjaGlsZC0+dHlwZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgsIFdURk1vdmUoc2h1ZmZsZUFyZ3VtZW50
cykpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2luZyBvdXIg
b3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uc1sw
XSA9IGluc3QuYXJnc1swXTsKKworICAgICAgICAgICAgICAgIC8vIFNhdmUgd2hlcmUgdGhlIG9y
aWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0LgorICAgICAgICAgICAgICAgIEFyZyBy
ZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyBBcmcoKSA6IGluc3QuYXJnc1sxXTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2Rl
LCBkZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVz
dWx0KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRmxvYXQsIHZhbHVlLCByZXN1bHQs
IHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgRG91YmxlOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGlu
c3RJbmRleCArIDEsIE1vdmVEb3VibGUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZTMy
LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERz
dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCisjZGVmaW5lIEFp
ckxvd2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQWlyIGhh
cyBzb21lIG9wY29kZXMgdGhhdCBhcmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVhbnQgdG8g
cmVkdWNlIHRoZSBhbW91bnQgb2YgbG93LWxldmVsCisvLyBrbm93bGVkZ2UgaW4gdGhlIEIzLT5B
aXIgbG93ZXJpbmcuIFRoZSBjdXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwuCisKK3ZvaWQgbG93ZXJN
YWNyb3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw2ICs0MDcsMTQgQEAgTW92ZSBVOkc6UHRy
LCBEOkc6UHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRy
IGFzIHN0b3JlUHRyCiAKK3g4NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRt
cAorICAgIFRtcCwgQWRkcgorCit4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAg
VG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRt
cCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAt
NjcyLDcgKzY4MCwxOSBAQCBSZXREb3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVybWlu
YWwKIAorIyBBIFNodWZmbGUgaXMgYSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9uIG1v
dmUuIEl0IHNpbXVsdGFuZW91c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KKyMgVGhl
IG1vdmVzIGFyZSBzcGVjaWZpZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0aC4g
Rm9yIGV4YW1wbGUgeW91IGNhbiByZXF1ZXN0IGEgc3dhcCB0aGlzCisjIHdheToKKyMgICAgIFNo
dWZmbGUgJXRtcDEsICV0bXAyLCA2NCwgJXRtcDIsICV0bXAxLCA2NAorY3VzdG9tIFNodWZmbGUK
KwogIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBp
cyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNoIG11
c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAorIyBJbnN0cnVjdGlvbnMg
dXNlZCBmb3IgbG93ZXJpbmcgQyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIgZ2Vu
ZXJhdGlvbi4gVGhleSBnZXQgbG93ZXJlZCB0bworIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4gVGhl
IG9yaWdpbiBWYWx1ZSBtdXN0IGJlIGEgQ0NhbGxWYWx1ZS4KK2N1c3RvbSBDQ2FsbAorY3VzdG9t
IENvbGRDQ2FsbAorCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268836</attachid>
            <date>2016-01-12 18:47:33 -0800</date>
            <delta_ts>2016-01-12 19:10:47 -0800</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88867</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCwxNSBAQAogCQkwRjVFRjkxRTE2ODc4
RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
Y3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQzE2ODc4
Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkEx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwICov
OyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjMxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkQxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1p
dFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2Vy
QWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovOyB9
OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjcxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgzMzExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJN
YWNyb3MuaCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi87IH07CkBAIC0yNTQxLDYgKzI1NTAsMTUgQEAKIAkJMEY1RUY5MUIxNjg3OEY3
ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBwYXRoID0gYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMjMxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbWl0U2h1ZmZs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJM
b3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlckFmdGVy
UmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyNjFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRoID0gYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYx
ODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvYWly
L0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJN
YWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFz
aWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNzAsOCArMzM4OCw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQw
MENBRTYxMyAvKiBKU0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pv
Yi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3
QkYgLyogTWFwUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gTWFwUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1
NTg3RDFDNDE4NDE5MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7
IHBhdGggPSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTcwMzU1ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFBy
b3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQx
ODQ1ODAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MDM1NTg3RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFu
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJvb2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwogCQk3MDVCNDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzkxLDEzICs0ODA5LDE4IEBACiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8q
IEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1
MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywK
IAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuY3Bw
ICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29k
ZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5j
cHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmgg
Ki8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3Rl
clN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNENjgwMDQzNDFBNiAv
KiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4MzksMTAgQEAKIAkJCQky
NjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJM
aXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJM
b3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4NERCMiAvKiBBaXJP
cGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0
aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyog
QWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC02ODk2LDYgKzY5MjMsNyBAQAogCQkJCTBG
NDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlE
RjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKQEAgLTY5NTgsNiArNjk4Niw3IEBACiAJCQkJMEZFQzg1MTQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVDMTFC
RTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUx
NjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTUwLDYg
KzcxNzksNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXpl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlD
aGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQzFGMUIxQjg2
OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03NjI0LDYgKzc2NTQsNyBAQAogCQkJCTBGMkI2NkY3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2QzUxNzYxMTgy
NzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNG
NTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTg2OTMsNiArODcyNCw3IEBACiAJCQkJNTJC
NzE3QjUxQTA1OTdFMTAwN0FGNEYzIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCQURGNTQxQkQxRjRCODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBMTExMjQ1MTkyRkNF
NzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04NzQxLDYgKzg3NzMsNyBAQAogCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBE
RkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QkUwRjcyMTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzI5MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjMzOEUxMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1
Y3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODc1Nyw2ICs4NzkwLDcgQEAKIAkJCQlBNzhBOTc3
NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJC
QyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlD
Qzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTkwNjgsNiArOTEwMiw3IEBACiAJCQkJRTMzRjUwODQxQjg0MzdBMDAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQx
Qjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MDNGQTFCMTg4RTBGQjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4
OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTcwMTNDQThCMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjEwLDYgKzkyNDUsNyBAQAogCQkJCTBG
OUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyQjFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFD
M0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlE
ZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUg
Ym9vbCBpc1g4Nl82NCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKIGlubGluZSBib29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVk
KCkKIHsKICAgICByZXR1cm4gaXNBUk12N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VB
cmNoaXRlY3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDEx
LDE2IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hn
bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3Jj
LCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMs
IGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlv
bmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDYgKzE0MzEsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAg
IH0KIAorICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hH
X0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAg
IHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAg
LTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KKwor
ICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZH
diwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBtb3ZsX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NDYWxsVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NDYWxsVmFsdWUuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsMTEgQEAgQ0NhbGxWYWx1ZTo6fkNDYWxsVmFsdWUoKQogewogfQogCit2b2lkIENDYWxsVmFs
dWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGNvbW1hLCAiaXNXYXJtID0gIiwgaXNXYXJtKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24gMTk0ODU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSwxMiBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAg
RWZmZWN0cyBlZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwo
KSB9OworCisgICAgYm9vbCBpc1dhcm0geyB0cnVlIH07CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKQEAgLTQ3LDcgKzUyLDYgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgQ0NhbGxW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDQ2Fs
bCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCi0gICAgICAgICwgZWZmZWN0cyhFZmZlY3Rz
Ojpmb3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigp
ID49IDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0MSwzNyArMTU0MSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpbnZlcnRlZCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQmFua0luZm8+Ci0gICAgQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCh1bnNpZ25lZCYgYXJn
dW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCi0gICAgewot
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gYXJndW1lbnRDb3VudCsrOwotICAgICAg
ICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
KSB7Ci0gICAgICAgICAgICBUbXAgcmVzdWx0ID0gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoYXJndW1lbnRJbmRleCkpOwotICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9y
VHlwZShjaGlsZC0+dHlwZSgpKSwgaW1tT3JUbXAoY2hpbGQpLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0jaWYgQ1BVKEFSTTY0KSAmJiBQTEFURk9S
TShJT1MpCi0gICAgICAgIC8vIGlPUyBkb2VzIG5vdCBmb2xsb3cgdGhlIEFSTTY0IEFCSSByZWdh
cmRpbmcgZnVuY3Rpb24gY2FsbHMuCi0gICAgICAgIC8vIEFyZ3VtZW50cyBtdXN0IGJlIHBhY2tl
ZC4KLSAgICAgICAgdW5zaWduZWQgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNoaWxkLT50eXBlKCkp
OwotICAgICAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6
ZSwgc3RhY2tPZmZzZXQpOwotI2Vsc2UKLSAgICAgICAgdW5zaWduZWQgc2xvdFNpemUgPSBzaXpl
b2Yodm9pZCopOwotI2VuZGlmCi0gICAgICAgIEFyZyByZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3Rh
Y2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCArPSBzbG90U2l6ZTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFB1dCB0aGUgY29kZSBmb3Igc3RvcmluZyB0aGUgYXJndW1lbnQgYmVmb3JlIGFu
eXRoaW5nIGVsc2UuIFRoaXMgc2lnbmlmaWNhbnRseSBlYXNlcyB0aGUKLSAgICAgICAgLy8gYnVy
ZGVuIG9uIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIElmIHdlIGNvdWxkLCB3ZSdkIGhvaXN0IHRo
ZXNlIHN0b3JlcyBhcyBmYXIgYXMKLSAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgIC8vIEZJ
WE1FOiBBZGQgYSBwaGFzZSB0byBob2lzdCBzdG9yZXMgYXMgaGlnaCBhcyBwb3NzaWJsZSB0byBy
ZWxpZXZlIHJlZ2lzdGVyIHByZXNzdXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDYzCi0gICAgICAgIG1faW5zdHMubGFzdCgpLmluc2Vy
dCgwLCBjcmVhdGVTdG9yZShjaGlsZCwgcmVzdWx0KSk7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpAQCAtMTkxOSwxNCArMTg4OCw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIENDYWxsOiB7
CisgICAgICAgIGNhc2UgQjM6OkNDYWxsOiB7CiAgICAgICAgICAgICBDQ2FsbFZhbHVlKiBjQ2Fs
bCA9IG1fdmFsdWUtPmFzPENDYWxsVmFsdWU+KCk7Ci0gICAgICAgICAgICBJbnN0IGluc3QoUGF0
Y2gsIGNDYWxsLCBBcmc6OnNwZWNpYWwobV9jb2RlLmNDYWxsU3BlY2lhbCgpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgLSB3ZSBoYXZlIGEgc3VwZXIgaW50ZW5zZSBj
b250cmFjdCB3aXRoIEFyZzo6Q0NhbGxTcGVjaWFsLiBJdCBtaWdodAotICAgICAgICAgICAgLy8g
YmUgYmV0dGVyIGlmIHdlIGZhY3RvcmVkIEFpcjo6Q0NhbGxTcGVjaWFsIG91dCBvZiB0aGUgQWly
IG5hbWVzcGFjZSBhbmQgbWFkZSBpdCBhIEIzCi0gICAgICAgICAgICAvLyB0aGluZy4KLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUxMDQ1CisgICAgICAgICAgICBJbnN0IGluc3QoY0NhbGwtPmlzV2FybSA/IEFpcjo6Q0NhbGwg
OiBBaXI6OkNvbGRDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdG9u
IG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3VtZW50LCBidXQgY3VycmVu
dGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4gSXQgZ2V0cyB3ZWlyZCBm
b3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDUy
CiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+Y2hpbGQoMCkpKTsKIAot
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJlZ2lzdGVycyB0aGlzIGRl
ZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cgbWFyc2hhbGwgdGhlIGFy
Z3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMgY2FsbGluZyBjb252ZW50
aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMgbm90IGtub3cgd2hhdCB0
aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBmb3IgaXQuCi0gICAgICAg
ICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQg
ZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hpbGRy
ZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0NoaWxkID0gY0NhbGwtPmNo
aWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJnQ2hpbGQtPnR5cGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAgICAgICAgICAgICAgIGFy
ZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNr
T2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3Mu
YXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkZQOgotICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8RlBSSW5mbz4oZnBB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMu
bGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjQ2Fs
bC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgY2FzZSBJbnQ2NDoKLSAg
ICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
dG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZs
b2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1v
dmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRtcChjQ2FsbCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDIxICsyMDAs
MTQgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgIGNhc2Ug
QXJnOjpUbXA6CiAgICAgY2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6SW1tNjQ6Ci0gICAg
Y2FzZSBBcmc6OlN0YWNrOgotICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICBicmVhazsg
Ly8gT0sKLSAgICBjYXNlIEFyZzo6QWRkcjoKLSAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1w
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQotICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAh
PSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIWFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBBcmc6OlR5
cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsKIAotICAgIHJldHVy
biBhcmcuaXNUeXBlKHR5cGUpOworICAgIHJldHVybiBhcmcuY2FuUmVwcmVzZW50KHZhbHVlKTsK
IH0KIAogYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBj
b2RlLCBjb25zdCBBaXI6OkFyZyYgYXJnLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw5ICszMCwyNiBAQAogCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFp
clN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgi
CisjaW5jbHVkZSAiR1BSSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2Uo
KSA9PSBBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8
IGJhc2UoKSA9PSBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGNhc2UgU3RhY2s6CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29s
IEFyZzo6aXNSZXByZXNlbnRhYmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVz
cykgY29uc3QKIHsKICAgICBzd2l0Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTYxLDYgKzc4LDIyIEBA
IGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwKICAgICB9CiB9CiAKK2Jv
b2wgQXJnOjp1c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3QKK3sKKyAgICBib29sIHVzZXMgPSBm
YWxzZTsKKyAgICBjb25zdF9jYXN0PEFyZyo+KHRoaXMpLT5mb3JFYWNoVG1wRmFzdCgKKyAgICAg
ICAgWyZdIChBaXI6OlRtcCBvdGhlclRtcCkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wID09
IHRtcCkKKyAgICAgICAgICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuIHVzZXM7Cit9CisKK2Jvb2wgQXJnOjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25z
dAoreworICAgIHJldHVybiBpc1R5cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Cit9
CisKIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtX2tpbmQpIHsKQEAgLTExMSw2ICsxNDQsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50
ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBXaWR0aEFyZzoK
KyAgICAgICAgb3V0LnByaW50KHdpZHRoKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE2MSw2ICsxOTcsOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OlNwZWNp
YWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OldpZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQoIldpZHRoQXJnIik7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMjI1LDE2ICsyNjQsMTYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEFyZwogewogICAgIHN3aXRjaCAod2lkdGgpIHsKICAgICBjYXNlIEFyZzo6V2lkdGg4OgotICAg
ICAgICBvdXQucHJpbnQoIldpZHRoOCIpOworICAgICAgICBvdXQucHJpbnQoIjgiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDE2OgotICAgICAgICBvdXQucHJpbnQoIldp
ZHRoMTYiKTsKKyAgICAgICAgb3V0LnByaW50KCIxNiIpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBBcmc6OldpZHRoMzI6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGgzMiIpOworICAgICAg
ICBvdXQucHJpbnQoIjMyIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGg2
NDoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIG91dC5wcmludCgiNjQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1
ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgewogCiBjbGFzcyBTcGVj
aWFsOwogY2xhc3MgU3RhY2tTbG90OwpAQCAtNjksNyArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJsZUNvbmQsCi0gICAgICAg
IFNwZWNpYWwKKyAgICAgICAgU3BlY2lhbCwKKyAgICAgICAgV2lkdGhBcmcKICAgICB9OwogCiAg
ICAgZW51bSBSb2xlIDogaW50OF90IHsKQEAgLTE1Niw2ICsxNjEsMTMgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFR5cGUoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoR1ApOworICAgICAgICBmdW5jdG9y
KEZQKTsKKyAgICB9CisKICAgICBlbnVtIFdpZHRoIDogaW50OF90IHsKICAgICAgICAgV2lkdGg4
LAogICAgICAgICBXaWR0aDE2LApAQCAtMjIwLDYgKzIzMiwyNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBpc0FueVVzZShyb2xlKSAmJiAhaXNDb2xkVXNlKHJvbGUpOwogICAgIH0KIAorICAg
IHN0YXRpYyBSb2xlIGNvb2xlZChSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNl
IERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAg
IGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgICAgIHJldHVy
biByb2xlOworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOwor
ICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgICAgICByZXR1cm4gTGF0ZUNvbGRVc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGll
cyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVs
c2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUpCiAgICAgewpAQCAtNTQ5
LDYgKzU4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisg
ICAgc3RhdGljIEFyZyB3aWR0aEFyZyhXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gd2lkdGg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKQEAgLTU4NSw2ICs2MjUsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wg
aXNTb21lSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1t
NjQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjUwLDIxIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlz
U3RhY2tNZW1vcnkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs2OTcsMTEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAg
Ym9vbCBpc1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
V2lkdGhBcmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwxOCArNzQ1LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
QWRkcjoKLSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAg
ICBjYXNlIEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJf
dCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3ODQsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9
CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFdpZHRoQXJnKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNl
dCk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgp
OwpAQCAtNzcxLDYgKzgzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2Fz
ZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODc0LDggQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25z
dDsKKwogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1w
KCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDE3LDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBT
cGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkBAIC05NzQsNiArMTAzOSw4IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRtcCB0bXApIGNvbnN0OworCiAgICAg
Ly8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEg
RGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRl
ZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNl
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3Vt
ZW50SW1wbCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBW
YWx1ZSogY2hpbGQpCit7CisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291
bnQrKzsKKyAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50
UmVnaXN0ZXJzKQorICAgICAgICByZXR1cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoYXJndW1lbnRJbmRleCkpOworCisgICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlz
QVJNNjQoKSAmJiBpc0lPUygpKSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgor
ICAgICAgICBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9
IDg7CisgICAgfQorCisgICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsKKyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0
YWNrT2Zmc2V0KTsKKyAgICBzdGFja09mZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFy
Z3VtZW50Q291bnQsIHVuc2lnbmVkJiBmcEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09m
ZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNo
aWxkLT50eXBlKCkpKSB7CisgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hh
bGxDQ2FsbEFyZ3VtZW50SW1wbDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2Fs
bEFyZ3VtZW50SW1wbDxGUFJJbmZvPihmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGls
ZCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IEFyZygpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29t
cHV0ZUNDYWxsaW5nQ29udmVudGlvbihDb2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBWZWN0b3I8QXJnPiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVj
aWFsOjpzY3JhdGNoUmVnaXN0ZXIpKTsKKyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAw
OworICAgIHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tP
ZmZzZXQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKTsgKytpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFs
bENDYWxsQXJndW1lbnQoZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zm
c2V0LCB2YWx1ZS0+Y2hpbGQoaSkpKTsKKyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0Fy
ZWFTaXplKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0
YWNrT2Zmc2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAg
IHJldHVybiBUbXAoKTsKKyAgICBjYXNlIEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAg
IHJldHVybiBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxvYXQ6Cisg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIFRtcCgpOworfQorCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUqIG9yaWdp
biwgY29uc3QgVmVjdG9yPEFyZz4mIGFyZ3VtZW50cykKK3sKKyAgICBJbnN0IGluc3QoUGF0Y2gs
IG9yaWdpbiwgQXJnOjpzcGVjaWFsKGNvZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBpbnN0LmFy
Z3MuYXBwZW5kKGFyZ3VtZW50c1swXSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgaWYg
KGFyZy5pc1RtcCgpKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgIH0K
KyAgICByZXR1cm4gaW5zdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNk
ZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQ0NhbGxWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CisKK1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxs
VmFsdWUqKTsKKworVG1wIGNDYWxsUmVzdWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29k
ZSYsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Jv
b2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgQ0NhbGxWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSAx
ICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxKSArIHZhbHVlLT5udW1DaGlsZHJlbigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgYXJndW1lbnRzIGNhbiBvbmx5
IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3IgaW1tZWRpYXRlcy4KKyAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJnLmlzVG1wKCkgJiYgIWFyZy5pc1N0
YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOworCisgICAgLy8gSWYgdGhlcmUg
aXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1
ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0o
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0u
Y2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
b2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxk
cmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOwor
ICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29mZnNldCArIGldOworICAgICAgICBpZiAoIWFy
Zy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxDdXN0b206
OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikK
K3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIEMgY2FsbDogIiwgaW5zdCwgIlxuIik7
CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIENDYWxsSGVscGVy
czo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGlu
c3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgJSAzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1heSBvbmx5IGFwcGVhciBvbmNlLiBUaGlzIHJl
cXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yCisgICAg
Ly8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhhdCBpcyBzdXBwb3NlZCB0byBnZXQgbXVsdGlw
bGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBhbHNvCisgICAgLy8gaW1wb3NlcyBzb21lIGlu
dGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAic2hhcGUiIG9mIHRoZSBzaHVmZmxlLiBJZiB3
ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8vIGFzIGFuIGVkZ2UgYW5kIHRoZSBBcmdzIGFz
IG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGluYXRpb24gcmVxdWlyZW1lbnQgbWVhbnMgdGhh
dCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNvbnNpc3RzIG9mIHR3byBraW5kcyBvZiBzdWJn
cmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5uaW5nIHRyZWVzLiBXZSBjYWxsIHRoZXNlIHNo
aWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMgYSBzZXF1ZW5jZSBvZiBNb3ZlCisgICAgLy8g
ICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFsbHkgcmVxdWlyZSBzY3JhdGNoIHJlZ2lzdGVy
cy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxvb3BzLiBUaGVzZSBsb29wcyBjb25zaXN0IG9m
IG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29yIGFuZCBvbmUgcHJlZGVjZXNzb3IsIHNvCisg
ICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdldCBpbnRvIiB0aGUgbG9vcCBmcm9tIG91dHNp
ZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRlZCB1c2luZyBzd2FwcworICAgIC8vICAgb3Ig
Ynkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBhIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1
dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hTZXQ8QXJnPiBkc3RzOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBBcmcg
YXJnID0gaW5zdC5hcmdzWzBdOworICAgICAgICB1bnNpZ25lZCBtb2RlID0gaSAlIDM7CisKKyAg
ICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAgLy8gSXQncyB0aGUgd2lkdGguCisg
ICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJnKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUuCisgICAgICAgIGlmICghbW9kZSkgeworICAg
ICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtb2RlID09IDEpOworICAgICAg
ICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZy5pc1RtcCgpIHx8IGFyZy5p
c01lbW9yeSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgU2h1
ZmZsZUN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlv
bkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgc2h1ZmZsZTogIiwg
aW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTUxLDYgKzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQgdG8gY2FycnkgZXh0cmEgc3RhdGUgYXJvdW5k
IHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBTcGVjaWFscyBtZWFuIHRoYXQgeW91CiAvLyBh
bHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZlbiBpbiBtZXRob2RzIHRoYXQgZG9uJ3QgdGFr
ZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBEZWZpbml0aW9uIG9mIFBhdGNoIGluc3RydWN0
aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5zdHJ1
Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgogc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKQEAgLTk2LDYgKzk5LDExMyBAQCBzdHJ1
Y3QgUGF0Y2hDdXN0b20gewogICAgIH0KIH07CiAKKy8vIERlZmluaXRpb24gb2YgQ0NhbGwgaW5z
dHJ1Y3Rpb24uIENDYWxsIGlzIHVzZWQgZm9yIGhvdCBwYXRoIEMgZnVuY3Rpb24gY2FsbHMuIEl0
J3MgbG93ZXJlZCB0byBhCisvLyBQYXRjaCB3aXRoIGFuIEFpciBDQ2FsbFNwZWNpYWwgYWxvbmcg
d2l0aCBjb2RlIHRvIG1hcnNoYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgbG93ZXJpbmcgaGFwcGVucwor
Ly8gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciBzZWVzIHRoZSBjbG9iYmVycy4KK3N0cnVjdCBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbjsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICAgICAg
ZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBvaW50
ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUtPnR5cGUo
KSAhPSBWb2lkKSB7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3Qu
YXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLAorICAgICAgICAgICAgICAgIEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRo
Rm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0
YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworCisgICAgc3RhdGljIGJvb2wg
YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5z
dCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGp1
c3QgY3Jhc2hlcywgc2luY2Ugd2UgZXhwZWN0IEMgY2FsbHMgdG8gYmUgbG93ZXJlZCBiZWZvcmUg
Z2VuZXJhdGlvbi4KKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKworc3RydWN0IENvbGRD
Q2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMganVzdCBsaWtlIGEgY2FsbCwgYnV0
IHVzZXMgYmVjb21lIGNvbGQuCisgICAgICAgIENDYWxsQ3VzdG9tOjpmb3JFYWNoQXJnKAorICAg
ICAgICAgICAgaW5zdCwKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGZ1
bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChyb2xlKSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAg
fSk7CisgICAgfQorfTsKKworc3RydWN0IFNodWZmbGVDdXN0b20geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGltaXQgPSBp
bnN0LmFyZ3Muc2l6ZSgpIC8gMyAqIDM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaW1pdDsgaSArPSAzKSB7CisgICAgICAgICAgICBBcmcmIHNyYyA9IGluc3QuYXJnc1tpICsg
MF07CisgICAgICAgICAgICBBcmcmIGRzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAg
ICBBcmcmIHdpZHRoQXJnID0gaW5zdC5hcmdzW2kgKyAyXTsKKyAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSB3aWR0aEFyZy53aWR0aCgpOworICAgICAgICAgICAgQXJnOjpUeXBlIHR5cGUg
PSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkgPyBBcmc6OkdQIDogQXJnOjpGUDsKKyAgICAgICAg
ICAgIGZ1bmN0b3Ioc3JjLCBBcmc6OlVzZSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVu
Y3Rvcihkc3QsIEFyZzo6RGVmLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKHdp
ZHRoQXJnLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpXaWR0aDgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0Jik7CisgICAg
CisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChpbmRleCAlIDMpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJh
dGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cit9OworCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgaWYgKGZ1
bmN0b3IodG1wKSkKKyAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIHJldHVybiBU
bXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0
IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNj
cmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1RtcCh0bXApICYmICFhcmcyLnVzZXNUbXAodG1w
KTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFNo
dWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9yPEluc3Q+IGVt
aXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJn
LCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQoreworICAgIHBh
aXJzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBw
YWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09IHBhaXIuZHN0
KCk7CisgICAgICAgIH0pOworICAgIAorICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBp
cyB0aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAg
IGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQo
cGFpci5zcmMoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5
cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpIHx8IHBhaXIuZHN0
KCkuaXNNZW1vcnkoKSk7CisgICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBr
aW5kcyBvZiBvcGVyYXRpb25zIHRoYXQgd2Ugd2lsbCBkbzoKKyAgICAvLworICAgIC8vIC0gU2hp
ZnQuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYykuIFdlIGVtaXQgdGhpcyBhcyAiTW92ZSBiLCBj
OyBNb3ZlIGEsIGIiLiBUaGlzIG9ubHkgcmVxdWlyZXMKKyAgICAvLyAgIHNjcmF0Y2ggcmVnaXN0
ZXJzIGlmIHRoZXJlIGFyZSBtZW1vcnktPm1lbW9yeSBtb3Zlcy4gV2Ugd2FudCB0byBmaW5kIGFz
IG1hbnkgb2YgdGhlc2UgYXMKKyAgICAvLyAgIHBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgY2hl
YXBlci4gTm90ZSB0aGF0IHNoaWZ0cyBjYW4gaW52b2x2ZSB0aGUgc2FtZSBzb3VyY2UgbWVudGlv
bmVkCisgICAgLy8gICBtdWx0aXBsZSB0aW1lcy4gRXhhbXBsZTogKGEgPT4gYiwgYSA9PiBjLCBi
ID0+IGQsIGIgPT4gZSkuCisgICAgLy8KKyAgICAvLyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4g
YiwgYiA9PiBhKS4gV2Ugd2FudCB0byBlbWl0IHRoaXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0
IGluc3RydWN0aW9uCisgICAgLy8gICBtYXkgbm90IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2Fz
ZSB3ZSBtYXkgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAg
IC8vICAgbG9jYXRpb24uIEEgZ25hcmxpZXIgZXhhbXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMg
PT4gYSkuIFdlIGNhbiBlbWl0IHRoaXMgYXMgIlN3YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwg
YiIuIE5vdGUgdGhhdCBzd2FwcGluZyBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcg
d2lkdGhzLgorICAgIC8vCisgICAgLy8gV2Ugd2lsbCBmaW5kIG11bHRpcGxlIGRpc2pvaW50IHN1
Y2ggb3BlcmF0aW9ucy4gV2UgY2FuIGV4ZWN1dGUgdGhlbSBpbiBhbnkgb3JkZXIuCisKKyAgICAv
LyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgTW92ZXMgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgYmFj
a3dhcmRzLiBBbGwgc2hpZnRzIGFyZSBrZXllZCBieSB0aGVpcgorICAgIC8vIHN0YXJ0aW5nIHNv
dXJjZS4KKyAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj4gc2hpZnRzOworCisg
ICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3YXBzIG92ZXIgc3JjKCkncyB0aGF0IHNob3Vs
ZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4gZm9yIGEgbGlzdAorICAgIC8vIG9mIHNpemUg
MyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNyYygpLCBsaXN0WzJdLnNyYygpOyBTd2FwIGxp
c3RbMF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxs
eSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMgZG9uJ3QgbWF0Y2ggb3Igb3RoZXIgYmFkIHRo
aW5ncyBoYXBwZW4uCisgICAgVmVjdG9yPFZlY3RvcjxTaHVmZmxlUGFpcj4+IHJvdGF0ZXM7CisK
KyAgICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBtYXBwaW5n
OworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpCisgICAgICAg
ICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBWZWN0b3I8U2h1ZmZsZVBhaXI+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQocGFpcik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBj
dXJyZW50UGFpcnM7CisKKyAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8QXJnPiB3b3JrbGlzdDsK
KyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQXJnIG9y
aWdpbmFsU3JjID0gbWFwcGluZy5iZWdpbigpLT5rZXk7CisgICAgICAgICAgICBBU1NFUlQoIXNo
aWZ0cy5jb250YWlucyhvcmlnaW5hbFNyYykpOworICAgICAgICAgICAgd29ya2xpc3QucHVzaChv
cmlnaW5hbFNyYyk7CisgICAgICAgICAgICB3aGlsZSAoQXJnIHNyYyA9IHdvcmtsaXN0LnBvcCgp
KSB7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+Ojpp
dGVyYXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXaXRoIGEgc2hp
ZnQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkgYnVpbHQgdGhlIHRhaWwgb2YgdGhp
cyBzaGlmdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoYXQncyB0aGUgY2FzZSBu
b3cuCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmRWZWN0b3Ioc2hpZnRz
LnRha2Uoc3JjKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzID0gV1RGTW92
ZShpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkgPT0gc3JjKTsKKyAgICAgICAgICAgICAgICAg
ICAgd29ya2xpc3QucHVzaChwYWlyLmRzdCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnNbMF0uc3JjKCkgPT0gb3JpZ2luYWxTcmMpOworCisg
ICAgICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxhc3QoKS5kc3QoKSA9PSBjdXJyZW50UGFpcnNb
MF0uc3JjKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1p
bmF0ZXMgYmVjYXVzZSB3ZSByZXR1cm5lZCB0byB0aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQor
ICAgICAgICAgICAgICAgIC8vIHBhaXIgbGlzdCBoYXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxh
ciBzaGFwZS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50UGFpcnMu
c2l6ZSgpIC0gMTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWly
c1tpXS5kc3QoKSA9PSBjdXJyZW50UGFpcnNbaSArIDFdLnNyYygpKTsKKyAgICAgICAgICAgICAg
ICByb3RhdGVzLmFwcGVuZChjdXJyZW50UGFpcnMpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgc2hpZnRzLmFkZChvcmlnaW5hbFNyYywgY3VycmVudFBhaXJzKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3Jh
dGNoIHJlZ2lzdGVycy4gVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNz
ZXMKKyAgICAvLyB1cyB3aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBs
YXlpbmcgYXJvdW5kLiBXZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0
aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJl
IGJvdGggc3JjIGFuZCBkc3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4g
bm8gU3dhcCBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBm
b3IgdXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMg
YW55dGltZSB3ZSBoYXZlIGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVy
LiBXZSBzZWFyY2ggZm9yIHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1v
dmVGb3JXaWR0aCA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAg
c3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAg
IHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNh
c2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1v
dmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcGNvZGUgY29u
c2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUp
KTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4g
YSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8v
IGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBh
dCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBsYWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBp
cyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0
aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8gaXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGlu
Z3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAg
IFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7
CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisK
KyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVT
Y3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAoc2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1wKCk7CisKKyAgICAgICAgaWYg
KCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRj
aCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAgICByZXR1cm4gcG9zc2libGVTY3JhdGNoOwor
ICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBU
bXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1wKSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2Ny
YXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWly
ID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7
CisgICAgICAgIE9wY29kZSBtb3ZlID0gbW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBw
YWlyLmRzdCgpLmtpbmQoKSkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAg
ICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBl
LCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtp
bmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3Zl
Rm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1Nv
bWVJbW0oKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBh
aXIuc3JjKCkudmFsdWUoKSksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBz
Y3JhdGNoLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJ
bmRleCwgc2NyYXRjaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlLCBvcmlnaW4sIHBhaXIuc3JjKCksIHBh
aXIuZHN0KCkpKTsKKyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9y
PFNodWZmbGVQYWlyPiYgc2hpZnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsK
KworICAgICAgICBBcmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYg
KGxhc3REc3QuaXNUbXAoKSkgeworICAgICAgICAgICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3Jh
dGNoZXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoID0gbGFzdERzdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8vIEZp
cnN0IGhhbmRsZSBzaGlmdHMgd2hvc2UgbGFzdCBkZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNl
IHRoZXNlIGZyZWUgdXAgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxh
c3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNlLCBzbyB0aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhl
c2Ugc2hpZnRzIHdpbGwgYmUKKyAgICAvLyBhdmFpbGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9u
IGZvciBhbnl0aGluZyBlbWl0dGVkIHByaW9yIChzbywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0
aW5nIGluCisgICAgLy8gcmV2ZXJzZSkuCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykg
eworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZhbHVlOworICAg
ICAgICBpZiAoc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVT
aGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5v
dyBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlIHNoaWZ0cy4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
c2hpZnRzKSB7CisgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFs
dWU7CisgICAgICAgIGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAg
ICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKwor
ICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYgcm90YXRlIDogcm90YXRlcykgeworICAgICAg
ICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3YXAgPSBPb3BzOworICAg
ICAgICBBcmc6OldpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQor
ICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCkgeworICAgICAgICAgICAgc3dh
cCA9IFN3YXAzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGgzMjsKKyAgICAg
ICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgc3dhcCA9IFN3YXA2NDsKKyAgICAgICAg
ICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpUbXApOworICAg
ICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAg
ICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpU
bXAsIEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdGFrZSB0
aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMgYW5kIHNvbWUgb2Yg
dGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHNodWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0
IGdldHMgdG9vIGNvbmZ1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSAocGFp
ci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuU3dhcCkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAtIDE7IGktLTspIHsKKyAgICAgICAgICAgICAgICBB
cmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHQgPSBy
b3RhdGVbaSArIDFdLnNyYygpOworCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnko
KSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21lLiBSb3RhdGVzIGFyZSByYXJlLiBTcGlsbHMg
YXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmluZyBkYXRhIGJldHdlZW4gdHdv
IHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBhIGxvdCBvZiByYXJlIHN0dWZmIGhhcyB0bwor
ICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFwcGVuIGF0IG9uY2UuCisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwg
ZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0
Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdp
biwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnQs
IHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0g
QXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzd2FwV2lkdGgg
PT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLmRz
dCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBkbyBhbiBleHRyYSB6
ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMy
LCBvcmlnaW4sIHBhaXIuZHN0KCksIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiB0cmVhdCB0aGlzIGFzIGEgc2hpZnQg
c28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRlc3RpbmF0aW9uIChpLmUuIGZpcnN0CisgICAg
ICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0IGZpcnN0LiBUaGVuIHdlIGhhbmRsZSB0aGUg
Zmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhlIHJvdGF0ZQorICAgICAgICAgICAgLy8gc3Bl
Y2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBsYXN0IGRlc3RpbmF0aW9uLiBUaGlzIHJlcXVp
cmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAgICAgICAgICAvLyBmaW5kIGEgc2NyYXRjaCBy
ZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgYSByb3RhdGUgdGhhdCB1c2VzIHRo
ZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWlsYWJsZSByZWdpc3RlciBmaWxlLgorCisgICAg
ICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJsZVNjcmF0Y2goCisgICAgICAgICAgICAg
ICAgdHlwZSwKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFpci5kc3QoKS51c2VzVG1wKHRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBzY3JhdGNo
ID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUg
PSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1ZmZsZVBhaXIocm90YXRlLmxhc3QoKS5kc3Qo
KSwgcm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAg
aGFuZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7CisKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0
UGFpcihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGVbMF0uZHN0KCksIHJvdGF0ZVswXS53
aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAgICAgICAgICAg
IHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBjb21taXRS
ZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAgICAgIHJlc3Vs
dC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25z
dCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKQorewor
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+
IGZwUGFpcnM7CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7Cisg
ICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgp
ICYmIHBhaXIud2lkdGgoKSA+IEFyZzo6cG9pbnRlcldpZHRoKCkpIHsKKyAgICAgICAgICAgIC8v
IDgtYnl0ZSBtZW1vcnktdG8tbWVtb3J5IG1vdmVzIG9uIGEgMzItYml0IHBsYXRmb3JtIGFyZSBi
ZXN0IGhhbmRsZWQgYXMgZmxvYXQgbW92ZXMuCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChw
YWlyKTsKKyAgICAgICAgfSBlbHNlIGlmIChwYWlyLnNyYygpLmlzR1AoKSAmJiBwYWlyLmRzdCgp
LmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBt
ZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisgICAg
ICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2Vw
dCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQo
cGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7
CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kVmVj
dG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCwgb3JpZ2luKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFy
Zzo6RlAsIG9yaWdpbikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJFbWl0U2h1ZmZsZV9oCisjZGVmaW5lIEFp
ckVtaXRTaHVmZmxlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcu
aCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBTaHVmZmxlUGFpciB7CitwdWJsaWM6CisgICAgU2h1ZmZsZVBhaXIoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgU2h1ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0
IEFyZyYgZHN0LCBBcmc6OldpZHRoIHdpZHRoKQorICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAg
ICAgLCBtX2RzdChkc3QpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0
IEFyZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9kc3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBk
ZXRlcm1pbmVzIHRoZSBraW5kIG9mIG1vdmUgd2UgZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lk
dGgzMiBvciBXaWR0aDY0IHJpZ2h0IG5vdy4KKyAgICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdl
ZW4gTW92ZTMyIGFuZCBNb3ZlLiBGb3IgRlAsIGl0IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFu
ZCBNb3ZlRG91YmxlLgorICAgIEFyZzo6V2lkdGggd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgQXJnIG1fc3JjOworICAgIEFyZyBtX2RzdDsKKyAgICBBcmc6OldpZHRoIG1fd2lk
dGggeyBBcmc6OldpZHRoOCB9OworfTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZl
biB0eXBlLiBUaGUgc2NyYXRjaCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFz
cyBpdCBhcworLy8gZm9sbG93czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJl
Z2lzdGVycyBvciB0ZW1wb3JhcmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCisvLyBy
ZWdpc3RlcnMgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUg
c2FtZSB0eXBlIGFzIHRoZSBzaHVmZmxlLCBhbmQgYXJlIG5vdAorLy8gbGl2ZSBhdCB0aGUgc2h1
ZmZsZSAtIHRoZW4geW91IGNhbiBwYXNzIHRoZW0uIElmIHlvdSBkb24ndCBoYXZlIHNjcmF0Y2gg
cmVnaXN0ZXJzIGF2YWlsYWJsZSBvciBpZgorLy8geW91IGRvbid0IGZlZWwgbGlrZSBsb29raW5n
IGZvciB0aGVtLCB5b3UgY2FuIHBhc3MgbWVtb3J5IGxvY2F0aW9ucy4gSXQncyBhbHdheXMgc2Fm
ZSB0byBwYXNzIGEKKy8vIHBhaXIgb2YgbWVtb3J5IGxvY2F0aW9ucywgYW5kIHJlcGxhY2luZyBl
aXRoZXIgbWVtb3J5IGxvY2F0aW9uIHdpdGggYSByZWdpc3RlciBjYW4gYmUgdmlld2VkIGFzIGFu
CisvLyBvcHRpbWl6YXRpb24uIEl0J3MgYSBwcmV0dHkgaW1wb3J0YW50IG9wdGltaXphdGlvbi4g
U29tZSBtb3JlIG5vdGVzOgorLy8KKy8vIC0gV2UgZGVmaW5lIHNjcmF0Y2ggcmVnaXN0ZXJzIGFz
IHRoaW5ncyB0aGF0IGFyZSBub3QgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYW5kIGFyZSBub3Qg
b25lIG9mCisvLyAgIHRoZSBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUuIE5vdCBiZWluZyBs
aXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbHNvIG1lYW5zIHRoYXQgdGhleSBjYW5ub3QKKy8vICAg
YmUgdXNlZCAKKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24gaXMgb25seSBuZWVk
ZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgK
Ky8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlvdSdyZSBndWFyYW50
ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAg
aW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQgeW91IGRvbid0IGhh
dmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291cmNlIGFuZCB0aGUg
ZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYg
d2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3NpbmcgbWVtb3J5IGxv
Y2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJl
Z2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBl
bWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMgd2hlbiBpdCBkb2Vz
IG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1l
bnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBhZnRlcgorLy8gICBy
ZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQgYWRkIGEgU2h1ZmZs
ZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVmZmxpbmdzIHVudGls
IGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBw
YWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlv
dSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0aGVtLCB0aGVuIG1h
a2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25lIHdheSB0bworLy8g
ICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgK
KyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaCwgQXJn
OjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgdGhhdCBpbnZv
bHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIG1lbW9y
eSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBhYm92
ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBh
aXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3Rk
OjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2
ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisjaW5jbHVkZSAi
QWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUg
IkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBj
b2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxvd2VyTWFjcm9zKGNv
ZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5k
IHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKQEAg
LTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAg
IGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBs
b3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRo
ZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGlj
aXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxl
ZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZl
cyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
MTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewog
Cit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0
b3I8SW5zdD4mIGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzKQor
ICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNlcnRpb25TZXQ6
Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMpCit7CisgICAg
Zm9yIChJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIFdURk1v
dmUoaW5zdCkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBi
bG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlv
bnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgs
IHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOwogICAgIH0KKworICAgIHZvaWQgaW5zZXJ0SW5z
dHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4mKTsKKyAgICB2b2lkIGluc2VydElu
c3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJB
aXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1
ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJBZnRlclJlZ0FsbG9jIik7CisKKyAgICBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKKworICAgIFJlZ0xpdmVu
ZXNzIGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBp
bnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworCisgICAg
ICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSB8fCBpbnN0Lm9wY29kZSA9PSBDb2xk
Q0NhbGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBsb2NhbENhbGMubGl2ZSgp
KQorICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAg
ICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgICAgICAg
ICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChjb25zdCBSZWdpc3RlclNldCYgc2V0LCBBcmc6OlR5
cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKKyAgICAgICAgc3RkOjphcnJheTxBcmcs
IDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewor
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChSZWcgcmVn
IDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmICghc2V0
LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IFRtcChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
Zm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBBcmc6OnN0YWNrKAorICAgICAg
ICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICAvLyBOb3cgdHJh
bnNmb3JtIHRoZSBjb2RlLgorICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkg
eworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNodWZmbGU6
IHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQgPSB1c2VkUmVnaXN0ZXJzLmdldCgm
aW5zdCk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgaSAr
PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOwor
ICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3QuYXJnc1tpICsgMl0ud2lkdGgoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNyYy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0LnNldChzcmMucmVnKCkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMo
c2V0LCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3Jh
dGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRT
aHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAg
ICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENvbGRDQ2FsbDogeworICAgICAgICAgICAgICAg
IENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAg
ICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmVVc2VkOworICAgICAgICAgICAgICAgIFZlY3Rv
cjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBh
aXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXN0
aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxk
ID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5h
cmdzW3Jlc3VsdCA/IChpID49IDEgPyBpICsgMSA6IGkpIDogaSBdOworICAgICAgICAgICAgICAg
ICAgICBBcmcgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICBBcmc6
OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0aCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcmVVc2VkLnNldChzcmMucmVnKCkpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMo
cHJlVXNlZCwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZw
U2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzVG9TYXZlID0gdXNlZFJlZ2lzdGVy
cy5nZXQoJmluc3QpOworCisgICAgICAgICAgICAgICAgLy8gQWxzbyBuZWVkIHRvIHNhdmUgYWxs
IGxpdmUgcmVnaXN0ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1bHQKKyAg
ICAgICAgICAgICAgICAvLyByZWdpc3Rlci4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQor
ICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmNsZWFyKHJlc3VsdC5yZWcoKSk7CisgICAg
ICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7CisgICAgICAgICAgICAg
ICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgpLCBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNo
dWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0aCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90KTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVm
ZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKworICAgICAg
ICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlv
bnMpOworCisgICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gZW1pdCBjb2RlIHRvIHJl
c3RvcmUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJzLnJlc2l6ZSgwKTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAg
cmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFja1Nsb3RzW3N0YWNrU2xvdElu
ZGV4KytdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWly
KEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAg
IFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBpbnN0LmFyZ3NbMV0sIEFyZzo6d2lkdGhGb3JCM1R5
cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQocGFp
cik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5zZXQocmVzdWx0LnJlZygpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1Rv
U2F2ZSwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVz
KHJlZ3NUb1NhdmUsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4
ICsgMSwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdp
bikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVn
QWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKyNkZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1
ZmZsZSBhbmQgQ29sZENDYWxsIGluc3RydWN0aW9ucy4gVGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0
byBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIKKy8vIGFsbG9jYXRpb24uCisKK3ZvaWQgbG93ZXJBZnRl
clJlZ0FsbG9jKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Y19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFj
cm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sK
KyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImxvd2VyTWFjcm9zIik7CisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9w
Y29kZSkgeworICAgICAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAgICAgICAgICAgIENDYWxs
VmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50
aW9uKGNvZGUsIHZhbHVlKTsKKworICAgICAgICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50
cyhTaHVmZmxlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFs
dWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDE7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAg
IHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlv
bnNbaV0pOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5k
KEFyZzo6d2lkdGhBcmcoQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChp
bnN0SW5kZXgsIFdURk1vdmUoc2h1ZmZsZUFyZ3VtZW50cykpOworCisgICAgICAgICAgICAgICAg
Ly8gSW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2luZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50
LgorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uc1swXSA9IGluc3QuYXJnc1swXTsKKworICAg
ICAgICAgICAgICAgIC8vIFNhdmUgd2hlcmUgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBp
dHMgcmVzdWx0LgorICAgICAgICAgICAgICAgIEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgp
ID09IFZvaWQgPyBBcmcoKSA6IGluc3QuYXJnc1sxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRp
b25zKTsKKworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+
dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZUZsb2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3Qp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJs
ZToKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAx
LCBNb3ZlRG91YmxlLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJl
c3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dChpbnN0SW5kZXggKyAxLCBNb3ZlLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJNYWNyb3NfaAorI2RlZmluZSBBaXJMb3dlck1hY3Jv
c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFpciBoYXMgc29tZSBvcGNv
ZGVzIHRoYXQgYXJlIHZlcnkgaGlnaC1sZXZlbCBhbmQgYXJlIG1lYW50IHRvIHJlZHVjZSB0aGUg
YW1vdW50IG9mIGxvdy1sZXZlbAorLy8ga25vd2xlZGdlIGluIHRoZSBCMy0+QWlyIGxvd2VyaW5n
LiBUaGUgY3VycmVudCBleGFtcGxlIGlzIENDYWxsLgorCit2b2lkIGxvd2VyTWFjcm9zKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxvd2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3
b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgog
ICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0
cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAs
IEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisg
ICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6
ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3ICs2ODAs
MTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBT
aHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBtdWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11
bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1vdmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUg
c3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNyYywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxl
IHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhpcworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAx
LCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwgNjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFs
bG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5l
ZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBm
aXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNoCiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxv
d2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRo
ZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFs
dWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitjdXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwK
KworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268837</attachid>
            <date>2016-01-12 19:10:47 -0800</date>
            <delta_ts>2016-01-12 19:25:47 -0800</delta_ts>
            <desc>starting to work on tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>108569</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDE1IEBAIGlu
bGluZSBib29sIGlzWDg2XzY0KCkKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBpc0lPUygpCit7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKwogaW5saW5lIGJvb2wgb3B0aW1pemVGb3JBUk12N0lESVZTdXBw
b3J0ZWQoKQogewogICAgIHJldHVybiBpc0FSTXY3SURJVlN1cHBvcnRlZCgpICYmIE9wdGlvbnM6
OnVzZUFyY2hpdGVjdHVyZVNwZWNpZmljT3B0aW1pemF0aW9ucygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDExLDYg
KzE0MTEsMTYgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCisgICAgdm9pZCBzd2FwMzIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGdsX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzd2FwMzIoUmVnaXN0ZXJJ
RCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlQ29u
ZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdodCwgbGVmdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1NSw2ICs2NTUsMTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCisg
ICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQor
CiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNyYywgZGVzdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MzEsNiArMTQzMSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKwogI2lmIENQVShYODZfNjQp
CiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtMTQ0MSw2ICsxNDQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAg
fQorCisgICAgdm9pZCB4Y2hncV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENI
R19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1v
dmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCwxMSBAQCBDQ2FsbFZhbHVlOjp+Q0NhbGxWYWx1ZSgpCiB7CiB9CiAKK3ZvaWQgQ0Nh
bGxWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJpc1dhcm0gPSAiLCBpc1dhcm0pOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDEyIEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVlKCk7CiAK
LSAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0czo6Zm9y
Q2FsbCgpIH07CisKKyAgICBib29sIGlzV2FybSB7IHRydWUgfTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwpAQCAtNDcsNyArNTIs
NiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBD
Q2FsbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCiAgICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUs
IENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKLSAgICAgICAgLCBlZmZlY3RzKEVm
ZmVjdHM6OmZvckNhbGwoKSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxk
cmVuKCkgPj0gMSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMiBAQCBD
b21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9ieXByb2R1Y3Rz
ID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6Q29tcGlsYXRp
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVC
eXByb2R1Y3RzPiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCisgICAgLCBt
X2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGlsYXRpb246On5D
b21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENv
bXBpbGF0aW9uIHsKIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9u
KFZNJiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMg
Y29uc3RydWN0b3IgYWxsb3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4g
SXQncyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBi
ZXN0IHRvIGtlZXAgaXQgdGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRp
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0
cz4pOworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29k
ZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDEsMzcgKzE1NDEsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaW52ZXJ0ZWQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJ
bmZvPgotICAgIEFyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQodW5zaWduZWQmIGFyZ3VtZW50Q291
bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKLSAgICAgICAgaWYgKGFy
Z3VtZW50SW5kZXggPCBCYW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgewotICAg
ICAgICAgICAgVG1wIHJlc3VsdCA9IFRtcChCYW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFy
Z3VtZW50SW5kZXgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY2hp
bGQtPnR5cGUoKSksIGltbU9yVG1wKGNoaWxkKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLQotI2lmIENQVShBUk02NCkgJiYgUExBVEZPUk0oSU9TKQot
ICAgICAgICAvLyBpT1MgZG9lcyBub3QgZm9sbG93IHRoZSBBUk02NCBBQkkgcmVnYXJkaW5nIGZ1
bmN0aW9uIGNhbGxzLgotICAgICAgICAvLyBBcmd1bWVudHMgbXVzdCBiZSBwYWNrZWQuCi0gICAg
ICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKLSAgICAg
ICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNr
T2Zmc2V0KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mKHZvaWQq
KTsKLSNlbmRpZgotICAgICAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0
KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7Ci0gICAgICAgIAotICAgICAgICAv
LyBQdXQgdGhlIGNvZGUgZm9yIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGJlZm9yZSBhbnl0aGluZyBl
bHNlLiBUaGlzIHNpZ25pZmljYW50bHkgZWFzZXMgdGhlCi0gICAgICAgIC8vIGJ1cmRlbiBvbiB0
aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBJZiB3ZSBjb3VsZCwgd2UnZCBob2lzdCB0aGVzZSBzdG9y
ZXMgYXMgZmFyIGFzCi0gICAgICAgIC8vIHBvc3NpYmxlLgotICAgICAgICAvLyBGSVhNRTogQWRk
IGEgcGhhc2UgdG8gaG9pc3Qgc3RvcmVzIGFzIGhpZ2ggYXMgcG9zc2libGUgdG8gcmVsaWV2ZSBy
ZWdpc3RlciBwcmVzc3VyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MTA2MwotICAgICAgICBtX2luc3RzLmxhc3QoKS5pbnNlcnQoMCwgY3Jl
YXRlU3RvcmUoY2hpbGQsIHJlc3VsdCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92
YWx1ZS0+b3Bjb2RlKCkpIHsKQEAgLTE5MTksMTQgKzE4ODgsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAg
ICBjYXNlIEIzOjpDQ2FsbDogewogICAgICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3Zh
bHVlLT5hczxDQ2FsbFZhbHVlPigpOwotICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2Fs
bCwgQXJnOjpzcGVjaWFsKG1fY29kZS5jQ2FsbFNwZWNpYWwoKSkpOwotCi0gICAgICAgICAgICAv
LyBUaGlzIGlzIGEgYml0IHdlaXJkIC0gd2UgaGF2ZSBhIHN1cGVyIGludGVuc2UgY29udHJhY3Qg
d2l0aCBBcmc6OkNDYWxsU3BlY2lhbC4gSXQgbWlnaHQKLSAgICAgICAgICAgIC8vIGJlIGJldHRl
ciBpZiB3ZSBmYWN0b3JlZCBBaXI6OkNDYWxsU3BlY2lhbCBvdXQgb2YgdGhlIEFpciBuYW1lc3Bh
Y2UgYW5kIG1hZGUgaXQgYSBCMwotICAgICAgICAgICAgLy8gdGhpbmcuCi0gICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA0NQor
ICAgICAgICAgICAgSW5zdCBpbnN0KGNDYWxsLT5pc1dhcm0gPyBBaXI6OkNDYWxsIDogQWlyOjpD
b2xkQ0NhbGwsIGNDYWxsKTsKIAogICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHRvbiBvZiBmbGV4
aWJpbGl0eSByZWdhcmRpbmcgdGhlIGNhbGxlZSBhcmd1bWVudCwgYnV0IGN1cnJlbnRseSwgd2Ug
ZG9uJ3QKICAgICAgICAgICAgIC8vIHVzZSBpdCB5ZXQuIEl0IGdldHMgd2VpcmQgZm9yIHJlYXNv
bnM6CkBAIC0xOTM5LDQ4ICsxOTAzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA1MgogICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0NhbGwtPmNoaWxkKDApKSk7CiAKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gdGVsbCBBaXIgd2hhdCByZWdpc3RlcnMgdGhpcyBkZWZpbmVzLgot
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKLSAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSMikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpKTsKLQotICAgICAgICAgICAgLy8gTm93IG1hcnNoYWxsIHRoZSBhcmd1bWVudHMu
IFRoaXMgaXMgd2hlcmUgd2UgaW1wbGVtZW50IHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQWZ0
ZXIKLSAgICAgICAgICAgIC8vIHRoaXMsIEFpciBkb2VzIG5vdCBrbm93IHdoYXQgdGhlIGNvbnZl
bnRpb24gaXM7IGl0IGp1c3QgdGFrZXMgb3VyIHdvcmQgZm9yIGl0LgotICAgICAgICAgICAgdW5z
aWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZwQXJndW1l
bnRDb3VudCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBhcmdDaGlsZCA9IGNDYWxsLT5jaGlsZChpKTsK
LSAgICAgICAgICAgICAgICBBcmcgYXJnOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGFyZ0NoaWxkLT50eXBlKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJz
aGFsbENDYWxsQXJndW1lbnQ8R1BSSW5mbz4oZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwg
YXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChj
Q2FsbC0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0
bXAoY0NhbGwpKTsKIAotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKLSAgICAgICAgICAg
ICAgICAgICAgYXJnID0gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50PEZQUkluZm8+KGZwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQsIGFyZ0NoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGNDYWxsLT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKIAotICAgICAgICAgICAgICAgIGlmIChh
cmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5h
cHBlbmQoV1RGTW92ZShpbnN0KSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY0NhbGwtPnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIHRtcChjQ2Fs
bCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbG9hdDoKLSAg
ICAgICAgICAgIGNhc2UgRG91YmxlOgotICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91Ymxl
LCBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpLCB0bXAoY0NhbGwpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0
cy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgT3Bh
cXVlQnlwcm9kdWN0cyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgT3BhcXVlQnlwcm9kdWN0cygpOwotICAgIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKIAogICAgIHNpemVfdCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnlwcm9kdWN0cy5zaXplKCk7IH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24g
MTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDIxICsyMDAsMTQgQEAgYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgIGNhc2UgQXJnOjpUbXA6CiAgICAgY2FzZSBBcmc6
OkltbToKICAgICBjYXNlIEFyZzo6SW1tNjQ6Ci0gICAgY2FzZSBBcmc6OlN0YWNrOgotICAgIGNh
c2UgQXJnOjpDYWxsQXJnOgotICAgICAgICBicmVhazsgLy8gT0sKLSAgICBjYXNlIEFyZzo6QWRk
cjoKLSAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKQotICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIz
VHlwZSh2YWx1ZS0+dHlwZSgpKTsKIAotICAgIHJldHVybiBhcmcuaXNUeXBlKHR5cGUpOworICAg
IHJldHVybiBhcmcuY2FuUmVwcmVzZW50KHZhbHVlKTsKIH0KIAogYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6OkFyZyYgYXJn
LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwyNiBAQAogCiAjaW5j
bHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wg
QXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6OlRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3RhY2s6CisgICAg
Y2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNlbnRhYmxlQXMo
V2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAgICBzd2l0Y2gg
KHNpZ25lZG5lc3MpIHsKQEAgLTYxLDYgKzc4LDIyIEBAIGJvb2wgQXJnOjppc1JlcHJlc2VudGFi
bGVBcyhXaWR0aCB3aWR0aCwKICAgICB9CiB9CiAKK2Jvb2wgQXJnOjp1c2VzVG1wKEFpcjo6VG1w
IHRtcCkgY29uc3QKK3sKKyAgICBib29sIHVzZXMgPSBmYWxzZTsKKyAgICBjb25zdF9jYXN0PEFy
Zyo+KHRoaXMpLT5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgWyZdIChBaXI6OlRtcCBvdGhlclRt
cCkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wID09IHRtcCkKKyAgICAgICAgICAgICAgICB1
c2VzID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHVzZXM7Cit9CisKK2Jvb2wgQXJn
OjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBpc1R5cGUo
dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Cit9CisKIHZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTExMSw2ICsx
NDQsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGNhc2Ug
U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBXaWR0aEFyZzoKKyAgICAgICAgb3V0LnByaW50KHdpZHRo
KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE2MSw2ICsxOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgi
U3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OldpZHRoQXJnOgorICAg
ICAgICBvdXQucHJpbnQoIldpZHRoQXJnIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI1LDE2ICsyNjQsMTYgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogewogICAgIHN3aXRjaCAod2lk
dGgpIHsKICAgICBjYXNlIEFyZzo6V2lkdGg4OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIp
OworICAgICAgICBvdXQucHJpbnQoIjgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDE2OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoMTYiKTsKKyAgICAgICAgb3V0LnBy
aW50KCIxNiIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAg
ICAgIG91dC5wcmludCgiV2lkdGgzMiIpOworICAgICAgICBvdXQucHJpbnQoIjMyIik7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKLSAgICAgICAgb3V0LnByaW50KCJX
aWR0aDY0Iik7CisgICAgICAgIG91dC5wcmludCgiNjQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAx
OTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7
CisKK25hbWVzcGFjZSBBaXIgewogCiBjbGFzcyBTcGVjaWFsOwogY2xhc3MgU3RhY2tTbG90OwpA
QCAtNjksNyArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0Nv
bmQsCiAgICAgICAgIERvdWJsZUNvbmQsCi0gICAgICAgIFNwZWNpYWwKKyAgICAgICAgU3BlY2lh
bCwKKyAgICAgICAgV2lkdGhBcmcKICAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsK
QEAgLTE1Niw2ICsxNjEsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bVR5cGVzID0gMjsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFR5cGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZ1bmN0b3IoR1ApOworICAgICAgICBmdW5jdG9yKEZQKTsKKyAgICB9CisKICAgICBlbnVt
IFdpZHRoIDogaW50OF90IHsKICAgICAgICAgV2lkdGg4LAogICAgICAgICBXaWR0aDE2LApAQCAt
MjIwLDYgKzIzMiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAm
JiAhaXNDb2xkVXNlKHJvbGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBSb2xlIGNvb2xlZChSb2xl
IHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBDb2xk
VXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAg
ICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVm
OgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAg
Y2FzZSBFYXJseURlZjoKKyAgICAgICAgICAgIHJldHVybiByb2xlOworICAgICAgICBjYXNlIFVz
ZToKKyAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOworICAgICAgICBjYXNlIExhdGVVc2U6Cisg
ICAgICAgICAgICByZXR1cm4gTGF0ZUNvbGRVc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNl
IHRoZSBBcmcgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNF
YXJseVVzZShSb2xlIHJvbGUpCiAgICAgewpAQCAtNTQ5LDYgKzU4MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyB3aWR0aEFyZyhX
aWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gd2lkdGg7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFy
ZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIu
bV9vZmZzZXQKQEAgLTU4NSw2ICs2MjUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2lu
ZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wgaXNTb21lSW1tKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1tNjQoKTsKKyAgICB9CisKICAgICBib29s
IGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CkBA
IC02MDUsNiArNjUwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRl
eDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoK
KyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzU3RhY2tNZW1vcnkoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkg
PT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs2OTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
a2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAgICAg
Ym9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlz
U3RhY2soKTsKQEAgLTY4MCwxOCArNzQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9i
YXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBTdGFj
azoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAgIHsK
QEAgLTczMCw2ICs3ODQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFdpZHRoQXJnKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBp
c0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1AoKTsKQEAgLTc1NCw2ICs4MTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoK
ICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAg
IGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBU
bXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzgzMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAg
ICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2Fz
ZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6
CkBAIC04MTIsNiArODc0LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9v
bCBjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKwogICAgIGJvb2wgaXNHUFIoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAg
LTk1Myw2ICsxMDE3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAg
IGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdp
ZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC05
NzQsNiArMTAzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNl
c1RtcChBaXI6OlRtcCB0bXApIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2gg
dG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwg
dXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhp
czoKICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVj
aWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbCh1bnNpZ25lZCYgYXJndW1l
bnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgdW5z
aWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKKyAgICBpZiAoYXJndW1lbnRJ
bmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKQorICAgICAgICByZXR1
cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOworCisg
ICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlzQVJNNjQoKSAmJiBpc0lPUygpKSB7Cisg
ICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgorICAgICAgICBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJndW1lbnRz
IGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9IDg7CisgICAgfQorCisgICAgc3RhY2tP
ZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsK
KyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0KTsKKyAgICBzdGFja09m
ZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcmcgbWFyc2hhbGxD
Q2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBm
cEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQorewor
ICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSB7CisgICAgY2Fz
ZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxHUFJJ
bmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6
OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxGUFJJbmZvPihm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFyZygpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihD
b2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8QXJnPiByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVjaWFsOjpzY3JhdGNoUmVnaXN0ZXIpKTsK
KyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGZwQXJndW1l
bnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFsbENDYWxsQXJndW1lbnQoZ3BBcmd1bWVu
dENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB2YWx1ZS0+Y2hpbGQoaSkpKTsK
KyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICBjYXNl
IEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVybiBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxvYXQ6CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRtcCgpOworfQorCitJbnN0IGJ1
aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPEFyZz4mIGFy
Z3VtZW50cykKK3sKKyAgICBJbnN0IGluc3QoUGF0Y2gsIG9yaWdpbiwgQXJnOjpzcGVjaWFsKGNv
ZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZ3VtZW50c1swXSk7
CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJn
IGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQorICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgIH0KKyAgICByZXR1cm4gaW5zdDsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZl
bnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNkZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50
aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxWYWx1
ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK1ZlY3RvcjxBcmc+IGNvbXB1
dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxsVmFsdWUqKTsKKworVG1wIGNDYWxsUmVz
dWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYsIFZhbHVlKiBvcmlnaW4sIGNvbnN0
IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25f
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24g
MTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2MoKSB7
IHJldHVybiBtX3Byb2M7IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kgPSAxKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9u
IHN0YWNrIHNsb3RzIGFsd2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4g
dGhlIGluZGV4CiAgICAgLy8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBz
dGFjayBzbG90cyB5b3UgY3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0
b20uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKElu
c3QmIGluc3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0Nh
bGxWYWx1ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSAxICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAg
OiAxKSArIHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3Ig
aW1tZWRpYXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlm
ICghYXJnLmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0o
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSAxOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUg
YW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAg
aWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUq
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29m
ZnNldCArIGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2Fs
bEhlbHBlcnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVs
cGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dl
cmVkIEMgY2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVD
dXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgJSAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1h
eSBvbmx5IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0
aGUgdW5kZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhh
dCBpcyBzdXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBh
bHNvCisgICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAi
c2hhcGUiIG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8v
IGFzIGFuIGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGlu
YXRpb24gcmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNv
bnNpc3RzIG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5u
aW5nIHRyZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMg
YSBzZXF1ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFs
bHkgcmVxdWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxv
b3BzLiBUaGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29y
IGFuZCBvbmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdl
dCBpbnRvIiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRl
ZCB1c2luZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBh
IHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hT
ZXQ8QXJnPiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzWzBdOworICAgICAgICB1
bnNpZ25lZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAg
ICAgICAgLy8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJn
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUu
CisgICAgICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3
RW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGFyZy5pc1RtcCgpIHx8IGFyZy5pc01lbW9yeSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgU2h1ZmZsZUN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5z
dCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZB
VEFMOiBVbmxvd2VyZWQgc2h1ZmZsZTogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckluc3QuaCIK
ICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTUxLDYgKzUyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQg
dG8gY2FycnkgZXh0cmEgc3RhdGUgYXJvdW5kIHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBT
cGVjaWFscyBtZWFuIHRoYXQgeW91CiAvLyBhbHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZl
biBpbiBtZXRob2RzIHRoYXQgZG9uJ3QgdGFrZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBE
ZWZpbml0aW9uIG9mIFBhdGNoIGluc3RydWN0aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRl
IHRoZSBiZWhhdmlvciBvZiB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVj
dCwgd2hpY2ggd2lsbCBiZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgog
c3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKQEAgLTk2LDYgKzk5LDExMyBAQCBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIH0KIH07CiAK
Ky8vIERlZmluaXRpb24gb2YgQ0NhbGwgaW5zdHJ1Y3Rpb24uIENDYWxsIGlzIHVzZWQgZm9yIGhv
dCBwYXRoIEMgZnVuY3Rpb24gY2FsbHMuIEl0J3MgbG93ZXJlZCB0byBhCisvLyBQYXRjaCB3aXRo
IGFuIEFpciBDQ2FsbFNwZWNpYWwgYWxvbmcgd2l0aCBjb2RlIHRvIG1hcnNoYWwgaW5zdHJ1Y3Rp
b25zLiBUaGUgbG93ZXJpbmcgaGFwcGVucworLy8gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24s
IHNvIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBzZWVzIHRoZSBjbG9iYmVycy4KK3N0cnVj
dCBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IDA7CisKKyAgICAgICAgZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFy
Zzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBvaW50ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAg
IAorICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7CisgICAgICAgICAgICBmdW5j
dG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCisgICAg
ICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAg
ICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAg
ICAgICAgZnVuY3RvcigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6
VXNlLAorICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwK
KyAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0o
SW5zdCYpOworCisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFz
Tm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGp1c3QgY3Jhc2hlcywgc2luY2Ugd2UgZXhwZWN0IEMg
Y2FsbHMgdG8gYmUgbG93ZXJlZCBiZWZvcmUgZ2VuZXJhdGlvbi4KKyAgICBzdGF0aWMgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpOworfTsKKworc3RydWN0IENvbGRDQ2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmco
SW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgaXMganVzdCBsaWtlIGEgY2FsbCwgYnV0IHVzZXMgYmVjb21lIGNvbGQuCisgICAgICAgIEND
YWxsQ3VzdG9tOjpmb3JFYWNoQXJnKAorICAgICAgICAgICAgaW5zdCwKKyAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3
aWR0aCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChyb2xlKSwg
dHlwZSwgd2lkdGgpOworICAgICAgICAgICAgfSk7CisgICAgfQorfTsKKworc3RydWN0IFNodWZm
bGVDdXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgbGltaXQgPSBpbnN0LmFyZ3Muc2l6ZSgpIC8gMyAqIDM7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW1pdDsgaSArPSAzKSB7CisgICAgICAgICAg
ICBBcmcmIHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAgICBBcmcmIGRzdCA9IGlu
c3QuYXJnc1tpICsgMV07CisgICAgICAgICAgICBBcmcmIHdpZHRoQXJnID0gaW5zdC5hcmdzW2kg
KyAyXTsKKyAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSB3aWR0aEFyZy53aWR0aCgpOwor
ICAgICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkgPyBB
cmc6OkdQIDogQXJnOjpGUDsKKyAgICAgICAgICAgIGZ1bmN0b3Ioc3JjLCBBcmc6OlVzZSwgdHlw
ZSwgd2lkdGgpOworICAgICAgICAgICAgZnVuY3Rvcihkc3QsIEFyZzo6RGVmLCB0eXBlLCB3aWR0
aCk7CisgICAgICAgICAgICBmdW5jdG9yKHdpZHRoQXJnLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJn
OjpXaWR0aDgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4u
LikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkRm9ybShJbnN0Jik7CisgICAgCisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYsIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleCAlIDMp
IHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3Rz
KEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRp
YyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jik7Cit9OworCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAK
ICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3Nz
aWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAg
ICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIFRt
cCB0bXAocmVnKTsKKyAgICAgICAgaWYgKGZ1bmN0b3IodG1wKSkKKyAgICAgICAgICAgIHJldHVy
biB0bXA7CisgICAgfQorICAgIHJldHVybiBUbXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNj
cmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7
CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNjcmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAg
IFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1Rt
cCh0bXApICYmICFhcmcyLnVzZXNUbXAodG1wKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRz
dCgpKTsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxl
UGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBl
LCBWYWx1ZSogb3JpZ2luKQoreworICAgIHBhaXJzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAg
ICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYWlyLnNyYygpID09IHBhaXIuZHN0KCk7CisgICAgICAgIH0pOworICAgIAorICAgIC8v
IEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBpcyB0aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Ug
a25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIg
OiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1R5cGUodHlwZSkpOworICAg
ICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFp
ci5kc3QoKS5pc1RtcCgpIHx8IHBhaXIuZHN0KCkuaXNNZW1vcnkoKSk7CisgICAgfQorCisgICAg
Ly8gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBraW5kcyBvZiBvcGVyYXRpb25zIHRoYXQgd2Ugd2ls
bCBkbzoKKyAgICAvLworICAgIC8vIC0gU2hpZnQuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYyku
IFdlIGVtaXQgdGhpcyBhcyAiTW92ZSBiLCBjOyBNb3ZlIGEsIGIiLiBUaGlzIG9ubHkgcmVxdWly
ZXMKKyAgICAvLyAgIHNjcmF0Y2ggcmVnaXN0ZXJzIGlmIHRoZXJlIGFyZSBtZW1vcnktPm1lbW9y
eSBtb3Zlcy4gV2Ugd2FudCB0byBmaW5kIGFzIG1hbnkgb2YgdGhlc2UgYXMKKyAgICAvLyAgIHBv
c3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgY2hlYXBlci4gTm90ZSB0aGF0IHNoaWZ0cyBjYW4gaW52
b2x2ZSB0aGUgc2FtZSBzb3VyY2UgbWVudGlvbmVkCisgICAgLy8gICBtdWx0aXBsZSB0aW1lcy4g
RXhhbXBsZTogKGEgPT4gYiwgYSA9PiBjLCBiID0+IGQsIGIgPT4gZSkuCisgICAgLy8KKyAgICAv
LyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhKS4gV2Ugd2FudCB0byBlbWl0IHRo
aXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0IGluc3RydWN0aW9uCisgICAgLy8gICBtYXkgbm90
IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0
ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAgIC8vICAgbG9jYXRpb24uIEEgZ25hcmxpZXIgZXhh
bXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMgPT4gYSkuIFdlIGNhbiBlbWl0IHRoaXMgYXMgIlN3
YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwgYiIuIE5vdGUgdGhhdCBzd2FwcGluZyBoYXMgdG8g
YmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcgd2lkdGhzLgorICAgIC8vCisgICAgLy8gV2Ugd2ls
bCBmaW5kIG11bHRpcGxlIGRpc2pvaW50IHN1Y2ggb3BlcmF0aW9ucy4gV2UgY2FuIGV4ZWN1dGUg
dGhlbSBpbiBhbnkgb3JkZXIuCisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgTW92ZXMg
dGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgYmFja3dhcmRzLiBBbGwgc2hpZnRzIGFyZSBrZXllZCBi
eSB0aGVpcgorICAgIC8vIHN0YXJ0aW5nIHNvdXJjZS4KKyAgICBIYXNoTWFwPEFyZywgVmVjdG9y
PFNodWZmbGVQYWlyPj4gc2hpZnRzOworCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3
YXBzIG92ZXIgc3JjKCkncyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4g
Zm9yIGEgbGlzdAorICAgIC8vIG9mIHNpemUgMyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNy
YygpLCBsaXN0WzJdLnNyYygpOyBTd2FwIGxpc3RbMF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgor
ICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMg
ZG9uJ3QgbWF0Y2ggb3Igb3RoZXIgYmFkIHRoaW5ncyBoYXBwZW4uCisgICAgVmVjdG9yPFZlY3Rv
cjxTaHVmZmxlUGFpcj4+IHJvdGF0ZXM7CisKKyAgICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBW
ZWN0b3I8U2h1ZmZsZVBhaXI+PiBtYXBwaW5nOworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQ
YWlyJiBwYWlyIDogcGFpcnMpCisgICAgICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBW
ZWN0b3I8U2h1ZmZsZVBhaXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQocGFpcik7CisKKyAg
ICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7CisKKyAgICAgICAgR3JhcGhO
b2RlV29ya2xpc3Q8QXJnPiB3b3JrbGlzdDsKKyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgQXJnIG9yaWdpbmFsU3JjID0gbWFwcGluZy5iZWdpbigpLT5r
ZXk7CisgICAgICAgICAgICBBU1NFUlQoIXNoaWZ0cy5jb250YWlucyhvcmlnaW5hbFNyYykpOwor
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICB3aGls
ZSAoQXJnIHNyYyA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxB
cmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNy
Yyk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBXaXRoIGEgc2hpZnQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZp
b3VzbHkgYnVpbHQgdGhlIHRhaWwgb2YgdGhpcyBzaGlmdC4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gU2VlIGlmIHRoYXQncyB0aGUgY2FzZSBub3cuCisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRQYWlycy5hcHBlbmRWZWN0b3Ioc2hpZnRzLnRha2Uoc3JjKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8
U2h1ZmZsZVBhaXI+IHBhaXJzID0gV1RGTW92ZShpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNo
dWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBh
aXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkg
PT0gc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChwYWlyLmRzdCgpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50UGFpcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnNbMF0u
c3JjKCkgPT0gb3JpZ2luYWxTcmMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxh
c3QoKS5kc3QoKSA9PSBjdXJyZW50UGFpcnNbMF0uc3JjKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1pbmF0ZXMgYmVjYXVzZSB3ZSByZXR1cm5lZCB0byB0
aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHBhaXIgbGlzdCBo
YXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxhciBzaGFwZS4KKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBjdXJyZW50UGFpcnMuc2l6ZSgpIC0gMTsgaS0tOykKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlyc1tpXS5kc3QoKSA9PSBjdXJyZW50UGFpcnNbaSAr
IDFdLnNyYygpKTsKKyAgICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChjdXJyZW50UGFpcnMp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2hpZnRzLmFkZChvcmlnaW5h
bFNyYywgY3VycmVudFBhaXJzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEluIHRoZSB3
b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4gVGhlIHdheSB3ZSBkbyB0
aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3aGF0IHNjcmF0Y2ggcmVn
aXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBXZSB3aWxsIG5lZWQgc2Ny
YXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vCisg
ICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBkc3QgcmVmZXIgdG8gbWVt
b3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVjdGlvbiBpcyBhdmFpbGFi
bGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhh
dmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZlIGEgU2hpZnQgdGhhdAor
ICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9yIHN1Y2ggYSByZWdpc3Rl
ciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsmXSAoQXJnOjpXaWR0aCB3
aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNl
IEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3Zl
MzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAg
cmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChB
cmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGlu
Z3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9u
cywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVy
c2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBs
YWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGlu
ZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8g
aXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0
b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBh
dXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVu
c2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAo
c2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tp
bmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVN
b3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAg
ICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0
Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1w
KSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNv
bnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsK
KworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFp
ciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9wY29kZSBtb3ZlID0gbW92ZUZv
cldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzVmFsaWRGb3Jt
KG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtpbmQoKSkpIHsKKyAgICAgICAg
ICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRl
eCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2lu
LCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qo
TW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFsdWUoKSksIHNjcmF0Y2gpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lk
dGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWlyLmRzdCgpKSk7CisgICAgICAg
ICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRjaCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdCht
b3ZlLCBvcmlnaW4sIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsKKyAgICB9OworCisgICAgYXV0
byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgaGFu
ZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBBcmcgbGFzdERzdCA9IHNoaWZ0
Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNUbXAoKSkgeworICAgICAgICAg
ICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2guaXNU
bXAoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0gbGFzdERzdDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworICAgIC8vIEZpcnN0IGhhbmRsZSBzaGlmdHMgd2hvc2UgbGFzdCBk
ZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUgdXAgc2NyYXRjaCByZWdpc3Rl
cnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNlLCBzbyB0
aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdpbGwgYmUKKyAgICAvLyBhdmFp
bGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGluZyBlbWl0dGVkIHByaW9yIChz
bywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAgLy8gcmV2ZXJzZSkuCisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykgeworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+
JiBzaGlmdCA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoc2hpZnQubGFzdCgpLmRzdCgpLmlz
VG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJl
c3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlIHNoaWZ0
cy4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAgICAgIFZlY3RvcjxTaHVm
ZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmICghc2hpZnQubGFzdCgp
LmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7CisgICAgICAg
IGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIGZvciAoVmVjdG9yPFNodWZmbGVQYWlyPiYg
cm90YXRlIDogcm90YXRlcykgeworICAgICAgICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAg
ICAgT3Bjb2RlIHN3YXAgPSBPb3BzOworICAgICAgICBBcmc6OldpZHRoIHN3YXBXaWR0aCA9IEFy
Zzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQorICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgPT0g
QXJnOjpHUCkgeworICAgICAgICAgICAgc3dhcCA9IFN3YXAzMjsKKyAgICAgICAgICAgIHN3YXBX
aWR0aCA9IEFyZzo6V2lkdGgzMjsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIg
OiByb3RhdGUpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAg
ICAgc3dhcCA9IFN3YXA2NDsKKyAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpX
aWR0aDY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2Fw
LCBBcmc6OlRtcCwgQXJnOjpUbXApOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFp
ciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkg
fHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAg
Jj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6QWRkcik7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgdGFrZSB0aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBh
IG1peCBvZiB3aWR0aHMgYW5kIHNvbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHNo
dWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdldHMgdG9vIGNvbmZ1c2luZy4KKyAgICAgICAg
ICAgICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2Fu
U3dhcCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKSAtIDE7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZVtpXS5zcmMoKTsKKyAg
ICAgICAgICAgICAgICBBcmcgcmlnaHQgPSByb3RhdGVbaSArIDFdLnNyYygpOworCisgICAgICAg
ICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21l
LiBSb3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAg
IC8vIE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBh
IGxvdCBvZiByYXJlIHN0dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFw
cGVuIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBU
bXAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0
LCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2Fw
V2lkdGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBv
cmlnaW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRj
aCgwLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdo
dCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIg
OiByb3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0
aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAg
ICAgLy8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0KCksIHBhaXIuZHN0
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdl
IGNhbiB0cmVhdCB0aGlzIGFzIGEgc2hpZnQgc28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRl
c3RpbmF0aW9uIChpLmUuIGZpcnN0CisgICAgICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0
IGZpcnN0LiBUaGVuIHdlIGhhbmRsZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhl
IHJvdGF0ZQorICAgICAgICAgICAgLy8gc3BlY2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBs
YXN0IGRlc3RpbmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAg
ICAgICAgICAvLyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdl
IGhhdmUgYSByb3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWls
YWJsZSByZWdpc3RlciBmaWxlLgorCisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3Nz
aWJsZVNjcmF0Y2goCisgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICBbJl0g
KFRtcCB0bXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWly
IHBhaXIgOiByb3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygp
LnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKS51c2VzVG1wKHRtcCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsKKwor
ICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2Ny
YXRjaGVzWzBdOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoU2h1
ZmZsZVBhaXIocm90YXRlLmxhc3QoKS5kc3QoKSwgcm90YXRlU2F2ZSwgcm90YXRlWzBdLndpZHRo
KCkpLCAxKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLnNpemUoKTsg
aS0tID4gMTspCisgICAgICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZVtpXSwgMSk7
CisKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCBy
b3RhdGVbMF0uZHN0KCksIHJvdGF0ZVswXS53aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlm
IChzY3JhdGNoKQorICAgICAgICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7Cisg
ICAgICAgIH0KKworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
cmVzdWx0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5z
aXplKCk7IGktLTspCisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0p
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAor
ICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJy
YXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRj
aCwKKyAgICBWYWx1ZSogb3JpZ2luKQoreworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZ3BQYWly
czsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZwUGFpcnM7CisgICAgZm9yIChjb25zdCBTaHVm
ZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5
KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgpICYmIHBhaXIud2lkdGgoKSA+IEFyZzo6cG9pbnRl
cldpZHRoKCkpIHsKKyAgICAgICAgICAgIC8vIDgtYnl0ZSBtZW1vcnktdG8tbWVtb3J5IG1vdmVz
IG9uIGEgMzItYml0IHBsYXRmb3JtIGFyZSBiZXN0IGhhbmRsZWQgYXMgZmxvYXQgbW92ZXMuCisg
ICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlIGlmIChwYWly
LnNyYygpLmlzR1AoKSAmJiBwYWlyLmRzdCgpLmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBtZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUg
YXNzdW1wdGlvbiBpcyB0aGF0IHdlCisgICAgICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVm
ZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgor
ICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQocGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJl
c3VsdDsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2Ny
YXRjaCwgQXJnOjpHUCwgb3JpZ2luKSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1
ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFyZzo6RlAsIG9yaWdpbikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJFbWl0U2h1ZmZsZV9oCisjZGVmaW5lIEFpckVtaXRTaHVmZmxlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTaHVmZmxlUGFpciB7Citw
dWJsaWM6CisgICAgU2h1ZmZsZVBhaXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU2h1ZmZs
ZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZHN0LCBBcmc6OldpZHRoIHdpZHRoKQor
ICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAgICAgLCBtX2RzdChkc3QpCisgICAgICAgICwgbV93
aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7
IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0IEFyZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9k
c3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRoZSBraW5kIG9mIG1vdmUgd2Ug
ZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0aDY0IHJpZ2h0IG5vdy4KKyAg
ICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFuZCBNb3ZlLiBGb3IgRlAsIGl0
IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91YmxlLgorICAgIEFyZzo6V2lkdGgg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXJnIG1fc3JjOworICAgIEFyZyBt
X2RzdDsKKyAgICBBcmc6OldpZHRoIG1fd2lkdGggeyBBcmc6OldpZHRoOCB9OworfTsKKworLy8g
UGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUgc2NyYXRjaCBhcmd1bWVudCBp
cyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcworLy8gZm9sbG93czogSWYgeW91IGtu
b3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0ZW1wb3JhcmllcyBhdmFpbGFi
bGUgLSB0aGF0IGlzLCB0aGV5J3JlCisvLyByZWdpc3RlcnMgdGhhdCBhcmUgbm90IG1lbnRpb25l
ZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBzaHVmZmxlLCBhbmQg
YXJlIG5vdAorLy8gbGl2ZSBhdCB0aGUgc2h1ZmZsZSAtIHRoZW4geW91IGNhbiBwYXNzIHRoZW0u
IElmIHlvdSBkb24ndCBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIGF2YWlsYWJsZSBvciBpZgorLy8g
eW91IGRvbid0IGZlZWwgbGlrZSBsb29raW5nIGZvciB0aGVtLCB5b3UgY2FuIHBhc3MgbWVtb3J5
IGxvY2F0aW9ucy4gSXQncyBhbHdheXMgc2FmZSB0byBwYXNzIGEKKy8vIHBhaXIgb2YgbWVtb3J5
IGxvY2F0aW9ucywgYW5kIHJlcGxhY2luZyBlaXRoZXIgbWVtb3J5IGxvY2F0aW9uIHdpdGggYSBy
ZWdpc3RlciBjYW4gYmUgdmlld2VkIGFzIGFuCisvLyBvcHRpbWl6YXRpb24uIEl0J3MgYSBwcmV0
dHkgaW1wb3J0YW50IG9wdGltaXphdGlvbi4gU29tZSBtb3JlIG5vdGVzOgorLy8KKy8vIC0gV2Ug
ZGVmaW5lIHNjcmF0Y2ggcmVnaXN0ZXJzIGFzIHRoaW5ncyB0aGF0IGFyZSBub3QgbGl2ZSBiZWZv
cmUgdGhlIHNodWZmbGUgYW5kIGFyZSBub3Qgb25lIG9mCisvLyAgIHRoZSBkZXN0aW5hdGlvbnMg
b2YgdGhlIHNodWZmbGUuIE5vdCBiZWluZyBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbHNvIG1l
YW5zIHRoYXQgdGhleSBjYW5ub3QKKy8vICAgYmUgdXNlZCAKKy8vCisvLyAtIEEgc2Vjb25kIHNj
cmF0Y2ggbG9jYXRpb24gaXMgb25seSBuZWVkZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJz
IHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgKKy8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlv
bi4KKy8vCisvLyAtIFlvdSdyZSBndWFyYW50ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxv
Y2F0aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8g
ICB0aGUgdHlwZSBhbmQgeW91IGRvbid0IGhhdmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBh
cmUgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWly
cy4gR1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYgd2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4K
Ky8vCisvLyAtIFBhc3NpbmcgbWVtb3J5IGxvY2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5u
aW5nIGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2ls
bHksIHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBlbWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVj
aWZpYyByZWdpc3RlcnMgd2hlbiBpdCBkb2VzIG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kg
d2F5IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1lbnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwg
ZW1pdFNodWZmbGUoKSBhZnRlcgorLy8gICByZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyBy
ZWFzb24gd2UgY291bGQgYWRkIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBk
ZWZlcgorLy8gICBzaHVmZmxpbmdzIHVudGlsIGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1
ZmZsZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBwYWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4g
WW91IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlvdSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5
b3UgbmVlZCB0byBkbyB0aGVtLCB0aGVuIG1ha2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0
ZW1wb3JhcnkgaXMgb25lIHdheSB0bworLy8gICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4K
K1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6
OmFycmF5PEFyZywgMj4gc2NyYXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8g
UGVyZm9ybSBhIHNodWZmbGUgdGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNz
IHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUg
YWNjb3JkaW5nIHRvIHRoZSBydWxlcyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgK
KyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFy
ZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisg
ICAgVmFsdWUqIG9yaWdpbik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1
ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJB
aXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2lu
Y2x1ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBw
cmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwog
ICAgIH0KIAorICAgIGxvd2VyTWFjcm9zKGNvZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3
ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhN
RTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKQEAgLTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9y
R2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAg
ICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1w
bGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5n
cyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMg
dGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTEgKzM4LDExIEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2Rl
IHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNu
J3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3Nl
IHRoaW5ncy4KLXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CiAKIC8vIFRoaXMgZ2VuZXJh
dGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUg
dGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMg
aXQgaXMgZ2VuZXJhdGluZy4KLXZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOwor
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0
cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9yIChj
b25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIGluc3Qp
OworfQorCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0
b3I8SW5zdD4mJiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAg
ICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNl
cnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NDg1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXBwZW5k
SW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CiAg
ICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJ
bnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4m
Jik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQg
aW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWly
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJB
aXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJS
ZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0Fs
bG9jKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dl
ckFmdGVyUmVnQWxsb2MiKTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2Vk
UmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2Fs
YyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVm
ZmxlIHx8IGluc3Qub3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
cmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJl
Z2lzdGVycygpKQorICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQp
OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBnZXRTY3JhdGNoZXMgPSBbJl0gKGNvbnN0
IFJlZ2lzdGVyU2V0JiBzZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywgMj4g
eworICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHJlc3Vs
dFtpXSA9IEFyZzo6c3RhY2soCisgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90
KAorICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdp
ZHRoKHR5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfTsKKworICAgIC8vIE5vdyB0cmFuc2Zvcm0gdGhlIGNvZGUuCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgU2h1ZmZsZTogeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8
U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJn
IHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBp
bnN0LmFyZ3NbaSArIDFdOworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0g
aW5zdC5hcmdzW2kgKyAyXS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlz
UmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHNyYy5yZWcoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+
IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAg
IHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQ
KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3Jh
dGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQ29s
ZENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZVVz
ZWQ7CisgICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUND
YWxsaW5nQ29udmVudGlvbihjb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgVG1wIHJlc3Vs
dCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAg
ICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbcmVzdWx0ID8gKGkgPj0gMSA/IGkgKyAxIDog
aSkgOiBpIF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBkZXN0aW5hdGlvbnNbaV07
CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1
ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmMu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZVVzZWQuc2V0KHNyYy5yZWcoKSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+
IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkdQKTsKKyAgICAgICAgICAg
ICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQs
IEFyZzo6RlApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHJlZ3NUb1NhdmUgPSB1c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisKKyAgICAgICAgICAgICAg
ICAvLyBBbHNvIG5lZWQgdG8gc2F2ZSBhbGwgbGl2ZSByZWdpc3RlcnMuIERvbid0IG5lZWQgdG8g
d29ycnkgYWJvdXQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyLgorICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
Y2xlYXIocmVzdWx0LnJlZygpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKKyAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lk
dGgoYXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNr
U2xvdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJn
OjpieXRlcyh3aWR0aCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNr
U2xvdCksIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVu
ZChzdGFja1Nsb3QpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAg
ICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNo
LCBpbnN0Lm9yaWdpbikpOworCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29k
ZSwgaW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgbmVlZCB0byBlbWl0IGNvZGUgdG8gcmVzdG9yZSByZWdpc3RlcnMuCisgICAgICAgICAgICAg
ICAgcGFpcnMucmVzaXplKDApOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2xvdElu
ZGV4ID0gMDsKKyAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRt
cChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgo
YXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IHN0YWNrU2xvdHNbc3RhY2tTbG90SW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoQXJnOjpzdGFjayhzdGFja1Nsb3QpLCBhcmcsIHdp
ZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpcihyZXN1bHQsIGluc3Qu
YXJnc1sxXSwgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLnNl
dChyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdwU2Ny
YXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAg
ICBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpGUCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAg
ICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3Jh
dGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAor
I2RlZmluZSBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBD
b2RlOworCisvLyBUaGlzIGxvd2VycyBTaHVmZmxlIGFuZCBDb2xkQ0NhbGwgaW5zdHJ1Y3Rpb25z
LiBUaGlzIHBoYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBhZnRlciByZWdpc3RlcgorLy8gYWxs
b2NhdGlvbi4KKwordm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9u
LmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
I2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBs
b3dlck1hY3JvcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAibG93ZXJNYWNyb3MiKTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisg
ICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIENDYWxs
OiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8
Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9u
cyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFsdWUpOworCisgICAgICAgICAg
ICAgICAgSW5zdCBzaHVmZmxlQXJndW1lbnRzKFNodWZmbGUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVzdGluYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChp
bnN0LmFyZ3Nbb2Zmc2V0ICsgaV0pOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1l
bnRzLmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3aWR0aEFyZyhBcmc6OndpZHRoRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRJbnN0KGluc3RJbmRleCwgV1RGTW92ZShzaHVmZmxlQXJndW1l
bnRzKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IHdlJ3JlIHVzaW5nIG91
ciBvcmlnaW5hbCBjYWxsZWUgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25z
WzBdID0gaW5zdC5hcmdzWzBdOworCisgICAgICAgICAgICAgICAgLy8gU2F2ZSB3aGVyZSB0aGUg
b3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcHV0IGl0cyByZXN1bHQuCisgICAgICAgICAgICAgICAgQXJn
IHJlc3VsdERzdCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IEFyZygpIDogaW5zdC5hcmdzWzFd
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNv
ZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgVG1wIHJl
c3VsdCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbG9hdDoKKyAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRmxvYXQs
IHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmVEb3VibGUsIHZhbHVlLCByZXN1bHQsIHJl
c3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdElu
ZGV4ICsgMSwgTW92ZTMyLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUsIHZhbHVlLCBy
ZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1h
Y3Jvcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlck1hY3Jv
c19oCisjZGVmaW5lIEFpckxvd2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gQWlyIGhhcyBzb21lIG9wY29kZXMgdGhhdCBhcmUgdmVyeSBoaWdoLWxldmVsIGFu
ZCBhcmUgbWVhbnQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgbG93LWxldmVsCisvLyBrbm93bGVk
Z2UgaW4gdGhlIEIzLT5BaXIgbG93ZXJpbmcuIFRoZSBjdXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwu
CisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJN
YWNyb3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw2ICs0MDcsMTQg
QEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgogICAg
IHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKK3g4NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6
MzIKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgorCit4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0
LCBVRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKwogTW92ZTMyIFU6RzozMiwg
WkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRkciwgVG1w
IGFzIGxvYWQzMgpAQCAtNjcyLDcgKzY4MCwxOSBAQCBSZXREb3VibGUgVTpGOjY0IC9yZXR1cm4K
IAogT29wcyAvdGVybWluYWwKIAorIyBBIFNodWZmbGUgaXMgYSBtdWx0aS1zb3VyY2UsIG11bHRp
LWRlc3RpbmF0aW9uIG1vdmUuIEl0IHNpbXVsdGFuZW91c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMg
YXQgb25jZS4KKyMgVGhlIG1vdmVzIGFyZSBzcGVjaWZpZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBk
c3QsIGFuZCB3aWR0aC4gRm9yIGV4YW1wbGUgeW91IGNhbiByZXF1ZXN0IGEgc3dhcCB0aGlzCisj
IHdheToKKyMgICAgIFNodWZmbGUgJXRtcDEsICV0bXAyLCA2NCwgJXRtcDIsICV0bXAxLCA2NAor
Y3VzdG9tIFNodWZmbGUKKwogIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0
Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJh
bmQsCiAjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAor
IyBJbnN0cnVjdGlvbnMgdXNlZCBmb3IgbG93ZXJpbmcgQyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFr
ZSBpdCB0byBBaXIgZ2VuZXJhdGlvbi4gVGhleSBnZXQgbG93ZXJlZCB0bworIyBzb21ldGhpbmcg
ZWxzZSBmaXJzdC4gVGhlIG9yaWdpbiBWYWx1ZSBtdXN0IGJlIGEgQ0NhbGxWYWx1ZS4KK2N1c3Rv
bSBDQ2FsbAorY3VzdG9tIENvbGRDQ2FsbAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0
aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNp
bmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworLy8gV2UgZG9uJ3QgaGF2ZSBhIE5PX1JFVFVSTl9EVUVfVE9fRVhJVCwgbm9yIHNob3VsZCB3
ZS4gVGhhdCdzIHJpZGljdWxvdXMuCitzdGF0aWMgYm9vbCBoaWRkZW5UcnV0aEJlY2F1c2VOb1Jl
dHVybklzU3R1cGlkKCkgeyByZXR1cm4gdHJ1ZTsgfQorCitzdGF0aWMgdm9pZCB1c2FnZSgpCit7
CisgICAgZGF0YUxvZygiVXNhZ2U6IHRlc3RiMyBbPGZpbHRlcj5dXG4iKTsKKyAgICBpZiAoaGlk
ZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpKQorICAgICAgICBleGl0KDEpOworfQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXI7CisKK25hbWVzcGFjZSB7CisKK1N0YXRpY0xvY2sgY3Jhc2hMb2Nr
OworCisvLyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBX
VEYgYXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEh
KHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2soKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1RGUmVwb3J0
QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICN4KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitWTSogdm07
CisKK3N0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUoQjM6OlByb2NlZHVy
ZSYgcHJvYykKK3sKKyAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLmNvZGUoKSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvYy5jb2RlKCksIGppdCk7Cisg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKworICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJ0ZXN0YWlyIGNvbXBpbGF0aW9uIikpLCBwcm9jLnJlbGVhc2VCeXBy
b2R1Y3RzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CitUIGludm9rZShjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9j
YXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihCMzo6UHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIGlu
dm9rZTxUPigqY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRl
c3RTaW1wbGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0g
cHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0MiksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykgPT0gNDIpOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHRhc2tzLmFwcGVuZCggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgWyZdICgpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICBcCisgICAgICAgICAgICAgICAgICAg
IHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coI3Rlc3QgIjogT0shXG4iKTsgICBcCisgICAgICAgICAgICAgICAgfSkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAg
dm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKworICAgIERlcXVlPFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKKworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZd
IChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhZmlsdGVy
IHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9OworCisgICAgUlVOKHRl
c3RTaW1wbGUoKSk7CisKKyAgICBpZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAgICB1c2FnZSgp
OworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVh
ZHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9j
ZXNzb3JDb3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVhZHMuYXBwZW5kKAorICAgICAgICAg
ICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKKyAgICAg
ICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOworICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNr
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MudGFrZUZpcnN0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2stPnJ1
bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOworICAgIH0K
KworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGNyYXNoTG9jay5sb2NrKCk7Cit9
CisKK30gLy8gYW5vbnltb2lzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNfSklUKQor
CitzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCit7CisgICAgZGF0YUxvZygiQjMgSklUIGlz
IG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgY29uc3QgY2hhciogZmlsdGVyID0g
bnVsbHB0cjsKKyAgICBzd2l0Y2ggKGFyZ2MpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMjoKKyAgICAgICAgZmlsdGVyID0gYXJndlsxXTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIHJ1bihmaWx0ZXIpOworICAgIHJldHVybiAwOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268841</attachid>
            <date>2016-01-12 19:25:47 -0800</date>
            <delta_ts>2016-01-13 12:36:43 -0800</delta_ts>
            <desc>it compiled its first shuffle!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110212</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDE1IEBAIGlu
bGluZSBib29sIGlzWDg2XzY0KCkKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBpc0lPUygpCit7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKwogaW5saW5lIGJvb2wgb3B0aW1pemVGb3JBUk12N0lESVZTdXBw
b3J0ZWQoKQogewogICAgIHJldHVybiBpc0FSTXY3SURJVlN1cHBvcnRlZCgpICYmIE9wdGlvbnM6
OnVzZUFyY2hpdGVjdHVyZVNwZWNpZmljT3B0aW1pemF0aW9ucygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDExLDYg
KzE0MTEsMTYgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCisgICAgdm9pZCBzd2FwMzIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnhjaGdsX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzd2FwMzIoUmVnaXN0ZXJJ
RCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3Jt
KHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlQ29u
ZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdodCwgbGVmdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1NSw2ICs2NTUsMTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCisg
ICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQor
CiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNyYywgZGVzdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MzEsNiArMTQzMSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4Y2hnbF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKwogI2lmIENQVShYODZfNjQp
CiAgICAgdm9pZCB4Y2hncV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewpAQCAtMTQ0MSw2ICsxNDQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENIR19Fdkd2LCBzcmMsIGRzdCk7CiAgICAg
fQorCisgICAgdm9pZCB4Y2hncV9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfWENI
R19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIG1v
dmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCwxMSBAQCBDQ2FsbFZhbHVlOjp+Q0NhbGxWYWx1ZSgpCiB7CiB9CiAKK3ZvaWQgQ0Nh
bGxWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoY29tbWEsICJpc1dhcm0gPSAiLCBpc1dhcm0pOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDEyIEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVlKCk7CiAK
LSAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0czo6Zm9y
Q2FsbCgpIH07CisKKyAgICBib29sIGlzV2FybSB7IHRydWUgfTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwpAQCAtNDcsNyArNTIs
NiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBD
Q2FsbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCiAgICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUs
IENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKLSAgICAgICAgLCBlZmZlY3RzKEVm
ZmVjdHM6OmZvckNhbGwoKSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxk
cmVuKCkgPj0gMSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMiBAQCBD
b21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9ieXByb2R1Y3Rz
ID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6Q29tcGlsYXRp
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVC
eXByb2R1Y3RzPiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCisgICAgLCBt
X2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGlsYXRpb246On5D
b21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENv
bXBpbGF0aW9uIHsKIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9u
KFZNJiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMg
Y29uc3RydWN0b3IgYWxsb3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4g
SXQncyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBi
ZXN0IHRvIGtlZXAgaXQgdGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRp
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0
cz4pOworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29k
ZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDEsMzcgKzE1NDEsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaW52ZXJ0ZWQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJ
bmZvPgotICAgIEFyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQodW5zaWduZWQmIGFyZ3VtZW50Q291
bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKLSAgICAgICAgaWYgKGFy
Z3VtZW50SW5kZXggPCBCYW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgewotICAg
ICAgICAgICAgVG1wIHJlc3VsdCA9IFRtcChCYW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFy
Z3VtZW50SW5kZXgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY2hp
bGQtPnR5cGUoKSksIGltbU9yVG1wKGNoaWxkKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLQotI2lmIENQVShBUk02NCkgJiYgUExBVEZPUk0oSU9TKQot
ICAgICAgICAvLyBpT1MgZG9lcyBub3QgZm9sbG93IHRoZSBBUk02NCBBQkkgcmVnYXJkaW5nIGZ1
bmN0aW9uIGNhbGxzLgotICAgICAgICAvLyBBcmd1bWVudHMgbXVzdCBiZSBwYWNrZWQuCi0gICAg
ICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKLSAgICAg
ICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNr
T2Zmc2V0KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mKHZvaWQq
KTsKLSNlbmRpZgotICAgICAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0
KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7Ci0gICAgICAgIAotICAgICAgICAv
LyBQdXQgdGhlIGNvZGUgZm9yIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGJlZm9yZSBhbnl0aGluZyBl
bHNlLiBUaGlzIHNpZ25pZmljYW50bHkgZWFzZXMgdGhlCi0gICAgICAgIC8vIGJ1cmRlbiBvbiB0
aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBJZiB3ZSBjb3VsZCwgd2UnZCBob2lzdCB0aGVzZSBzdG9y
ZXMgYXMgZmFyIGFzCi0gICAgICAgIC8vIHBvc3NpYmxlLgotICAgICAgICAvLyBGSVhNRTogQWRk
IGEgcGhhc2UgdG8gaG9pc3Qgc3RvcmVzIGFzIGhpZ2ggYXMgcG9zc2libGUgdG8gcmVsaWV2ZSBy
ZWdpc3RlciBwcmVzc3VyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MTA2MwotICAgICAgICBtX2luc3RzLmxhc3QoKS5pbnNlcnQoMCwgY3Jl
YXRlU3RvcmUoY2hpbGQsIHJlc3VsdCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92
YWx1ZS0+b3Bjb2RlKCkpIHsKQEAgLTE5MTksMTQgKzE4ODgsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAg
ICBjYXNlIEIzOjpDQ2FsbDogewogICAgICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3Zh
bHVlLT5hczxDQ2FsbFZhbHVlPigpOwotICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2Fs
bCwgQXJnOjpzcGVjaWFsKG1fY29kZS5jQ2FsbFNwZWNpYWwoKSkpOwotCi0gICAgICAgICAgICAv
LyBUaGlzIGlzIGEgYml0IHdlaXJkIC0gd2UgaGF2ZSBhIHN1cGVyIGludGVuc2UgY29udHJhY3Qg
d2l0aCBBcmc6OkNDYWxsU3BlY2lhbC4gSXQgbWlnaHQKLSAgICAgICAgICAgIC8vIGJlIGJldHRl
ciBpZiB3ZSBmYWN0b3JlZCBBaXI6OkNDYWxsU3BlY2lhbCBvdXQgb2YgdGhlIEFpciBuYW1lc3Bh
Y2UgYW5kIG1hZGUgaXQgYSBCMwotICAgICAgICAgICAgLy8gdGhpbmcuCi0gICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA0NQor
ICAgICAgICAgICAgSW5zdCBpbnN0KGNDYWxsLT5pc1dhcm0gPyBBaXI6OkNDYWxsIDogQWlyOjpD
b2xkQ0NhbGwsIGNDYWxsKTsKIAogICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHRvbiBvZiBmbGV4
aWJpbGl0eSByZWdhcmRpbmcgdGhlIGNhbGxlZSBhcmd1bWVudCwgYnV0IGN1cnJlbnRseSwgd2Ug
ZG9uJ3QKICAgICAgICAgICAgIC8vIHVzZSBpdCB5ZXQuIEl0IGdldHMgd2VpcmQgZm9yIHJlYXNv
bnM6CkBAIC0xOTM5LDQ4ICsxOTAzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA1MgogICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0NhbGwtPmNoaWxkKDApKSk7CiAKLSAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gdGVsbCBBaXIgd2hhdCByZWdpc3RlcnMgdGhpcyBkZWZpbmVzLgot
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKLSAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSMikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpKTsKLQotICAgICAgICAgICAgLy8gTm93IG1hcnNoYWxsIHRoZSBhcmd1bWVudHMu
IFRoaXMgaXMgd2hlcmUgd2UgaW1wbGVtZW50IHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQWZ0
ZXIKLSAgICAgICAgICAgIC8vIHRoaXMsIEFpciBkb2VzIG5vdCBrbm93IHdoYXQgdGhlIGNvbnZl
bnRpb24gaXM7IGl0IGp1c3QgdGFrZXMgb3VyIHdvcmQgZm9yIGl0LgotICAgICAgICAgICAgdW5z
aWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZwQXJndW1l
bnRDb3VudCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBhcmdDaGlsZCA9IGNDYWxsLT5jaGlsZChpKTsK
LSAgICAgICAgICAgICAgICBBcmcgYXJnOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGFyZ0NoaWxkLT50eXBlKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJz
aGFsbENDYWxsQXJndW1lbnQ8R1BSSW5mbz4oZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwg
YXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChj
Q2FsbC0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0
bXAoY0NhbGwpKTsKIAotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpGUDoKLSAgICAgICAgICAg
ICAgICAgICAgYXJnID0gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50PEZQUkluZm8+KGZwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQsIGFyZ0NoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGNDYWxsLT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKIAotICAgICAgICAgICAgICAgIGlmIChh
cmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5h
cHBlbmQoV1RGTW92ZShpbnN0KSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY0NhbGwtPnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIHRtcChjQ2Fs
bCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGbG9hdDoKLSAg
ICAgICAgICAgIGNhc2UgRG91YmxlOgotICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91Ymxl
LCBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpLCB0bXAoY0NhbGwpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0
cy5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgT3Bh
cXVlQnlwcm9kdWN0cyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgT3BhcXVlQnlwcm9kdWN0cygpOwotICAgIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKIAogICAgIHNpemVfdCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnlwcm9kdWN0cy5zaXplKCk7IH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24g
MTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDIxICsyMDAsMTQgQEAgYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgIGNhc2UgQXJnOjpUbXA6CiAgICAgY2FzZSBBcmc6
OkltbToKICAgICBjYXNlIEFyZzo6SW1tNjQ6Ci0gICAgY2FzZSBBcmc6OlN0YWNrOgotICAgIGNh
c2UgQXJnOjpDYWxsQXJnOgotICAgICAgICBicmVhazsgLy8gT0sKLSAgICBjYXNlIEFyZzo6QWRk
cjoKLSAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKQotICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIz
VHlwZSh2YWx1ZS0+dHlwZSgpKTsKIAotICAgIHJldHVybiBhcmcuaXNUeXBlKHR5cGUpOworICAg
IHJldHVybiBhcmcuY2FuUmVwcmVzZW50KHZhbHVlKTsKIH0KIAogYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6OkFyZyYgYXJn
LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwyNiBAQAogCiAjaW5j
bHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wg
QXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6OlRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3RhY2s6CisgICAg
Y2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNlbnRhYmxlQXMo
V2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAgICBzd2l0Y2gg
KHNpZ25lZG5lc3MpIHsKQEAgLTYxLDYgKzc4LDIyIEBAIGJvb2wgQXJnOjppc1JlcHJlc2VudGFi
bGVBcyhXaWR0aCB3aWR0aCwKICAgICB9CiB9CiAKK2Jvb2wgQXJnOjp1c2VzVG1wKEFpcjo6VG1w
IHRtcCkgY29uc3QKK3sKKyAgICBib29sIHVzZXMgPSBmYWxzZTsKKyAgICBjb25zdF9jYXN0PEFy
Zyo+KHRoaXMpLT5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgWyZdIChBaXI6OlRtcCBvdGhlclRt
cCkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wID09IHRtcCkKKyAgICAgICAgICAgICAgICB1
c2VzID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHVzZXM7Cit9CisKK2Jvb2wgQXJn
OjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBpc1R5cGUo
dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Cit9CisKIHZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTExMSw2ICsx
NDQsOSBAQCB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGNhc2Ug
U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBXaWR0aEFyZzoKKyAgICAgICAgb3V0LnByaW50KHdpZHRo
KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE2MSw2ICsxOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgi
U3BlY2lhbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OldpZHRoQXJnOgorICAg
ICAgICBvdXQucHJpbnQoIldpZHRoQXJnIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI1LDE2ICsyNjQsMTYgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogewogICAgIHN3aXRjaCAod2lk
dGgpIHsKICAgICBjYXNlIEFyZzo6V2lkdGg4OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIp
OworICAgICAgICBvdXQucHJpbnQoIjgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDE2OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoMTYiKTsKKyAgICAgICAgb3V0LnBy
aW50KCIxNiIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMzI6Ci0gICAg
ICAgIG91dC5wcmludCgiV2lkdGgzMiIpOworICAgICAgICBvdXQucHJpbnQoIjMyIik7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKLSAgICAgICAgb3V0LnByaW50KCJX
aWR0aDY0Iik7CisgICAgICAgIG91dC5wcmludCgiNjQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAx
OTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7
CisKK25hbWVzcGFjZSBBaXIgewogCiBjbGFzcyBTcGVjaWFsOwogY2xhc3MgU3RhY2tTbG90OwpA
QCAtNjksNyArNzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0Nv
bmQsCiAgICAgICAgIERvdWJsZUNvbmQsCi0gICAgICAgIFNwZWNpYWwKKyAgICAgICAgU3BlY2lh
bCwKKyAgICAgICAgV2lkdGhBcmcKICAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsK
QEAgLTE1Niw2ICsxNjEsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bVR5cGVzID0gMjsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaFR5cGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZ1bmN0b3IoR1ApOworICAgICAgICBmdW5jdG9yKEZQKTsKKyAgICB9CisKICAgICBlbnVt
IFdpZHRoIDogaW50OF90IHsKICAgICAgICAgV2lkdGg4LAogICAgICAgICBXaWR0aDE2LApAQCAt
MjIwLDYgKzIzMiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAm
JiAhaXNDb2xkVXNlKHJvbGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBSb2xlIGNvb2xlZChSb2xl
IHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBDb2xk
VXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAg
ICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVm
OgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAg
Y2FzZSBFYXJseURlZjoKKyAgICAgICAgICAgIHJldHVybiByb2xlOworICAgICAgICBjYXNlIFVz
ZToKKyAgICAgICAgICAgIHJldHVybiBDb2xkVXNlOworICAgICAgICBjYXNlIExhdGVVc2U6Cisg
ICAgICAgICAgICByZXR1cm4gTGF0ZUNvbGRVc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNl
IHRoZSBBcmcgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNF
YXJseVVzZShSb2xlIHJvbGUpCiAgICAgewpAQCAtNTQ5LDYgKzU4MSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyB3aWR0aEFyZyhX
aWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gd2lkdGg7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFy
ZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIu
bV9vZmZzZXQKQEAgLTU4NSw2ICs2MjUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2lu
ZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wgaXNTb21lSW1tKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1tNjQoKTsKKyAgICB9CisKICAgICBib29s
IGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CkBA
IC02MDUsNiArNjUwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRl
eDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoK
KyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzU3RhY2tNZW1vcnkoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkg
PT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs2OTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
a2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAgYm9vbCBpc1dpZHRoQXJnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gV2lkdGhBcmc7CisgICAgfQorCiAgICAg
Ym9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlz
U3RhY2soKTsKQEAgLTY4MCwxOCArNzQ1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9i
YXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQWRkcjoKLSAgICAgICAgY2FzZSBTdGFj
azoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAgICBjYXNlIEluZGV4OgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAogICAgIHsK
QEAgLTczMCw2ICs3ODQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFdpZHRoQXJnKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNldCk7CisgICAgfQorCiAgICAgYm9vbCBp
c0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1AoKTsKQEAgLTc1NCw2ICs4MTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoK
ICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAg
IGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBU
bXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwpAQCAtNzcxLDYgKzgzMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAg
ICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgY2Fz
ZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFkZHI6
CkBAIC04MTIsNiArODc0LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9v
bCBjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKwogICAgIGJvb2wgaXNHUFIoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAg
LTk1Myw2ICsxMDE3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAg
IGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdp
ZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC05
NzQsNiArMTAzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNl
c1RtcChBaXI6OlRtcCB0bXApIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2gg
dG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwg
dXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhp
czoKICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVj
aWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbCh1bnNpZ25lZCYgYXJndW1l
bnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgdW5z
aWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKKyAgICBpZiAoYXJndW1lbnRJ
bmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKQorICAgICAgICByZXR1
cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOworCisg
ICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlzQVJNNjQoKSAmJiBpc0lPUygpKSB7Cisg
ICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgorICAgICAgICBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQXJndW1lbnRz
IGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9IDg7CisgICAgfQorCisgICAgc3RhY2tP
ZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsK
KyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0KTsKKyAgICBzdGFja09m
ZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcmcgbWFyc2hhbGxD
Q2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBm
cEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQorewor
ICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSB7CisgICAgY2Fz
ZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxHUFJJ
bmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6
OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxGUFJJbmZvPihm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFyZygpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihD
b2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8QXJnPiByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVjaWFsOjpzY3JhdGNoUmVnaXN0ZXIpKTsK
KyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGZwQXJndW1l
bnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFsbENDYWxsQXJndW1lbnQoZ3BBcmd1bWVu
dENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB2YWx1ZS0+Y2hpbGQoaSkpKTsK
KyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICBjYXNl
IEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVybiBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxvYXQ6CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRtcCgpOworfQorCitJbnN0IGJ1
aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPEFyZz4mIGFy
Z3VtZW50cykKK3sKKyAgICBJbnN0IGluc3QoUGF0Y2gsIG9yaWdpbiwgQXJnOjpzcGVjaWFsKGNv
ZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZ3VtZW50c1swXSk7
CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJn
IGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQorICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgIH0KKyAgICByZXR1cm4gaW5zdDsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZl
bnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNkZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50
aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxWYWx1
ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK1ZlY3RvcjxBcmc+IGNvbXB1
dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxsVmFsdWUqKTsKKworVG1wIGNDYWxsUmVz
dWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYsIFZhbHVlKiBvcmlnaW4sIGNvbnN0
IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25f
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24g
MTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2MoKSB7
IHJldHVybiBtX3Byb2M7IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kgPSAxKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9u
IHN0YWNrIHNsb3RzIGFsd2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4g
dGhlIGluZGV4CiAgICAgLy8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBz
dGFjayBzbG90cyB5b3UgY3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0
b20uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKElu
c3QmIGluc3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0Nh
bGxWYWx1ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSAxICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAg
OiAxKSArIHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3Ig
aW1tZWRpYXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlm
ICghYXJnLmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0o
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSAxOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUg
YW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAg
aWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUq
IGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29m
ZnNldCArIGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2Fs
bEhlbHBlcnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVs
cGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dl
cmVkIEMgY2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVD
dXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgJSAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1h
eSBvbmx5IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0
aGUgdW5kZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhh
dCBpcyBzdXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBh
bHNvCisgICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAi
c2hhcGUiIG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8v
IGFzIGFuIGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGlu
YXRpb24gcmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNv
bnNpc3RzIG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5u
aW5nIHRyZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMg
YSBzZXF1ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFs
bHkgcmVxdWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxv
b3BzLiBUaGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29y
IGFuZCBvbmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdl
dCBpbnRvIiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRl
ZCB1c2luZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBh
IHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hT
ZXQ8QXJnPiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICB1
bnNpZ25lZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAg
ICAgICAgLy8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJn
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUu
CisgICAgICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3
RW50cnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGFyZy5pc1RtcCgpIHx8IGFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0
JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxv
ZygiRkFUQUw6IFVubG93ZXJlZCBzaHVmZmxlOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5z
dC5oIgogI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiAr
NTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3Ug
bmVlZCB0byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFs
c28sIFNwZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2Rl
JiBldmVuIGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAK
Ky8vIERlZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVs
ZWdhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwg
b2JqZWN0LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rp
b24uCiBzdHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQpAQCAtOTYsNiArOTksMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQog
fTsKIAorLy8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBm
b3IgaG90IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNo
IHdpdGggYW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0
cnVjdGlvbnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2Nh
dGlvbiwgc28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgor
c3RydWN0IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsr
XSwgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAg
ICAgICAgCisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAg
IGZ1bmN0b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwK
KyAgICAgICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAg
ICAgICAgICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwg
QXJnOjpVc2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
Rm9ybShJbnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWdu
ZWQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBl
Y3QgQyBjYWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFj
aEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAg
ICAgQ0NhbGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6Oldp
ZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJv
bGUpLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
U2h1ZmZsZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAg
ICAgICAgIEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0
ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFy
Z3NbaSArIDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRo
KCk7CisgICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1Ao
KSA/IEFyZzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNl
LCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUs
IHdpZHRoKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQ
LCBBcmc6OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1l
bnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNT
dGFjayhJbnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4
ICUgMykgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVm
ZmVjdHMoSW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwg
R2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVX
b3JrbGlzdC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmlu
ZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcikg
eworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAg
ICAgVG1wIHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAgICAgICAg
cmV0dXJuIHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3Np
YmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFy
ZzIpIHsKKyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAg
ICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51
c2VzVG1wKHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+
IiwgZHN0KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNo
dWZmbGVQYWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBl
IHR5cGUsIFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhh
dCB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYg
cGFpciA6IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzVHlwZSh0eXBlKSk7
CisgICAgICAgIEFTU0VSVChwYWlyLmRzdCgpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VS
VChwYWlyLmRzdCgpLmlzVG1wKCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKTsKKyAgICB9CisK
KyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3
ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9
PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSBy
ZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+
bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0aGVzZSBhcworICAgIC8v
ICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNh
biBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9uZWQKKyAgICAvLyAgIG11bHRpcGxlIHRp
bWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIgPT4gZCwgYiA9PiBlKS4KKyAgICAvLwor
ICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVt
aXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1h
eSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCBy
ZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGll
ciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBh
cyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhh
cyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisgICAgLy8KKyAgICAvLyBX
ZSB3aWxsIGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhl
Y3V0ZSB0aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBN
b3ZlcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtl
eWVkIGJ5IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNlLgorICAgIEhhc2hNYXA8QXJnLCBW
ZWN0b3I8U2h1ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2Ug
YXMgU3dhcHMgb3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywg
aS5lLiBmb3IgYSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3Rb
MV0uc3JjKCksIGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMo
KSIuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdp
ZHRocyBkb24ndCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICBWZWN0b3I8
VmVjdG9yPFNodWZmbGVQYWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxB
cmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3QgU2h1
ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIuc3Jj
KCksIFZlY3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChwYWlyKTsK
KworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAgICAgICBH
cmFwaE5vZGVXb3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAgICAgICB3aGlsZSAoIW1hcHBpbmcu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBtYXBwaW5nLmJlZ2lu
KCktPmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5zKG9yaWdpbmFsU3Jj
KSk7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3JjKTsKKyAgICAgICAgICAg
IHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNo
TWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBwaW5nLmZp
bmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ug
cHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5z
cmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHBhaXIuZHN0
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWly
c1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50UGFp
cnMubGFzdCgpLmRzdCgpID09IGN1cnJlbnRQYWlyc1swXS5zcmMoKSkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBncmFwaCBzZWFyY2ggdGVybWluYXRlcyBiZWNhdXNlIHdlIHJldHVybmVk
IHRvIHRoZSBmaXJzdCBzb3VyY2UsIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gcGFpciBs
aXN0IGhhcyB0byBoYXZlIGEgdmVyeSBwYXJ0aWN1bGFyIHNoYXBlLgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnRQYWlycy5zaXplKCkgLSAxOyBpLS07KQorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzW2ldLmRzdCgpID09IGN1cnJlbnRQYWly
c1tpICsgMV0uc3JjKCkpOworICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5kKGN1cnJlbnRQ
YWlycyk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzaGlmdHMuYWRkKG9y
aWdpbmFsU3JjLCBjdXJyZW50UGFpcnMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW4g
dGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUgd2F5IHdl
IGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcworICAgIC8vIHVzIHdoYXQgc2NyYXRj
aCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBhcm91bmQuIFdlIHdpbGwgbmVl
ZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAg
Ly8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBzcmMgYW5kIGRzdCByZWZlciB0
byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2FwIGluc3RydWN0aW9uIGlzIGF2
YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5IGZvciB1cywgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1lIHdlIGhhdmUgYSBTaGlmdCB0
aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNlYXJjaCBmb3Igc3VjaCBhIHJl
Z2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8gbW92ZUZvcldpZHRoID0gWyZdIChBcmc6Oldp
ZHRoIHdpZHRoKSAtPiBPcGNvZGUgeworICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/
IE1vdmUzMiA6IE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAg
ICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZvcldp
ZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworCisgICAgLy8gV2Ugd2lsbCBlbWl0
IHRoaW5ncyBpbiByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFja3Mgb2YgaW5zdHJ1
Y3Rpb25zLCBhbmQgdGhlbiB3ZSBlbWl0CisgICAgLy8gYXBwZW5kIHRoZW0gdG9nZXRoZXIgaW4g
cmV2ZXJzZSAoZm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2YgcmVzdWx0UGFja3Mg
aXMgcGxhY2VkCisgICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSBsYXN0
IHRoaW5nIHdlIGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgc28KKyAg
ICAvLyBpdCBhZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQuCisgICAgVmVjdG9y
PFZlY3RvcjxJbnN0Pj4gcmVzdWx0UGFja3M7CisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKwor
ICAgIGF1dG8gY29tbWl0UmVzdWx0ID0gWyZdICgpIHsKKyAgICAgICAgcmVzdWx0UGFja3MuYXBw
ZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgfTsKKworICAgIGF1dG8gZ2V0U2NyYXRjaCA9IFsm
XSAodW5zaWduZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRtcCB7CisgICAgICAg
IGlmIChzY3JhdGNoZXNbaW5kZXhdLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gc2NyYXRj
aGVzW2luZGV4XS50bXAoKTsKKworICAgICAgICBpZiAoIXBvc3NpYmxlU2NyYXRjaCkKKyAgICAg
ICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZh
dGl2ZU1vdmUsIG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNbaW5kZXhdKSk7Cisg
ICAgICAgIHJldHVybiBwb3NzaWJsZVNjcmF0Y2g7CisgICAgfTsKKworICAgIGF1dG8gcmV0dXJu
U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXApIHsKKyAgICAgICAgaWYgKEFy
Zyh0bXApICE9IHNjcmF0Y2hlc1tpbmRleF0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKElu
c3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhdLCB0bXApKTsKKyAg
ICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0IFNodWZmbGVQYWly
JiBwYWlyLCB1bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAgICAgT3Bjb2RlIG1vdmUgPSBt
b3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0KCkua2luZCgpKSkgeworICAg
ICAgICAgICAgVG1wIHNjcmF0Y2ggPQorICAgICAgICAgICAgICAgIGdldFNjcmF0Y2goc2NyYXRj
aEluZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBBcmc6OlRtcCkpCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBv
cmlnaW4sIHBhaXIuc3JjKCksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzU29tZUltbSgpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobW92ZSA9PSBNb3ZlMzIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
SW5zdChNb3ZlLCBvcmlnaW4sIEFyZzo6aW1tNjQocGFpci5zcmMoKS52YWx1ZSgpKSwgc2NyYXRj
aCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVG
b3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIuZHN0KCkpKTsKKyAg
ICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KG1vdmUsIG9yaWdpbiwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgIH07CisKKyAg
ICBhdXRvIGhhbmRsZVNoaWZ0ID0gWyZdIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXplKCk7IGktLTspCisgICAgICAgICAg
ICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisgICAgICAgIEFyZyBsYXN0RHN0ID0g
c2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFzdERzdC5pc1RtcCgpKSB7CisgICAg
ICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hlcykgeworICAgICAgICAgICAgICAg
IEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAgICAgICAgICAgIGlmICghc2NyYXRj
aC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBsYXN0RHN0OworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0cyB3aG9zZSBs
YXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBzY3JhdGNoIHJl
Z2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwgc2VxdWVuY2Us
IHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBiZQorICAgIC8v
IGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVtaXR0ZWQgcHJp
b3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyByZXZlcnNlKS4K
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAgICAgIFZlY3RvcjxTaHVmZmxl
UGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmIChzaGlmdC5sYXN0KCkuZHN0
KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29t
bWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUg
c2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAgICAgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYgKCFzaGlmdC5s
YXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAg
ICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8U2h1ZmZsZVBh
aXI+JiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGJvb2wgY2FuU3dhcCA9IGZhbHNlOwor
ICAgICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIEFyZzo6V2lkdGggc3dhcFdpZHRo
ID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3VzIHZhbHVlCisgICAgICAgIAorICAgICAgICBpZiAodHlw
ZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICBzd2FwID0gU3dhcDMyOworICAgICAgICAgICAg
c3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYg
cGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFpci53aWR0aCgpKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAg
ICAgICAgICBzd2FwID0gU3dhcDY0OworICAgICAgICAgICAgICAgICAgICBzd2FwV2lkdGggPSBB
cmc6OldpZHRoNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FuU3dhcCA9IGlzVmFsaWRGb3Jt
KHN3YXAsIEFyZzo6VG1wLCBBcmc6OlRtcCk7CisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWly
JiBwYWlyIDogcm90YXRlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1v
cnkoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fu
U3dhcCAmPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpBZGRyKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2FwcGluZyBwYXRoIGlmIHRoZXJl
IGlzIGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gc2h1ZmZsZXMgaW52b2x2ZSBtZW1vcnkuIFRoYXQgZ2V0cyB0b28gY29uZnVzaW5nLgorICAg
ICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRoKCkgPCBzd2FwV2lkdGgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6ZSgp
IC0gMTsgaS0tOykgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0ID0gcm90YXRlW2ldLnNyYygp
OworICAgICAgICAgICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZVtpICsgMV0uc3JjKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91
dGNvbWUuIFJvdGF0ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gTW92aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBo
ZXJlIGEgbG90IG9mIHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFs
bCBoYXBwZW4gYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUs
IGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0
Y2gpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRo
KHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0
aCksIG9yaWdpbiwgc2NyYXRjaCwgbGVmdCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5T
Y3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIg
cGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLndpZHRoKCkgPT0gc3dh
cFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6OldpZHRoMzIpOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6OldpZHRoNjQpOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9uLgorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdpbiwgcGFpci5kc3QoKSwgcGFp
ci5kc3QoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gV2UgY2FuIHRyZWF0IHRoaXMgYXMgYSBzaGlmdCBzbyBsb25nIGFzIHdlIHRha2UgdGhlIGxh
c3QgZGVzdGluYXRpb24gKGkuZS4gZmlyc3QKKyAgICAgICAgICAgIC8vIHNvdXJjZSkgYW5kIHNh
dmUgaXQgZmlyc3QuIFRoZW4gd2UgaGFuZGxlIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgcGFpciBp
biB0aGUgcm90YXRlCisgICAgICAgICAgICAvLyBzcGVjaWFsbHksIGFmdGVyIHdlIHJlc3RvcmUg
dGhlIGxhc3QgZGVzdGluYXRpb24uIFRoaXMgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhcmUgdG8K
KyAgICAgICAgICAgIC8vIGZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBJdCdzIHBvc3NpYmxlIHRo
YXQgd2UgaGF2ZSBhIHJvdGF0ZSB0aGF0IHVzZXMgdGhlIGVudGlyZQorICAgICAgICAgICAgLy8g
YXZhaWxhYmxlIHJlZ2lzdGVyIGZpbGUuCisKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZmlu
ZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAg
IFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU2h1ZmZs
ZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIu
c3JjKCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpLnVzZXNUbXAodG1w
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRTY3JhdGNoKDAsIHNjcmF0Y2gp
OworCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2ZSA9IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkg
OiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFp
cihTaHVmZmxlUGFpcihyb3RhdGUubGFzdCgpLmRzdCgpLCByb3RhdGVTYXZlLCByb3RhdGVbMF0u
d2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUuc2l6
ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRlW2ld
LCAxKTsKKworICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKFNodWZmbGVQYWlyKHJvdGF0ZVNh
dmUsIHJvdGF0ZVswXS5kc3QoKSwgcm90YXRlWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAg
ICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFT
U0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBh
Y2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNr
c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZm
bGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3Rk
OjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBT
Y3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pCit7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBn
cFBhaXJzOworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnBQYWlyczsKKyAgICBmb3IgKGNvbnN0
IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNN
ZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkgJiYgcGFpci53aWR0aCgpID4gQXJnOjpw
b2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkg
bW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJlIGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zl
cy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYg
KHBhaXIuc3JjKCkuaXNHUCgpICYmIHBhaXIuZHN0KCkuaXNHUCgpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMu
IFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1v
cmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJv
dmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5z
dD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywg
Z3BTY3JhdGNoLCBBcmc6OkdQLCBvcmlnaW4pKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVt
aXRTaHVmZmxlKGZwUGFpcnMsIGZwU2NyYXRjaCwgQXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNodWZmbGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWly
IHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
aHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lk
dGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNv
bnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVy
biBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92
ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93
LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBG
UCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgQXJnOjpX
aWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAg
QXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07Cit9Owor
CisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3Vt
ZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5
b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2
YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVu
dGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUs
IGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3Mg
dGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlm
CisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBt
ZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBzYWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBt
ZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0
aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMgYW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBh
IHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9uLiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8g
LSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZl
IGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5vdCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0
aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFs
c28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8gICBiZSB1c2VkIAorLy8KKy8vIC0gQSBzZWNv
bmQgc2NyYXRjaCBsb2NhdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIHlvdSBoYXZlIHNodWZmbGUg
cGFpcnMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYm90aAorLy8gICBhcyBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uLgorLy8KKy8vIC0gWW91J3JlIGd1YXJhbnRlZWQgbm90IHRvIG5lZWQgYW55IHNjcmF0
Y2ggbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEgU3dhcCBpbnN0cnVjdGlvbiBhdmFpbGFibGUgZm9y
CisvLyAgIHRoZSB0eXBlIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhbnkgbWVtb3J5IGxvY2F0aW9ucyB0
aGF0IGFyZSBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5hdGlvbiBvZgorLy8gICBzb21l
IHBhaXJzLiBHUCBzdXBwb3J0cyBTd2FwIG9uIHg4NiB3aGlsZSBGUCBuZXZlciBzdXBwb3J0cyBT
d2FwLgorLy8KKy8vIC0gUGFzc2luZyBtZW1vcnkgbG9jYXRpb25zIGFzIHNjcmF0Y2ggaWYgYXJl
IHJ1bm5pbmcgZW1pdFNodWZmbGUoKSBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcworLy8g
ICBzaWxseSwgc2luY2UgdGhhdCB3aWxsIGNhdXNlIGVtaXRTaHVmZmxlKCkgdG8gcGljayBzb21l
IHNwZWNpZmljIHJlZ2lzdGVycyB3aGVuIGl0IGRvZXMgbmVlZAorLy8gICBzY3JhdGNoLiBPbmUg
ZWFzeSB3YXkgdG8gYXZvaWQgdGhhdCBwcmVkaWNhbWVudCBpcyB0byBlbnN1cmUgdGhhdCB5b3Ug
Y2FsbCBlbWl0U2h1ZmZsZSgpIGFmdGVyCisvLyAgIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciB0
aGlzIHJlYXNvbiB3ZSBjb3VsZCBhZGQgYSBTaHVmZmxlIGluc3RydWN0aW9uIHNvIHRoYXQgd2Ug
Y2FuIGRlZmVyCisvLyAgIHNodWZmbGluZ3MgdW50aWwgYWZ0ZXIgcmVnYWxsb2MuCisvLworLy8g
LSBTaHVmZmxlcyB3aXRoIG1lbW9yeT0+bWVtb3J5IHBhaXJzIGFyZSBub3QgdmVyeSB3ZWxsIHR1
bmVkLiBZb3Ugc2hvdWxkIGF2b2lkIHRoZW0gaWYgeW91IHdhbnQKKy8vICAgcGVyZm9ybWFuY2Uu
IElmIHlvdSBuZWVkIHRvIGRvIHRoZW0sIHRoZW4gbWFraW5nIHN1cmUgdGhhdCB5b3UgcmVzZXJ2
ZSBhIHRlbXBvcmFyeSBpcyBvbmUgd2F5IHRvCisvLyAgIGdldCBhY2NlcHRhYmxlIHBlcmZvcm1h
bmNlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4s
IHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBBcmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOwor
CisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMu
IFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2gg
dHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVm
ZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJy
YXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRj
aCwKKyAgICBWYWx1ZSogb3JpZ2luKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJBaXJH
ZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAj
aW5jbHVkZSAiQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCIKKyNpbmNsdWRlICJBaXJM
b3dlckFmdGVyUmVnQWxsb2MuaCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1
ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgi
CiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgpAQCAtNjUsNiArNjcsOCBAQCB2
b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAgIGRhdGFMb2coY29k
ZSk7CiAgICAgfQogCisgICAgbG93ZXJNYWNyb3MoY29kZSk7CisKICAgICAvLyBUaGlzIGlzIHdo
ZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgogICAgIC8v
IEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgpAQCAtODAsNiArODQsOCBAQCB2b2lkIHByZXBh
cmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgZWxzZQogICAgICAgICBpdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAorICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsK
KwogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBp
cyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbwogICAgIC8vIGRvZXMg
dGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBz
YXZlcyB0aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMTk0ODU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMSArMzgsMTEgQEAgY2xhc3MgQ29kZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6
OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5
IGhhc24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2Yg
dGhvc2UgdGhpbmdzLgotdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CitKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKIAogLy8gVGhpcyBn
ZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4g
Tm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29k
ZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgotdm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJz
Jik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMm
KTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAx
OTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordm9pZCBJbnNlcnRpb25TZXQ6Omluc2Vy
dEluc3RzKHNpemVfdCBpbmRleCwgY29uc3QgVmVjdG9yPEluc3Q+JiBpbnN0cykKK3sKKyAgICBm
b3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwg
aW5zdCk7Cit9CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgs
IFZlY3RvcjxJbnN0PiYmIGluc3RzKQoreworICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzKQor
ICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBXVEZNb3ZlKGluc3QpKTsKK30KKwogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBh
cHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkp
KTsKICAgICB9CisKKyAgICB2b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29uc3QgVmVj
dG9yPEluc3Q+Jik7CisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIFZlY3RvcjxJ
bnN0PiYmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAg
dm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVy
UmVnQWxsb2MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUg
IkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlckFmdGVy
UmVnQWxsb2MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
Imxvd2VyQWZ0ZXJSZWdBbGxvYyIpOworCisgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+
IHVzZWRSZWdpc3RlcnM7CisKKyAgICBSZWdMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBSZWdMaXZlbmVzczo6TG9j
YWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKworICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09
IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsKSB7CisgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0
LnNldChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBpZiAoc2V0Lm51bWJlck9m
U2V0UmVnaXN0ZXJzKCkpCisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoJmluc3Qs
IHNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAo
Y29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgQXJnOjpUeXBlIHR5cGUpIC0+IHN0ZDo6YXJyYXk8QXJn
LCAyPiB7CisgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiByZXN1bHQ7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5nZXQocmVnKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbaV0gPSBUbXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0W2ldID0gQXJnOjpzdGFjaygKKyAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFj
a1Nsb3QoCisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OmJ5dGVzKEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgodHlwZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90S2luZDo6
QW5vbnltb3VzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworCisgICAgLy8gTm93IHRyYW5zZm9ybSB0aGUgY29kZS4KKyAgICBJbnNl
cnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29k
ZSkgeworICAgICAgICAgICAgY2FzZSBTaHVmZmxlOiB7CisgICAgICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAg
ICBBcmcgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRz
dCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lk
dGggPSBpbnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
cmMuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQoc3JjLnJlZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3
aWR0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFy
ZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7CisgICAgICAgICAg
ICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFy
Zzo6RlApOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAg
ICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBm
cFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fz
ZSBDb2xkQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
cHJlVXNlZDsKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21w
dXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBUbXAg
cmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAg
ICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSAr
IDEgOiBpKSA6IGkgXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9u
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhG
b3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNyYy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlVXNlZC5zZXQoc3JjLnJl
ZygpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFy
ZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6R1ApOworICAgICAg
ICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJl
VXNlZCwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgcmVnc1RvU2F2ZSA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKworICAgICAgICAg
ICAgICAgIC8vIEFsc28gbmVlZCB0byBzYXZlIGFsbCBsaXZlIHJlZ2lzdGVycy4gRG9uJ3QgbmVl
ZCB0byB3b3JyeSBhYm91dCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIu
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1Rv
U2F2ZS5jbGVhcihyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja1Ns
b3QqPiBzdGFja1Nsb3RzOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRp
dmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCog
c3RhY2tTbG90ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xv
dChBcmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6c3RhY2so
c3RhY2tTbG90KSwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdHMu
YXBwZW5kKHN0YWNrU2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNj
cmF0Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2Fs
bChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAgICAgICAgICAgICAgIC8v
IE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgICAgICBwYWlycy5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tT
bG90SW5kZXggPSAwOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
bXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVX
aWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3Rh
Y2tTbG90ID0gc3RhY2tTbG90c1tzdGFja1Nsb3RJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihBcmc6OnN0YWNrKHN0YWNrU2xvdCksIGFy
Zywgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyKHJlc3VsdCwg
aW5zdC5hcmdzWzFdLCBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1Nh
dmUuc2V0KHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Z3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6R1ApOworICAgICAgICAg
ICAgICAgIGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkZQKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMo
CisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIGVtaXRTaHVmZmxlKHBhaXJzLCBn
cFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKworICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRj
aGluZygKKyAgICAgICAgICAgIFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICFpbnN0OworICAgICAgICAgICAgfSk7CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJMb3dlckFmdGVyUmVnQWxsb2NfaAorI2RlZmluZSBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGxvd2VycyBTaHVmZmxlIGFu
ZCBDb2xkQ0NhbGwgaW5zdHJ1Y3Rpb25zLiBUaGlzIHBoYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHJ1
biBhZnRlciByZWdpc3RlcgorLy8gYWxsb2NhdGlvbi4KKwordm9pZCBsb3dlckFmdGVyUmVnQWxs
b2MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1h
Y3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJiBjb2RlKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJNYWNyb3MiKTsKKworICAgIEluc2VydGlv
blNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJs
b2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7
CisgICAgICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSog
dmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAg
IFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29k
ZSwgdmFsdWUpOworCisgICAgICAgICAgICAgICAgSW5zdCBzaHVmZmxlQXJndW1lbnRzKFNodWZm
bGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+dHlw
ZSgpID09IFZvaWQgPyAwIDogMTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV0pOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1tpXSk7
CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3
aWR0aEFyZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KGluc3RJbmRl
eCwgV1RGTW92ZShzaHVmZmxlQXJndW1lbnRzKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRp
Y2F0ZSB0aGF0IHdlJ3JlIHVzaW5nIG91ciBvcmlnaW5hbCBjYWxsZWUgYXJndW1lbnQuCisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25zWzBdID0gaW5zdC5hcmdzWzBdOworCisgICAgICAgICAg
ICAgICAgLy8gU2F2ZSB3aGVyZSB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcHV0IGl0cyByZXN1
bHQuCisgICAgICAgICAgICAgICAgQXJnIHJlc3VsdERzdCA9IHZhbHVlLT50eXBlKCkgPT0gVm9p
ZCA/IEFyZygpIDogaW5zdC5hcmdzWzFdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlvbnMpOwor
CisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50eXBlKCkp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChp
bnN0SW5kZXggKyAxLCBNb3ZlRmxvYXQsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmVE
b3VibGUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZTMyLCB2YWx1ZSwgcmVzdWx0LCBy
ZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJ
bmRleCArIDEsIE1vdmUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCisjZGVmaW5lIEFpckxvd2VyTWFjcm9zX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQWlyIGhhcyBzb21lIG9wY29kZXMgdGhh
dCBhcmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVhbnQgdG8gcmVkdWNlIHRoZSBhbW91bnQg
b2YgbG93LWxldmVsCisvLyBrbm93bGVkZ2UgaW4gdGhlIEIzLT5BaXIgbG93ZXJpbmcuIFRoZSBj
dXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwuCisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYpOworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5NDg1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNyw2ICs0MDcsMTQgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgVG1w
LCBJbmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKK3g4
NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgor
Cit4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBUbXAs
IEFkZHIKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRl
bmQzMlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjcyLDcgKzY4MCwxOSBAQCBS
ZXREb3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVybWluYWwKIAorIyBBIFNodWZmbGUg
aXMgYSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9uIG1vdmUuIEl0IHNpbXVsdGFuZW91
c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KKyMgVGhlIG1vdmVzIGFyZSBzcGVjaWZp
ZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0aC4gRm9yIGV4YW1wbGUgeW91IGNh
biByZXF1ZXN0IGEgc3dhcCB0aGlzCisjIHdheToKKyMgICAgIFNodWZmbGUgJXRtcDEsICV0bXAy
LCA2NCwgJXRtcDIsICV0bXAxLCA2NAorY3VzdG9tIFNodWZmbGUKKwogIyBBaXIgYWxsb3dzIGZv
ciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGly
ZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9w
ZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAorIyBJbnN0cnVjdGlvbnMgdXNlZCBmb3IgbG93ZXJpbmcg
QyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIgZ2VuZXJhdGlvbi4gVGhleSBnZXQg
bG93ZXJlZCB0bworIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4gVGhlIG9yaWdpbiBWYWx1ZSBtdXN0
IGJlIGEgQ0NhbGxWYWx1ZS4KK2N1c3RvbSBDQ2FsbAorY3VzdG9tIENvbGRDQ2FsbAorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNp
bmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJCM0Nv
bXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgi
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzdHJpbmc+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworLy8gV2UgZG9uJ3QgaGF2ZSBhIE5PX1JFVFVSTl9E
VUVfVE9fRVhJVCwgbm9yIHNob3VsZCB3ZS4gVGhhdCdzIHJpZGljdWxvdXMuCitzdGF0aWMgYm9v
bCBoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKCkgeyByZXR1cm4gdHJ1ZTsgfQor
CitzdGF0aWMgdm9pZCB1c2FnZSgpCit7CisgICAgZGF0YUxvZygiVXNhZ2U6IHRlc3RiMyBbPGZp
bHRlcj5dXG4iKTsKKyAgICBpZiAoaGlkZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgp
KQorICAgICAgICBleGl0KDEpOworfQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7CisKK25hbWVzcGFjZSB7
CisKK1N0YXRpY0xvY2sgY3Jhc2hMb2NrOworCisvLyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdl
IGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUg
Q0hFQ0soeCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jh
c2hMb2NrLmxvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorCitWTSogdm07CisKK3N0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRp
b24+IGNvbXBpbGUoQjM6OlByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBwcmVwYXJlRm9yR2VuZXJh
dGlvbihwcm9jLmNvZGUoKSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJh
dGUocHJvYy5jb2RlKCksIGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0
LCBudWxscHRyKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlv
bj4oCisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YWlyIGNvbXBpbGF0
aW9uIikpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGludm9rZShjb25zdCBCMzo6Q29tcGlsYXRp
b24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShB
cmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4u
Lik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1Qg
Y29tcGlsZUFuZFJ1bihCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCit7CisgICAgcmV0dXJuIGludm9rZTxUPigqY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1
bWVudHMuLi4pOworfQorCit2b2lkIHRlc3RTaW1wbGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSg0MiksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFw
cGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAg
ICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQorCit2b2lkIHRlc3RC
YXNpY1NodWZmbGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgxKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjph
ZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9
PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3Qp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4o
I3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAgICAg
ICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7
CisKK3ZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKK3sKKyAgICBKU0M6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwor
CisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOworCisgICAgYXV0
byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3ROYW1lKSAtPiBib29sIHsKKyAgICAg
ICAgcmV0dXJuICFmaWx0ZXIgfHwgISFzdHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOworICAg
IH07CisKKyAgICBSVU4odGVzdFNpbXBsZSgpKTsKKyAgICBSVU4odGVzdEJhc2ljU2h1ZmZsZSgp
KTsKKworICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICBM
b2NrIGxvY2s7CisKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVz
KCk7IGktLTspIHsKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoCisgICAgICAgICAgICBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAorICAgICAgICAgICAgICAg
IFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+cnVuKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisgICAgfQorCisgICAgZm9y
IChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgY3Jhc2hMb2NrLmxvY2soKTsKK30KKworfSAvLyBh
bm9ueW1vaXMgbmFtZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisKK3N0YXRpYyB2
b2lkIHJ1bihjb25zdCBjaGFyKikKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJs
ZWQuXG4iKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBudWxscHRyOwor
ICAgIHN3aXRjaCAoYXJnYykgeworICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAyOgorICAgICAgICBmaWx0ZXIgPSBhcmd2WzFdOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICB1c2FnZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
cnVuKGZpbHRlcik7CisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268893</attachid>
            <date>2016-01-13 12:36:43 -0800</date>
            <delta_ts>2016-01-13 14:30:21 -0800</delta_ts>
            <desc>more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129517</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMjIgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE0NCw5IEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdp
ZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE5Nyw5
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmci
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjUsMTYgKzI2NCwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0
aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7
CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnBy
aW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDExIEBA
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNs
YXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwK
LSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFyZwogICAg
IH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7CisgICAgICAg
IGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3QgewogICAgICAg
ICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAg
ICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIENv
bGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBMYXRlQ29s
ZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CkBAIC01NDksNiArNTgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdpZHRoQXJnOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSB3aWR0aDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApAQCAtNTg1LDYgKzYyNSwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CiAgICAgfQogCisg
ICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1tKCkg
fHwgaXNJbW02NCgpOworICAgIH0KKwogICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTYwNSw2ICs2NTAsMjEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNN
ZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaXNTdGFja01lbW9yeSgpIGNvbnN0OworCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNjM3LDYgKzY5
NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKICAgICB9
CiAKKyAgICBib29sIGlzV2lkdGhBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9CisKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpAQCAtNjgwLDE4ICs3NDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBBZGRyOgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6
Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5KCk7IH0KICAgICAKICAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtNzMwLDYgKzc4NCwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQp
OwogICAgIH0KIAorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gV2lkdGhBcmcpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lkdGg+
KG1fb2Zmc2V0KTsKKyAgICB9CisKICAgICBib29sIGlzR1BUbXAoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAtNzU0LDYgKzgxNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAgICAgIHJldHVybiBp
c0dQVG1wKCk7CkBAIC03NzEsNiArODMyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0Nv
bmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAg
ICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTgxMiw2ICs4NzQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sIGNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0OworCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTUzLDYgKzEwMTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NCw2ICsxMDM5LDggQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCB1c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7
CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBh
cmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQg
bmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgSW5zdExpc3QmIGluc3Rz
KCkgeyByZXR1cm4gbV9pbnN0czsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KLSAg
ICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgSW5zdCYgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKICAgICB7CiAgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0
PihpbnN0KSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBhcHBlbmQoQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIEluc3QmIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICAgICAgcmV0dXJuIG1faW5zdHMubGFzdCgpOwog
ICAgIH0KIAogICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29u
dmVudGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorQXJnIG1h
cnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3VtZW50Q291bnQsIHVuc2lnbmVk
JiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXggPSBhcmd1bWVudENvdW50Kys7CisgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBCYW5rSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIFRtcChCYW5rSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKKworICAgIHVuc2lnbmVkIHNsb3RT
aXplOworICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgeworICAgICAgICAvLyBBcmd1bWVu
dHMgYXJlIHBhY2tlZC4KKyAgICAgICAgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNoaWxkLT50eXBl
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWxpZ25lZC4KKyAg
ICAgICAgc2xvdFNpemUgPSA4OworICAgIH0KKworICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7CisgICAgQXJnIHJlc3VsdCA9
IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7CisgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCgKKyAg
ICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgZnBBcmd1bWVudENvdW50LCB1
bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICBzd2l0Y2ggKEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNhc2UgQXJnOjpHUDoKKyAgICAg
ICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BSSW5mbz4oZ3BBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgY2hpbGQpOworICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgcmV0
dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCwgY2hpbGQpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBBcmcoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYgY29kZSwgQ0NhbGxW
YWx1ZSogdmFsdWUpCit7CisgICAgVmVjdG9yPEFyZz4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBl
bmQoVG1wKENDYWxsU3BlY2lhbDo6c2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgdW5zaWduZWQgZ3BB
cmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAg
IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
dmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAg
ICAgICAgICAgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVu
dENvdW50LCBzdGFja09mZnNldCwgdmFsdWUtPmNoaWxkKGkpKSk7CisgICAgfQorICAgIGNvZGUu
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Rt
cCBjQ2FsbFJlc3VsdChUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBWb2lkOgorICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgY2FzZSBJbnQzMjoKKyAgICBjYXNl
IEludDY0OgorICAgICAgICByZXR1cm4gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICBjYXNlIEZsb2F0OgorICAgIGNhc2UgRG91YmxlOgorICAgICAgICByZXR1cm4gVG1wKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUbXAoKTsKK30KKworSW5zdCBidWlsZENDYWxsKENvZGUmIGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+JiBhcmd1bWVudHMpCit7CisgICAg
SW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChjb2RlLmNDYWxsU3BlY2lhbCgp
KSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChhcmd1bWVudHNbMF0pOworICAgIGluc3QuYXJncy5h
cHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgaW5zdC5hcmdzLmFwcGVu
ZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFyZyBhcmcgPSBhcmd1bWVudHNb
aV07CisgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBl
bmQoYXJnKTsKKyAgICB9CisgICAgcmV0dXJuIGluc3Q7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsaW5n
Q29udmVudGlvbl9oCisjZGVmaW5lIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENDYWxsVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50
aW9uKENvZGUmLCBDQ2FsbFZhbHVlKik7CisKK1RtcCBjQ2FsbFJlc3VsdChUeXBlKTsKKworSW5z
dCBidWlsZENDYWxsKENvZGUmLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8QXJnPiYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDEyICs1
NSwxMyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2MoKSB7IHJldHVybiBtX3Byb2M7
IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9uIHN0YWNrIHNsb3RzIGFs
d2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGluZGV4CiAgICAg
Ly8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3Ug
Y3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4CiAgICAgLy8gdGhhdCBpcyA+
PSBzdGFja1Nsb3RzKCkuc2l6ZSgpLgotICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgKKyAgICAgICAg
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxw
dHIpOwogICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVlKik7CiAKICAg
ICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGlu
c3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1
ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
aW5zdC5hcmdzLnNpemUoKSAhPSAxICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxKSAr
IHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
aGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3IgaW1tZWRp
YXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJn
LmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAx
OworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1t
ZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGlu
c3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUqIGNoaWxk
ID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29mZnNldCAr
IGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYs
IEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIEMg
Y2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cisg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVDdXN0b206
OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgJSAz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1heSBvbmx5
IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0aGUgdW5k
ZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhhdCBpcyBz
dXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBhbHNvCisg
ICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAic2hhcGUi
IG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8vIGFzIGFu
IGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGluYXRpb24g
cmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNvbnNpc3Rz
IG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5uaW5nIHRy
ZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMgYSBzZXF1
ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFsbHkgcmVx
dWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxvb3BzLiBU
aGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29yIGFuZCBv
bmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdldCBpbnRv
IiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRlZCB1c2lu
ZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBhIHNjcmF0
Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hTZXQ8QXJn
PiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICB1bnNpZ25l
ZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAg
Ly8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJnKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUuCisgICAg
ICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3RW50cnkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGFyZy5pc1RtcCgpIHx8IGFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0NDYWxsSGVscGVyczo6SnVtcCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFU
QUw6IFVubG93ZXJlZCBzaHVmZmxlOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgog
I2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiArNTIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0
byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNw
ZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVu
IGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERl
ZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUg
dGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0
LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBz
dHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQpAQCAtOTYsNiArOTksMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAor
Ly8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90
IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGgg
YW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlv
bnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwg
c28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0
IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRp
YyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsrXSwgQXJn
OjpVc2UsIEFyZzo6R1AsIEFyZzo6cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAgICAgICAg
CisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgIGZ1bmN0
b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwKKyAgICAg
ICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAgICAgICAg
ICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAg
ICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpV
c2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAor
ICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBj
YWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0Nh
bGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0
eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZs
ZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9p
ZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAg
IEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSAr
IDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Cisg
ICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRo
KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6
OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMo
SW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGlj
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3Np
YmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3NpYmxlU2Ny
YXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsK
KyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAg
WyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1w
KHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+IiwgZHN0
KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNodWZmbGVQ
YWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUs
IFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAg
IFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8g
Rmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3ZSBr
bm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6
IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzVHlwZSh0eXBlKSk7CisgICAg
ICAgIEFTU0VSVChwYWlyLmRzdCgpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VSVChwYWly
LmRzdCgpLmlzVG1wKCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKTsKKyAgICB9CisKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3ZSB3aWxs
IGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBjKS4g
V2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSByZXF1aXJl
cworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+bWVtb3J5
IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0aGVzZSBhcworICAgIC8vICAgcG9z
c2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNhbiBpbnZv
bHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9uZWQKKyAgICAvLyAgIG11bHRpcGxlIHRpbWVzLiBF
eGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIgPT4gZCwgYiA9PiBlKS4KKyAgICAvLworICAgIC8v
IC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhp
cyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1heSBub3Qg
YmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3Rl
ciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFt
cGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dh
cCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBi
ZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisgICAgLy8KKyAgICAvLyBXZSB3aWxs
IGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0
aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0
aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5
IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNlLgorICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8
U2h1ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dh
cHMgb3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBm
b3IgYSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3Jj
KCksIGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisg
ICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBk
b24ndCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICBWZWN0b3I8VmVjdG9y
PFNodWZmbGVQYWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxBcmcsIFZl
Y3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIuc3JjKCksIFZl
Y3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChwYWlyKTsKKworICAg
ICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAgICAgICB3aGlsZSAo
IW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBtYXBwaW5nLmJlZ2luKCkt
PmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5zKG9yaWdpbmFsU3JjKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEFyZz4gd29ya2xp
c3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3JjKTsKKyAgICAgICAgICAg
IHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNo
TWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBwaW5nLmZp
bmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ug
cHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5z
cmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHBhaXIuZHN0
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWly
c1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50UGFp
cnMubGFzdCgpLmRzdCgpID09IGN1cnJlbnRQYWlyc1swXS5zcmMoKSkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBncmFwaCBzZWFyY2ggdGVybWluYXRlcyBiZWNhdXNlIHdlIHJldHVybmVk
IHRvIHRoZSBmaXJzdCBzb3VyY2UsIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gcGFpciBs
aXN0IGhhcyB0byBoYXZlIGEgdmVyeSBwYXJ0aWN1bGFyIHNoYXBlLgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnRQYWlycy5zaXplKCkgLSAxOyBpLS07KQorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzW2ldLmRzdCgpID09IGN1cnJlbnRQYWly
c1tpICsgMV0uc3JjKCkpOworICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5kKFdURk1vdmUo
Y3VycmVudFBhaXJzKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzaGlm
dHMuYWRkKG9yaWdpbmFsU3JjLCBXVEZNb3ZlKGN1cnJlbnRQYWlycykpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVn
aXN0ZXJzLiBUaGUgd2F5IHdlIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcworICAg
IC8vIHVzIHdoYXQgc2NyYXRjaCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBh
cm91bmQuIFdlIHdpbGwgbmVlZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8vIHRoZSBmb2xs
b3dpbmcgY2FzZXM6CisgICAgLy8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBz
cmMgYW5kIGRzdCByZWZlciB0byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2Fw
IGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5IGZvciB1cywg
d2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1l
IHdlIGhhdmUgYSBTaGlmdCB0aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNl
YXJjaCBmb3Igc3VjaCBhIHJlZ2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8gbW92ZUZvcldp
ZHRoID0gWyZdIChBcmc6OldpZHRoIHdpZHRoKSAtPiBPcGNvZGUgeworICAgICAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJu
IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUzMiA6IE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBBcmc6
OldpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1v
dmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wY29kZSBjb25zZXJ2YXRp
dmVNb3ZlID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworCisg
ICAgLy8gV2Ugd2lsbCBlbWl0IHRoaW5ncyBpbiByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qg
b2YgcGFja3Mgb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB3ZSBlbWl0CisgICAgLy8gYXBwZW5k
IHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSAoZm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBl
bmQgb2YgcmVzdWx0UGFja3MgaXMgcGxhY2VkCisgICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1
bCBiZWNhdXNlIHRoZSBsYXN0IHRoaW5nIHdlIGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9u
IHJlZ2lzdGVycywgc28KKyAgICAvLyBpdCBhZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZv
cmUgaXQuCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0Pj4gcmVzdWx0UGFja3M7CisgICAgVmVjdG9y
PEluc3Q+IHJlc3VsdDsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0ID0gWyZdICgpIHsKKyAgICAg
ICAgcmVzdWx0UGFja3MuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgfTsKKworICAgIGF1
dG8gZ2V0U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gp
IC0+IFRtcCB7CisgICAgICAgIGlmIChzY3JhdGNoZXNbaW5kZXhdLmlzVG1wKCkpCisgICAgICAg
ICAgICByZXR1cm4gc2NyYXRjaGVzW2luZGV4XS50bXAoKTsKKworICAgICAgICBpZiAoIXBvc3Np
YmxlU2NyYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3Jh
dGNoZXNbaW5kZXhdKSk7CisgICAgICAgIHJldHVybiBwb3NzaWJsZVNjcmF0Y2g7CisgICAgfTsK
KworICAgIGF1dG8gcmV0dXJuU2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXAp
IHsKKyAgICAgICAgaWYgKEFyZyh0bXApICE9IHNjcmF0Y2hlc1tpbmRleF0pCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNb
aW5kZXhdLCB0bXApKTsKKyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0g
KGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyLCB1bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAg
ICAgT3Bjb2RlIG1vdmUgPSBtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0
KCkua2luZCgpKSkgeworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPQorICAgICAgICAgICAgICAg
IGdldFNjcmF0Y2goc2NyYXRjaEluZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIHBhaXIu
c3JjKCksIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gp
OworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBB
cmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0
aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHBhaXIuc3JjKCksIHNjcmF0Y2gpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzU29tZUltbSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobW92ZSA9PSBNb3ZlMzIpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlLCBvcmlnaW4sIEFyZzo6aW1tNjQocGFpci5zcmMo
KS52YWx1ZSgpKSwgc2NyYXRjaCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gs
IHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmUsIG9yaWdpbiwgcGFpci5zcmMoKSwgcGFpci5kc3Qo
KSkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRsZVNoaWZ0ID0gWyZdIChWZWN0b3I8U2h1ZmZs
ZVBhaXI+JiBzaGlmdCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXplKCk7
IGktLTspCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisgICAg
ICAgIEFyZyBsYXN0RHN0ID0gc2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFzdERz
dC5pc1RtcCgpKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hlcykg
eworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAgICAg
ICAgICAgIGlmICghc2NyYXRjaC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0
Y2ggPSBsYXN0RHN0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3QgaGFu
ZGxlIHNoaWZ0cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2Ug
ZnJlZSB1cCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0
aGUgZmluYWwgc2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlm
dHMgd2lsbCBiZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFu
eXRoaW5nIGVtaXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4K
KyAgICAvLyByZXZlcnNlKS4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAg
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlm
IChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNo
aWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRs
ZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMp
IHsKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAg
ICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRs
ZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9y
IChWZWN0b3I8U2h1ZmZsZVBhaXI+JiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGJvb2wg
Y2FuU3dhcCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIEFy
Zzo6V2lkdGggc3dhcFdpZHRoID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3VzIHZhbHVlCisgICAgICAg
IAorICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICBzd2FwID0gU3dh
cDMyOworICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAg
Zm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAocGFpci53aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDY0OgorICAgICAgICAgICAgICAgICAgICBzd2FwID0gU3dhcDY0OworICAgICAgICAgICAgICAg
ICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fu
U3dhcCA9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OlRtcCk7CisgICAgICAgICAg
ICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBhaXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJn
OjpBZGRyKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2Fw
cGluZyBwYXRoIGlmIHRoZXJlIGlzIGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gc2h1ZmZsZXMgaW52b2x2ZSBtZW1vcnkuIFRoYXQgZ2V0cyB0
b28gY29uZnVzaW5nLgorICAgICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRo
KCkgPCBzd2FwV2lkdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSByb3RhdGUuc2l6ZSgpIC0gMTsgaS0tOykgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0
ID0gcm90YXRlW2ldLnNyYygpOworICAgICAgICAgICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZVtp
ICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJp
Z2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
aXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFy
ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxz
IGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9z
c2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3Jh
dGNoLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92
ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRjaCwgbGVmdCkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVm
dC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChz
d2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChw
YWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6Oldp
ZHRoMzIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6
OldpZHRoNjQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNU
bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0
ZW5zaW9uLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdp
biwgcGFpci5kc3QoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gV2UgY2FuIHRyZWF0IHRoaXMgYXMgYSBzaGlmdCBzbyBsb25n
IGFzIHdlIHRha2UgdGhlIGxhc3QgZGVzdGluYXRpb24gKGkuZS4gZmlyc3QKKyAgICAgICAgICAg
IC8vIHNvdXJjZSkgYW5kIHNhdmUgaXQgZmlyc3QuIFRoZW4gd2UgaGFuZGxlIHRoZSBmaXJzdCBl
bnRyeSBpbiB0aGUgcGFpciBpbiB0aGUgcm90YXRlCisgICAgICAgICAgICAvLyBzcGVjaWFsbHks
IGFmdGVyIHdlIHJlc3RvcmUgdGhlIGxhc3QgZGVzdGluYXRpb24uIFRoaXMgcmVxdWlyZXMgc29t
ZSBzcGVjaWFsIGNhcmUgdG8KKyAgICAgICAgICAgIC8vIGZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVy
LiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHJvdGF0ZSB0aGF0IHVzZXMgdGhlIGVudGly
ZQorICAgICAgICAgICAgLy8gYXZhaWxhYmxlIHJlZ2lzdGVyIGZpbGUuCisKKyAgICAgICAgICAg
IFRtcCBzY3JhdGNoID0gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgICAgICAgICB0eXBl
LAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWly
LmRzdCgpLnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRT
Y3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2ZSA9IHNjcmF0
Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGUubGFzdCgpLmRzdCgpLCByb3Rh
dGVTYXZlLCByb3RhdGVbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSByb3RhdGUuc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVT
aGlmdFBhaXIocm90YXRlW2ldLCAxKTsKKworICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKFNo
dWZmbGVQYWlyKHJvdGF0ZVNhdmUsIHJvdGF0ZVswXS5kc3QoKSwgcm90YXRlWzBdLndpZHRoKCkp
LCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJu
U2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbW1pdFJlc3VsdCgp
OworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0
b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFp
cnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6
YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pCit7CisgICAgVmVj
dG9yPFNodWZmbGVQYWlyPiBncFBhaXJzOworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnBQYWly
czsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAg
aWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkgJiYgcGFp
ci53aWR0aCgpID4gQXJnOjpwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gOC1ieXRl
IG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJlIGJlc3QgaGFu
ZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHBhaXIuc3JjKCkuaXNHUCgpICYmIHBhaXIuZHN0KCkuaXNHUCgp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRzIG1lbW9yeS10
by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAgICAgICAgICAg
IC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhjZXB0IGluIHRo
ZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVuZChwYWlyKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICB9
CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1p
dFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQLCBvcmlnaW4pKTsKKyAgICByZXN1
bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGZwUGFpcnMsIGZwU2NyYXRjaCwgQXJnOjpGUCwg
b3JpZ2luKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNo
dWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2lu
Y2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBk
c3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1f
ZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBk
c3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWlu
ZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9y
IFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3Zl
MzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVE
b3VibGUuCisgICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFy
Zzo6V2lkdGg4IH07Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUu
IFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFz
CisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJz
IG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8vIHJlZ2lzdGVy
cyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5
cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBzaHVmZmxlIC0g
dGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRjaCByZWdpc3Rl
cnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tpbmcgZm9yIHRo
ZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBzYWZlIHRvIHBh
c3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5nIGVpdGhlciBt
ZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMgYW4KKy8vIG9w
dGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9uLiBTb21lIG1v
cmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMgYXMgdGhpbmdz
IHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5vdCBvbmUgb2YK
Ky8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5nIGxpdmUgYmVm
b3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8gICBiZSB1c2Vk
IAorLy8KKy8vIC0gQSBzZWNvbmQgc2NyYXRjaCBsb2NhdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVu
IHlvdSBoYXZlIHNodWZmbGUgcGFpcnMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYm90aAorLy8gICBh
cyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorLy8KKy8vIC0gWW91J3JlIGd1YXJhbnRlZWQgbm90
IHRvIG5lZWQgYW55IHNjcmF0Y2ggbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEgU3dhcCBpbnN0cnVj
dGlvbiBhdmFpbGFibGUgZm9yCisvLyAgIHRoZSB0eXBlIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhbnkg
bWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFyZSBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5h
dGlvbiBvZgorLy8gICBzb21lIHBhaXJzLiBHUCBzdXBwb3J0cyBTd2FwIG9uIHg4NiB3aGlsZSBG
UCBuZXZlciBzdXBwb3J0cyBTd2FwLgorLy8KKy8vIC0gUGFzc2luZyBtZW1vcnkgbG9jYXRpb25z
IGFzIHNjcmF0Y2ggaWYgYXJlIHJ1bm5pbmcgZW1pdFNodWZmbGUoKSBiZWZvcmUgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBpcworLy8gICBzaWxseSwgc2luY2UgdGhhdCB3aWxsIGNhdXNlIGVtaXRTaHVm
ZmxlKCkgdG8gcGljayBzb21lIHNwZWNpZmljIHJlZ2lzdGVycyB3aGVuIGl0IGRvZXMgbmVlZAor
Ly8gICBzY3JhdGNoLiBPbmUgZWFzeSB3YXkgdG8gYXZvaWQgdGhhdCBwcmVkaWNhbWVudCBpcyB0
byBlbnN1cmUgdGhhdCB5b3UgY2FsbCBlbWl0U2h1ZmZsZSgpIGFmdGVyCisvLyAgIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEZvciB0aGlzIHJlYXNvbiB3ZSBjb3VsZCBhZGQgYSBTaHVmZmxlIGluc3Ry
dWN0aW9uIHNvIHRoYXQgd2UgY2FuIGRlZmVyCisvLyAgIHNodWZmbGluZ3MgdW50aWwgYWZ0ZXIg
cmVnYWxsb2MuCisvLworLy8gLSBTaHVmZmxlcyB3aXRoIG1lbW9yeT0+bWVtb3J5IHBhaXJzIGFy
ZSBub3QgdmVyeSB3ZWxsIHR1bmVkLiBZb3Ugc2hvdWxkIGF2b2lkIHRoZW0gaWYgeW91IHdhbnQK
Ky8vICAgcGVyZm9ybWFuY2UuIElmIHlvdSBuZWVkIHRvIGRvIHRoZW0sIHRoZW4gbWFraW5nIHN1
cmUgdGhhdCB5b3UgcmVzZXJ2ZSBhIHRlbXBvcmFyeSBpcyBvbmUgd2F5IHRvCisvLyAgIGdldCBh
Y2NlcHRhYmxlIHBlcmZvcm1hbmNlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4sIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBBcmc6OlR5cGUs
IFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGludm9sdmVzIGFu
eSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0
aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3ZlLgorVmVj
dG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mLAor
ICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5
PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDgg
QEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
aCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKyNpbmNsdWRlICJBaXJMb3dl
ck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0
aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgpA
QCAtNjUsNiArNjcsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAg
ICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQogCisgICAgbG93ZXJNYWNyb3MoY29kZSk7CisK
ICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNm
b3JtYXRpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgpAQCAtODAsNiAr
ODQsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgZWxzZQog
ICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAorICAgIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhjb2RlKTsKKwogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xv
Z3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQg
YWxzbwogICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVz
IHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2
aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDExICszOCwxMSBAQCBjbGFzcyBDb2RlOwogCiAvLyBUaGlz
IHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24g
YW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5k
IGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi12b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENv
ZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYp
OwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4gQ0NhbGxIZWxw
ZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MKIC8vIGluIHRo
ZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCi12b2lkIGdlbmVyYXRlKENvZGUm
LCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoQ29kZSYs
IENDYWxsSGVscGVycyYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9u
U2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMp
Cit7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydElu
c3QoaW5kZXgsIGluc3QpOworfQorCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6
ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3Qg
OiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisK
IHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1
YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4o
aW5zdCkpKTsKICAgICB9CisKKyAgICB2b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29u
c3QgVmVjdG9yPEluc3Q+Jik7CisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIFZl
Y3RvcjxJbnN0PiYmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDE1IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8fCBhcmdzLnNp
emUoKTsgfQogCisgICAgdm9pZCBhcHBlbmQoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJnIGFyZywgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGFw
cGVuZChhcmd1bWVudHMuLi4pOworICAgIH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5j
dG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0g
Zm9yIHRoaW5ncyB0aGF0CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVk
OyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQog
ICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5
LmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2Mi
KTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOworCisg
ICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2
ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWdpc3RlclNldCBz
ZXQ7CisKKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qub3Bj
b2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2Fs
Q2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdElu
ZGV4KTsKKworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYXV0byBnZXRTY3JhdGNoZXMgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBz
ZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywgMj4geworICAgICAgICBzdGQ6
OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0g
VG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3Rh
Y2soCisgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAg
IC8vIE5vdyB0cmFuc2Zvcm0gdGhlIGNvZGUuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgU2h1ZmZsZTogeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdp
c3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBh
aXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJn
c1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFd
OworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAy
XS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQuc2V0KHNyYy5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdl
dFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJn
LCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdp
bikpOworICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CisgICAg
ICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1
ZT4oKTsKKworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZVVzZWQ7CisgICAgICAgICAg
ICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlv
bihjb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0
KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rv
cjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIEFyZyBz
cmMgPSBpbnN0LmFyZ3NbcmVzdWx0ID8gKGkgPj0gMSA/IGkgKyAxIDogaSkgOiBpIF07CisgICAg
ICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBk
c3QsIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmMuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByZVVzZWQuc2V0KHNyYy5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdl
dFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5
PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6RlApOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1NhdmUgPSB1
c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisKKyAgICAgICAgICAgICAgICAvLyBBbHNvIG5lZWQg
dG8gc2F2ZSBhbGwgbGl2ZSByZWdpc3RlcnMuIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhl
IHJlc3VsdAorICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyLgorICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuY2xlYXIocmVzdWx0LnJl
ZygpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc3RhY2tTbG90czsKKyAg
ICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJnOjpieXRlcyh3aWR0aCks
IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWly
cy5hcHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNrU2xvdCksIHdpZHRoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVuZChzdGFja1Nsb3QpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRl
eCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikp
OworCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwgaW5zdC5vcmlnaW4s
IGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byBlbWl0
IGNvZGUgdG8gcmVzdG9yZSByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgcGFpcnMucmVzaXpl
KDApOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2xvdEluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IHN0YWNrU2xvdHNb
c3RhY2tTbG90SW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQo
U2h1ZmZsZVBhaXIoQXJnOjpzdGFjayhzdGFja1Nsb3QpLCBhcmcsIHdpZHRoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpcihyZXN1bHQsIGluc3QuYXJnc1sxXSwgQXJnOjp3
aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLnNldChyZXN1bHQucmVnKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdwU2NyYXRjaCA9IGdldFNjcmF0
Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBmcFNjcmF0Y2ggPSBn
ZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAg
ICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gs
IGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisK
KyAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsK
KyAgICAgICAgICAgIH0pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxs
b2MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJBZnRlclJlZ0FsbG9j
X2gKKyNkZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1ZmZsZSBhbmQgQ29sZENDYWxsIGluc3RydWN0
aW9ucy4gVGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0byBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIKKy8v
IGFsbG9jYXRpb24uCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jv
cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVu
dGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Zv
aWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImxvd2VyTWFjcm9zIik7CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBD
Q2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4t
PmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5h
dGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKworICAgICAg
ICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxlLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDE7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlc3RpbmF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+
Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBl
bmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFy
Z3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmcoQXJnOjp3aWR0aEZv
ckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgsIFdURk1vdmUoc2h1ZmZsZUFy
Z3VtZW50cykpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2lu
ZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uc1swXSA9IGluc3QuYXJnc1swXTsKKworICAgICAgICAgICAgICAgIC8vIFNhdmUgd2hlcmUg
dGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0LgorICAgICAgICAgICAgICAg
IEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyBBcmcoKSA6IGluc3QuYXJn
c1sxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2Fs
bChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAgICAgICAgICAgICAgIFRt
cCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmxvYXQ6CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZUZs
b2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91YmxlLCB2YWx1ZSwgcmVzdWx0
LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGlu
c3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlLCB2YWx1
ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1h
Y3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJN
YWNyb3NfaAorI2RlZmluZSBBaXJMb3dlck1hY3Jvc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIEFpciBoYXMgc29tZSBvcGNvZGVzIHRoYXQgYXJlIHZlcnkgaGlnaC1sZXZl
bCBhbmQgYXJlIG1lYW50IHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGxvdy1sZXZlbAorLy8ga25v
d2xlZGdlIGluIHRoZSBCMy0+QWlyIGxvd2VyaW5nLiBUaGUgY3VycmVudCBleGFtcGxlIGlzIEND
YWxsLgorCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxv
d2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3
LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIK
ICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBV
RDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6
Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6
MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIs
IFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3ICs2ODAsMTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0
dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBTaHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBt
dWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1v
dmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUgc3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNy
YywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxlIHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhp
cworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAxLCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwg
NjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBB
IFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBv
cGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNo
CiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxvd2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0
IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRoZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRo
aW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFsdWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitj
dXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBjb25zdCBWZWN0b3I8dHlwZW5hbWUgQmFu
azo6UmVnaXN0ZXJUeXBlCiAgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5r
Pjo6aW5Qcmlvcml0eU9yZGVyKCk7CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlv
cml0eU9yZGVyKEFyZzo6VHlwZSk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBWZWN0b3I8UmVn
PiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWly
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVk
ZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2lu
Y2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKKy8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RP
X0VYSVQsIG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgorc3RhdGljIGJvb2wgaGlk
ZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KKworc3Rh
dGljIHZvaWQgdXNhZ2UoKQoreworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0YjMgWzxmaWx0ZXI+
XVxuIik7CisgICAgaWYgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAg
ICAgICAgZXhpdCgxKTsKK30KKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOworCituYW1lc3BhY2UgeworCitT
dGF0aWNMb2NrIGNyYXNoTG9jazsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0
IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNL
KHgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGlmICghISh4KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNyYXNoTG9j
ay5sb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKKworVk0qIHZtOworCitzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBj
b21waWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCit7CisgICAgcHJlcGFyZUZvckdlbmVyYXRpb24o
cHJvYy5jb2RlKCkpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHBy
b2MuY29kZSgpLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVs
bHB0cik7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAor
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIp
KSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBpbnZva2UoY29uc3QgQjM6OkNvbXBpbGF0aW9uJiBj
b2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFQgKCpmdW5jdGlvbikoQXJndW1l
bnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBp
bGVBbmRSdW4oQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQoreworICAgIHJldHVybiBpbnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRz
Li4uKTsKK30KKwordm9pZCB0ZXN0U2ltcGxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oNDIpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVNpbXBsZVN3YXAoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgxKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAg
ICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhp
bmdzWzJdID09IDQpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNV07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIo
YmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9v
dC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVD
SyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAx
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDUpLCBU
bXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oNiksIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSg3KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDgpLCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdU
NyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRk
cihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
Mik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0
KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYp
OworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdT
aGlmdEJhY2t3YXJkcygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNSksIFRtcChHUFJJbmZvOjpyZWdUNCkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg2KSwgVG1wKEdQUklu
Zm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDcp
LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oOCksIFRtcChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1w
KEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpy
ZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0g
Y29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRk
cihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRk
cihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRk
cihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGlu
Z3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5n
c1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdz
WzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlUm90YXRlKCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCks
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAg
ICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA0KTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEp
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdz
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMzUpLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDE7CisgICAgZm9yIChSZWcgcmVnIDogcmVn
cykgeworICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAgICAgICAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oY291bnQrKyksIFRtcChyZWcp
KTsKKyAgICB9CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxs
cHRyKTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7CisgICAgICAgIGlmIChyZWcgIT0gUmVn
KEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgIH0K
KworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90
KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCks
IDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpz
dGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgZm9yIChpbnQzMl90IHRoaW5nIDogdGhpbmdzKQorICAgICAgICBDSEVD
Syh0aGluZyA9PSAzNSk7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICBbJl0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
dGVzdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygjdGVzdCAiOiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2
bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgRGVxdWU8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOworCisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0g
KGNvbnN0IGNoYXIqIHRlc3ROYW1lKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuICFmaWx0ZXIg
fHwgISFzdHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOworICAgIH07CisKKyAgICBSVU4odGVz
dFNpbXBsZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTd2FwKCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKSk7CisgICAgUlVOKHRl
c3RTaHVmZmxlU2ltcGxlUm90YXRlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZUJyb2Fk
Y2FzdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKCkpOworCisgICAg
Ly8gU3RpbGwgbmVlZCB0aGUgZm9sbG93aW5nIHRlc3RzOgorICAgIC8vIC0gdHJlZSBzaGlmdAor
ICAgIC8vIC0gbXVsdGlwbGUgc2hpZnRzCisgICAgLy8gLSBtdWx0aXBsZSByb3RhdGVzCisgICAg
Ly8gLSBzaGlmdCBhbmQgcm90YXRlCisgICAgLy8gLSBzaGlmdCBvdmVyIGFsbCByZWdpc3RlcnMK
KyAgICAvLyAtIHJvdGF0ZSBvdmVyIGFsbCByZWdpc3RlcnMKKyAgICAvLyAtIHJvdGF0ZSB3aXRo
IG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gbWVtb3J5IHNoaWZ0CisgICAgLy8gLSBtZW1vcnkt
Pm1lbW9yeSBzaGlmdAorICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgc2hpZnQgd2l0aCBubyBzcGFy
ZSByZWdpc3RlcnMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUKKyAgICAvLyAtIG1lbW9yeSByb3Rh
dGUgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5IHJvdGF0ZQor
ICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgcm90YXRlIHdpdGggbXVsdGlwbGUgd2lkdGhzCisgICAg
Ly8gLSBtZW1vcnkgcm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzCisgICAgLy8gLSBtZW1v
cnkgcm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzIHdpdGggbXVsdGlwbGUgd2lkdGhzCisg
ICAgLy8gLSBtZW1vcnktPm1lbW9yeSByb3RhdGUgd2l0aCBubyBzcGFyZSByZWdpc3RlcnMKKyAg
ICAvLyAtIG1lbW9yeS0+bWVtb3J5IHJvdGF0ZSB3aXRoIG5vIHNwYXJlIHJlZ2lzdGVycyB3aXRo
IG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gZmxvYXRpbmcgcG9pbnQKKworICAgIGlmICh0YXNr
cy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICBMb2NrIGxvY2s7CisKKyAgICBW
ZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKKyAgICAg
ICAgdGhyZWFkcy5hcHBlbmQoCisgICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAg
ICAgICAgInRlc3RiMyB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
c2sgPSB0YXNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgdGFzay0+cnVuKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KSk7CisgICAgfQorCisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVy
IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZCk7CisgICAgY3Jhc2hMb2NrLmxvY2soKTsKK30KKworfSAvLyBhbm9ueW1vaXMgbmFtZXNwYWNl
CisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisKK3N0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFy
KikKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJsZWQuXG4iKTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
K3sKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBudWxscHRyOworICAgIHN3aXRjaCAoYXJnYykg
eworICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmaWx0
ZXIgPSBhcmd2WzFdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICB1c2Fn
ZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcnVuKGZpbHRlcik7CisgICAg
cmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268904</attachid>
            <date>2016-01-13 14:30:21 -0800</date>
            <delta_ts>2016-01-13 14:59:34 -0800</delta_ts>
            <desc>even more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139857</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMjIgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE0NCw5IEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdp
ZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE5Nyw5
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmci
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjUsMTYgKzI2NCwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0
aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7
CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnBy
aW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDExIEBA
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNs
YXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwK
LSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFyZwogICAg
IH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7CisgICAgICAg
IGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3QgewogICAgICAg
ICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAg
ICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIENv
bGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBMYXRlQ29s
ZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CkBAIC01NDksNiArNTgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdpZHRoQXJnOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSB3aWR0aDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApAQCAtNTg1LDYgKzYyNSwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CiAgICAgfQogCisg
ICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1tKCkg
fHwgaXNJbW02NCgpOworICAgIH0KKwogICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTYwNSw2ICs2NTAsMjEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNN
ZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaXNTdGFja01lbW9yeSgpIGNvbnN0OworCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNjM3LDYgKzY5
NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKICAgICB9
CiAKKyAgICBib29sIGlzV2lkdGhBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9CisKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpAQCAtNjgwLDE4ICs3NDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBBZGRyOgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6
Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5KCk7IH0KICAgICAKICAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtNzMwLDYgKzc4NCwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQp
OwogICAgIH0KIAorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gV2lkdGhBcmcpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lkdGg+
KG1fb2Zmc2V0KTsKKyAgICB9CisKICAgICBib29sIGlzR1BUbXAoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAtNzU0LDYgKzgxNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAgICAgIHJldHVybiBp
c0dQVG1wKCk7CkBAIC03NzEsNiArODMyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0Nv
bmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAg
ICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTgxMiw2ICs4NzQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sIGNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0OworCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTUzLDYgKzEwMTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NCw2ICsxMDM5LDggQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCB1c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7
CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBh
cmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQg
bmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgSW5zdExpc3QmIGluc3Rz
KCkgeyByZXR1cm4gbV9pbnN0czsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KLSAg
ICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgSW5zdCYgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKICAgICB7CiAgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0
PihpbnN0KSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBhcHBlbmQoQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIEluc3QmIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICAgICAgcmV0dXJuIG1faW5zdHMubGFzdCgpOwog
ICAgIH0KIAogICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29u
dmVudGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorQXJnIG1h
cnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3VtZW50Q291bnQsIHVuc2lnbmVk
JiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXggPSBhcmd1bWVudENvdW50Kys7CisgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBCYW5rSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIFRtcChCYW5rSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKKworICAgIHVuc2lnbmVkIHNsb3RT
aXplOworICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgeworICAgICAgICAvLyBBcmd1bWVu
dHMgYXJlIHBhY2tlZC4KKyAgICAgICAgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNoaWxkLT50eXBl
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWxpZ25lZC4KKyAg
ICAgICAgc2xvdFNpemUgPSA4OworICAgIH0KKworICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7CisgICAgQXJnIHJlc3VsdCA9
IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7CisgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCgKKyAg
ICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgZnBBcmd1bWVudENvdW50LCB1
bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICBzd2l0Y2ggKEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNhc2UgQXJnOjpHUDoKKyAgICAg
ICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BSSW5mbz4oZ3BBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgY2hpbGQpOworICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgcmV0
dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCwgY2hpbGQpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBBcmcoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYgY29kZSwgQ0NhbGxW
YWx1ZSogdmFsdWUpCit7CisgICAgVmVjdG9yPEFyZz4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBl
bmQoVG1wKENDYWxsU3BlY2lhbDo6c2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgdW5zaWduZWQgZ3BB
cmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAg
IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
dmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAg
ICAgICAgICAgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVu
dENvdW50LCBzdGFja09mZnNldCwgdmFsdWUtPmNoaWxkKGkpKSk7CisgICAgfQorICAgIGNvZGUu
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Rt
cCBjQ2FsbFJlc3VsdChUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBWb2lkOgorICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgY2FzZSBJbnQzMjoKKyAgICBjYXNl
IEludDY0OgorICAgICAgICByZXR1cm4gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICBjYXNlIEZsb2F0OgorICAgIGNhc2UgRG91YmxlOgorICAgICAgICByZXR1cm4gVG1wKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUbXAoKTsKK30KKworSW5zdCBidWlsZENDYWxsKENvZGUmIGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+JiBhcmd1bWVudHMpCit7CisgICAg
SW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChjb2RlLmNDYWxsU3BlY2lhbCgp
KSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChhcmd1bWVudHNbMF0pOworICAgIGluc3QuYXJncy5h
cHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgaW5zdC5hcmdzLmFwcGVu
ZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFyZyBhcmcgPSBhcmd1bWVudHNb
aV07CisgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBl
bmQoYXJnKTsKKyAgICB9CisgICAgcmV0dXJuIGluc3Q7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsaW5n
Q29udmVudGlvbl9oCisjZGVmaW5lIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENDYWxsVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50
aW9uKENvZGUmLCBDQ2FsbFZhbHVlKik7CisKK1RtcCBjQ2FsbFJlc3VsdChUeXBlKTsKKworSW5z
dCBidWlsZENDYWxsKENvZGUmLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8QXJnPiYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDEyICs1
NSwxMyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2MoKSB7IHJldHVybiBtX3Byb2M7
IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9uIHN0YWNrIHNsb3RzIGFs
d2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGluZGV4CiAgICAg
Ly8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3Ug
Y3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4CiAgICAgLy8gdGhhdCBpcyA+
PSBzdGFja1Nsb3RzKCkuc2l6ZSgpLgotICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgKKyAgICAgICAg
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxw
dHIpOwogICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVlKik7CiAKICAg
ICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGlu
c3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1
ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
aW5zdC5hcmdzLnNpemUoKSAhPSAxICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxKSAr
IHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
aGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3IgaW1tZWRp
YXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJn
LmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAx
OworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1t
ZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGlu
c3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUqIGNoaWxk
ID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29mZnNldCAr
IGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYs
IEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIEMg
Y2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cisg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVDdXN0b206
OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgJSAz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1heSBvbmx5
IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0aGUgdW5k
ZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhhdCBpcyBz
dXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBhbHNvCisg
ICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAic2hhcGUi
IG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8vIGFzIGFu
IGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGluYXRpb24g
cmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNvbnNpc3Rz
IG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5uaW5nIHRy
ZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMgYSBzZXF1
ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFsbHkgcmVx
dWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxvb3BzLiBU
aGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29yIGFuZCBv
bmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdldCBpbnRv
IiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRlZCB1c2lu
ZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBhIHNjcmF0
Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hTZXQ8QXJn
PiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICB1bnNpZ25l
ZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAg
Ly8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJnKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUuCisgICAg
ICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3RW50cnkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGFyZy5pc1RtcCgpIHx8IGFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0NDYWxsSGVscGVyczo6SnVtcCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFU
QUw6IFVubG93ZXJlZCBzaHVmZmxlOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgog
I2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiArNTIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0
byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNw
ZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVu
IGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERl
ZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUg
dGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0
LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBz
dHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQpAQCAtOTYsNiArOTksMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAor
Ly8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90
IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGgg
YW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlv
bnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwg
c28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0
IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRp
YyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsrXSwgQXJn
OjpVc2UsIEFyZzo6R1AsIEFyZzo6cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAgICAgICAg
CisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgIGZ1bmN0
b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwKKyAgICAg
ICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAgICAgICAg
ICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAg
ICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpV
c2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAor
ICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBj
YWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0Nh
bGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0
eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZs
ZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9p
ZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAg
IEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSAr
IDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Cisg
ICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRo
KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6
OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMo
SW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGlj
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3Np
YmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3NpYmxlU2Ny
YXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsK
KyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAg
WyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1w
KHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+IiwgZHN0
KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNodWZmbGVQ
YWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5cGUs
IFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAg
IFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8g
Rmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3ZSBr
bm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6
IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzVHlwZSh0eXBlKSk7CisgICAg
ICAgIEFTU0VSVChwYWlyLmRzdCgpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VSVChwYWly
LmRzdCgpLmlzVG1wKCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKTsKKyAgICB9CisKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3ZSB3aWxs
IGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBjKS4g
V2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSByZXF1aXJl
cworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+bWVtb3J5
IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0aGVzZSBhcworICAgIC8vICAgcG9z
c2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNhbiBpbnZv
bHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9uZWQKKyAgICAvLyAgIG11bHRpcGxlIHRpbWVzLiBF
eGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIgPT4gZCwgYiA9PiBlKS4KKyAgICAvLworICAgIC8v
IC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhp
cyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1heSBub3Qg
YmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3Rl
ciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFt
cGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dh
cCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBi
ZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisgICAgLy8KKyAgICAvLyBXZSB3aWxs
IGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0
aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0
aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5
IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNlLgorICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8
U2h1ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dh
cHMgb3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBm
b3IgYSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3Jj
KCksIGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisg
ICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBk
b24ndCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICBWZWN0b3I8VmVjdG9y
PFNodWZmbGVQYWlyPj4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxBcmcsIFZl
Y3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIuc3JjKCksIFZl
Y3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChwYWlyKTsKKworICAg
ICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAgICAgICB3aGlsZSAo
IW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBtYXBwaW5nLmJlZ2luKCkt
PmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5zKG9yaWdpbmFsU3JjKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEFyZz4gd29ya2xp
c3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3JjKTsKKyAgICAgICAgICAg
IHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNo
TWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBwaW5nLmZp
bmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ug
cHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5z
cmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHBhaXIuZHN0
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWly
c1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50UGFp
cnMubGFzdCgpLmRzdCgpID09IGN1cnJlbnRQYWlyc1swXS5zcmMoKSkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBncmFwaCBzZWFyY2ggdGVybWluYXRlcyBiZWNhdXNlIHdlIHJldHVybmVk
IHRvIHRoZSBmaXJzdCBzb3VyY2UsIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gcGFpciBs
aXN0IGhhcyB0byBoYXZlIGEgdmVyeSBwYXJ0aWN1bGFyIHNoYXBlLgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnRQYWlycy5zaXplKCkgLSAxOyBpLS07KQorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzW2ldLmRzdCgpID09IGN1cnJlbnRQYWly
c1tpICsgMV0uc3JjKCkpOworICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5kKFdURk1vdmUo
Y3VycmVudFBhaXJzKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzaGlm
dHMuYWRkKG9yaWdpbmFsU3JjLCBXVEZNb3ZlKGN1cnJlbnRQYWlycykpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVn
aXN0ZXJzLiBUaGUgd2F5IHdlIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcworICAg
IC8vIHVzIHdoYXQgc2NyYXRjaCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBh
cm91bmQuIFdlIHdpbGwgbmVlZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgorICAgIC8vIHRoZSBmb2xs
b3dpbmcgY2FzZXM6CisgICAgLy8KKyAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBz
cmMgYW5kIGRzdCByZWZlciB0byBtZW1vcnkuCisgICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2Fw
IGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIEx1Y2t5IGZvciB1cywg
d2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1l
IHdlIGhhdmUgYSBTaGlmdCB0aGF0CisgICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNl
YXJjaCBmb3Igc3VjaCBhIHJlZ2lzdGVyIHJpZ2h0IG5vdy4KKworICAgIGF1dG8gbW92ZUZvcldp
ZHRoID0gWyZdIChBcmc6OldpZHRoIHdpZHRoKSAtPiBPcGNvZGUgeworICAgICAgICBzd2l0Y2gg
KHdpZHRoKSB7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJu
IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUzMiA6IE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBBcmc6
OldpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1v
dmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIE9wY29kZSBjb25zZXJ2YXRp
dmVNb3ZlID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOworCisg
ICAgLy8gV2Ugd2lsbCBlbWl0IHRoaW5ncyBpbiByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qg
b2YgcGFja3Mgb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB3ZSBlbWl0CisgICAgLy8gYXBwZW5k
IHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSAoZm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBl
bmQgb2YgcmVzdWx0UGFja3MgaXMgcGxhY2VkCisgICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1
bCBiZWNhdXNlIHRoZSBsYXN0IHRoaW5nIHdlIGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9u
IHJlZ2lzdGVycywgc28KKyAgICAvLyBpdCBhZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZv
cmUgaXQuCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0Pj4gcmVzdWx0UGFja3M7CisgICAgVmVjdG9y
PEluc3Q+IHJlc3VsdDsKKworICAgIGF1dG8gY29tbWl0UmVzdWx0ID0gWyZdICgpIHsKKyAgICAg
ICAgcmVzdWx0UGFja3MuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgfTsKKworICAgIGF1
dG8gZ2V0U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gp
IC0+IFRtcCB7CisgICAgICAgIGlmIChzY3JhdGNoZXNbaW5kZXhdLmlzVG1wKCkpCisgICAgICAg
ICAgICByZXR1cm4gc2NyYXRjaGVzW2luZGV4XS50bXAoKTsKKworICAgICAgICBpZiAoIXBvc3Np
YmxlU2NyYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3Jh
dGNoZXNbaW5kZXhdKSk7CisgICAgICAgIHJldHVybiBwb3NzaWJsZVNjcmF0Y2g7CisgICAgfTsK
KworICAgIGF1dG8gcmV0dXJuU2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXAp
IHsKKyAgICAgICAgaWYgKEFyZyh0bXApICE9IHNjcmF0Y2hlc1tpbmRleF0pCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNb
aW5kZXhdLCB0bXApKTsKKyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0g
KGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyLCB1bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKKyAgICAg
ICAgT3Bjb2RlIG1vdmUgPSBtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0
KCkua2luZCgpKSkgeworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPQorICAgICAgICAgICAgICAg
IGdldFNjcmF0Y2goc2NyYXRjaEluZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIHBhaXIu
c3JjKCksIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gp
OworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBB
cmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0
aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHBhaXIuc3JjKCksIHNjcmF0Y2gpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzU29tZUltbSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobW92ZSA9PSBNb3ZlMzIpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlLCBvcmlnaW4sIEFyZzo6aW1tNjQocGFpci5zcmMo
KS52YWx1ZSgpKSwgc2NyYXRjaCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gs
IHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmUsIG9yaWdpbiwgcGFpci5zcmMoKSwgcGFpci5kc3Qo
KSkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRsZVNoaWZ0ID0gWyZdIChWZWN0b3I8U2h1ZmZs
ZVBhaXI+JiBzaGlmdCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXplKCk7
IGktLTspCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisgICAg
ICAgIEFyZyBsYXN0RHN0ID0gc2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFzdERz
dC5pc1RtcCgpKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hlcykg
eworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAgICAg
ICAgICAgIGlmICghc2NyYXRjaC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0
Y2ggPSBsYXN0RHN0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3QgaGFu
ZGxlIHNoaWZ0cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2Ug
ZnJlZSB1cCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0
aGUgZmluYWwgc2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlm
dHMgd2lsbCBiZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFu
eXRoaW5nIGVtaXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4K
KyAgICAvLyByZXZlcnNlKS4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAg
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlm
IChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNo
aWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRs
ZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMp
IHsKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAg
ICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRs
ZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9y
IChWZWN0b3I8U2h1ZmZsZVBhaXI+JiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGJvb2wg
Y2FuU3dhcCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIEFy
Zzo6V2lkdGggc3dhcFdpZHRoID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3VzIHZhbHVlCisgICAgICAg
IAorICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICBzd2FwID0gU3dh
cDMyOworICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAg
Zm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAocGFpci53aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDY0OgorICAgICAgICAgICAgICAgICAgICBzd2FwID0gU3dhcDY0OworICAgICAgICAgICAgICAg
ICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fu
U3dhcCA9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OlRtcCk7CisgICAgICAgICAg
ICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBhaXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJn
OjpBZGRyKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2Fw
cGluZyBwYXRoIGlmIHRoZXJlIGlzIGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gc2h1ZmZsZXMgaW52b2x2ZSBtZW1vcnkuIFRoYXQgZ2V0cyB0
b28gY29uZnVzaW5nLgorICAgICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRo
KCkgPCBzd2FwV2lkdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSByb3RhdGUuc2l6ZSgpIC0gMTsgaS0tOykgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0
ID0gcm90YXRlW2ldLnNyYygpOworICAgICAgICAgICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZVtp
ICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJp
Z2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
aXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFy
ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxz
IGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9z
c2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3Jh
dGNoLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92
ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRjaCwgbGVmdCkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVm
dC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChz
d2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChw
YWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6Oldp
ZHRoMzIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6
OldpZHRoNjQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNU
bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0
ZW5zaW9uLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdp
biwgcGFpci5kc3QoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gV2UgY2FuIHRyZWF0IHRoaXMgYXMgYSBzaGlmdCBzbyBsb25n
IGFzIHdlIHRha2UgdGhlIGxhc3QgZGVzdGluYXRpb24gKGkuZS4gZmlyc3QKKyAgICAgICAgICAg
IC8vIHNvdXJjZSkgYW5kIHNhdmUgaXQgZmlyc3QuIFRoZW4gd2UgaGFuZGxlIHRoZSBmaXJzdCBl
bnRyeSBpbiB0aGUgcGFpciBpbiB0aGUgcm90YXRlCisgICAgICAgICAgICAvLyBzcGVjaWFsbHks
IGFmdGVyIHdlIHJlc3RvcmUgdGhlIGxhc3QgZGVzdGluYXRpb24uIFRoaXMgcmVxdWlyZXMgc29t
ZSBzcGVjaWFsIGNhcmUgdG8KKyAgICAgICAgICAgIC8vIGZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVy
LiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHJvdGF0ZSB0aGF0IHVzZXMgdGhlIGVudGly
ZQorICAgICAgICAgICAgLy8gYXZhaWxhYmxlIHJlZ2lzdGVyIGZpbGUuCisKKyAgICAgICAgICAg
IFRtcCBzY3JhdGNoID0gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgICAgICAgICB0eXBl
LAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWly
LmRzdCgpLnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRT
Y3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2ZSA9IHNjcmF0
Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcihTaHVmZmxlUGFpcihyb3RhdGUubGFzdCgpLmRzdCgpLCByb3Rh
dGVTYXZlLCByb3RhdGVbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSByb3RhdGUuc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVT
aGlmdFBhaXIocm90YXRlW2ldLCAxKTsKKworICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKFNo
dWZmbGVQYWlyKHJvdGF0ZVNhdmUsIHJvdGF0ZVswXS5kc3QoKSwgcm90YXRlWzBdLndpZHRoKCkp
LCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJu
U2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbW1pdFJlc3VsdCgp
OworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0
b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFp
cnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6
YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pCit7CisgICAgVmVj
dG9yPFNodWZmbGVQYWlyPiBncFBhaXJzOworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnBQYWly
czsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAg
aWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkgJiYgcGFp
ci53aWR0aCgpID4gQXJnOjpwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gOC1ieXRl
IG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJlIGJlc3QgaGFu
ZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHBhaXIuc3JjKCkuaXNHUCgpICYmIHBhaXIuZHN0KCkuaXNHUCgp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRzIG1lbW9yeS10
by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAgICAgICAgICAg
IC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhjZXB0IGluIHRo
ZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVuZChwYWlyKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICB9
CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1p
dFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQLCBvcmlnaW4pKTsKKyAgICByZXN1
bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGZwUGFpcnMsIGZwU2NyYXRjaCwgQXJnOjpGUCwg
b3JpZ2luKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNo
dWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2lu
Y2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBk
c3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1f
ZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBk
c3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWlu
ZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9y
IFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3Zl
MzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVE
b3VibGUuCisgICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFy
Zzo6V2lkdGg4IH07Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUu
IFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFz
CisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJz
IG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8vIHJlZ2lzdGVy
cyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5
cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBzaHVmZmxlIC0g
dGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRjaCByZWdpc3Rl
cnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tpbmcgZm9yIHRo
ZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBzYWZlIHRvIHBh
c3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5nIGVpdGhlciBt
ZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMgYW4KKy8vIG9w
dGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9uLiBTb21lIG1v
cmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMgYXMgdGhpbmdz
IHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5vdCBvbmUgb2YK
Ky8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5nIGxpdmUgYmVm
b3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8gICBiZSB1c2Vk
IAorLy8KKy8vIC0gQSBzZWNvbmQgc2NyYXRjaCBsb2NhdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVu
IHlvdSBoYXZlIHNodWZmbGUgcGFpcnMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYm90aAorLy8gICBh
cyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uLgorLy8KKy8vIC0gWW91J3JlIGd1YXJhbnRlZWQgbm90
IHRvIG5lZWQgYW55IHNjcmF0Y2ggbG9jYXRpb25zIGlmIHRoZXJlIGlzIGEgU3dhcCBpbnN0cnVj
dGlvbiBhdmFpbGFibGUgZm9yCisvLyAgIHRoZSB0eXBlIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhbnkg
bWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFyZSBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5h
dGlvbiBvZgorLy8gICBzb21lIHBhaXJzLiBHUCBzdXBwb3J0cyBTd2FwIG9uIHg4NiB3aGlsZSBG
UCBuZXZlciBzdXBwb3J0cyBTd2FwLgorLy8KKy8vIC0gUGFzc2luZyBtZW1vcnkgbG9jYXRpb25z
IGFzIHNjcmF0Y2ggaWYgYXJlIHJ1bm5pbmcgZW1pdFNodWZmbGUoKSBiZWZvcmUgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBpcworLy8gICBzaWxseSwgc2luY2UgdGhhdCB3aWxsIGNhdXNlIGVtaXRTaHVm
ZmxlKCkgdG8gcGljayBzb21lIHNwZWNpZmljIHJlZ2lzdGVycyB3aGVuIGl0IGRvZXMgbmVlZAor
Ly8gICBzY3JhdGNoLiBPbmUgZWFzeSB3YXkgdG8gYXZvaWQgdGhhdCBwcmVkaWNhbWVudCBpcyB0
byBlbnN1cmUgdGhhdCB5b3UgY2FsbCBlbWl0U2h1ZmZsZSgpIGFmdGVyCisvLyAgIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEZvciB0aGlzIHJlYXNvbiB3ZSBjb3VsZCBhZGQgYSBTaHVmZmxlIGluc3Ry
dWN0aW9uIHNvIHRoYXQgd2UgY2FuIGRlZmVyCisvLyAgIHNodWZmbGluZ3MgdW50aWwgYWZ0ZXIg
cmVnYWxsb2MuCisvLworLy8gLSBTaHVmZmxlcyB3aXRoIG1lbW9yeT0+bWVtb3J5IHBhaXJzIGFy
ZSBub3QgdmVyeSB3ZWxsIHR1bmVkLiBZb3Ugc2hvdWxkIGF2b2lkIHRoZW0gaWYgeW91IHdhbnQK
Ky8vICAgcGVyZm9ybWFuY2UuIElmIHlvdSBuZWVkIHRvIGRvIHRoZW0sIHRoZW4gbWFraW5nIHN1
cmUgdGhhdCB5b3UgcmVzZXJ2ZSBhIHRlbXBvcmFyeSBpcyBvbmUgd2F5IHRvCisvLyAgIGdldCBh
Y2NlcHRhYmxlIHBlcmZvcm1hbmNlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4sIHN0ZDo6YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBBcmc6OlR5cGUs
IFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGludm9sdmVzIGFu
eSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0
aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3ZlLgorVmVj
dG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mLAor
ICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5
PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDgg
QEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
aCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKyNpbmNsdWRlICJBaXJMb3dl
ck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0
aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgpA
QCAtNjUsNiArNjcsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAg
ICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQogCisgICAgbG93ZXJNYWNyb3MoY29kZSk7CisK
ICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNm
b3JtYXRpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgpAQCAtODAsNiAr
ODQsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgZWxzZQog
ICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAorICAgIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhjb2RlKTsKKwogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xv
Z3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQg
YWxzbwogICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVz
IHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2
aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDExICszOCwxMSBAQCBjbGFzcyBDb2RlOwogCiAvLyBUaGlz
IHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24g
YW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5k
IGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi12b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENv
ZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYp
OwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4gQ0NhbGxIZWxw
ZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MKIC8vIGluIHRo
ZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcuCi12b2lkIGdlbmVyYXRlKENvZGUm
LCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoQ29kZSYs
IENDYWxsSGVscGVycyYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9u
U2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMp
Cit7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydElu
c3QoaW5kZXgsIGluc3QpOworfQorCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6
ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3Qg
OiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisK
IHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1
YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4o
aW5zdCkpKTsKICAgICB9CisKKyAgICB2b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29u
c3QgVmVjdG9yPEluc3Q+Jik7CisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIFZl
Y3RvcjxJbnN0PiYmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDE1IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8fCBhcmdzLnNp
emUoKTsgfQogCisgICAgdm9pZCBhcHBlbmQoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJnIGFyZywgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGFw
cGVuZChhcmd1bWVudHMuLi4pOworICAgIH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5j
dG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0g
Zm9yIHRoaW5ncyB0aGF0CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVk
OyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQog
ICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5
LmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2Mi
KTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOworCisg
ICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2
ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWdpc3RlclNldCBz
ZXQ7CisKKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qub3Bj
b2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2Fs
Q2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdElu
ZGV4KTsKKworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYXV0byBnZXRTY3JhdGNoZXMgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyU2V0JiBz
ZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywgMj4geworICAgICAgICBzdGQ6
OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0g
VG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3Rh
Y2soCisgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAg
IC8vIE5vdyB0cmFuc2Zvcm0gdGhlIGNvZGUuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgU2h1ZmZsZTogeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdp
c3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBh
aXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJn
c1tpICsgMF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFd
OworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAy
XS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQuc2V0KHNyYy5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdl
dFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJn
LCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdp
bikpOworICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CisgICAg
ICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1
ZT4oKTsKKworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZVVzZWQ7CisgICAgICAgICAg
ICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlv
bihjb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0
KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rv
cjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIEFyZyBz
cmMgPSBpbnN0LmFyZ3NbcmVzdWx0ID8gKGkgPj0gMSA/IGkgKyAxIDogaSkgOiBpIF07CisgICAg
ICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBk
c3QsIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmMuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByZVVzZWQuc2V0KHNyYy5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdl
dFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5
PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6RlApOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1NhdmUgPSB1
c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisKKyAgICAgICAgICAgICAgICAvLyBBbHNvIG5lZWQg
dG8gc2F2ZSBhbGwgbGl2ZSByZWdpc3RlcnMuIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhl
IHJlc3VsdAorICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyLgorICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuY2xlYXIocmVzdWx0LnJl
ZygpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc3RhY2tTbG90czsKKyAg
ICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJnOjpieXRlcyh3aWR0aCks
IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWly
cy5hcHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNrU2xvdCksIHdpZHRoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVuZChzdGFja1Nsb3QpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRl
eCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikp
OworCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwgaW5zdC5vcmlnaW4s
IGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byBlbWl0
IGNvZGUgdG8gcmVzdG9yZSByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgcGFpcnMucmVzaXpl
KDApOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2xvdEluZGV4ID0gMDsKKyAgICAg
ICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcChyZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IHN0YWNrU2xvdHNb
c3RhY2tTbG90SW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQo
U2h1ZmZsZVBhaXIoQXJnOjpzdGFjayhzdGFja1Nsb3QpLCBhcmcsIHdpZHRoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpcihyZXN1bHQsIGluc3QuYXJnc1sxXSwgQXJnOjp3
aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLnNldChyZXN1bHQucmVnKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdwU2NyYXRjaCA9IGdldFNjcmF0
Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBmcFNjcmF0Y2ggPSBn
ZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAg
ICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gs
IGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisK
KyAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsK
KyAgICAgICAgICAgIH0pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxs
b2MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJBZnRlclJlZ0FsbG9j
X2gKKyNkZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1ZmZsZSBhbmQgQ29sZENDYWxsIGluc3RydWN0
aW9ucy4gVGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0byBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIKKy8v
IGFsbG9jYXRpb24uCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jv
cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVu
dGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Zv
aWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImxvd2VyTWFjcm9zIik7CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBD
Q2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4t
PmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5h
dGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKworICAgICAg
ICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxlLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gMCA6IDE7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlc3RpbmF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+
Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBl
bmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFy
Z3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOworICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmcoQXJnOjp3aWR0aEZv
ckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgsIFdURk1vdmUoc2h1ZmZsZUFy
Z3VtZW50cykpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2lu
ZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uc1swXSA9IGluc3QuYXJnc1swXTsKKworICAgICAgICAgICAgICAgIC8vIFNhdmUgd2hlcmUg
dGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0LgorICAgICAgICAgICAgICAg
IEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyBBcmcoKSA6IGluc3QuYXJn
c1sxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2Fs
bChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAgICAgICAgICAgICAgIFRt
cCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmxvYXQ6CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZUZs
b2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91YmxlLCB2YWx1ZSwgcmVzdWx0
LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGlu
c3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlLCB2YWx1
ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1h
Y3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93ZXJN
YWNyb3NfaAorI2RlZmluZSBBaXJMb3dlck1hY3Jvc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIEFpciBoYXMgc29tZSBvcGNvZGVzIHRoYXQgYXJlIHZlcnkgaGlnaC1sZXZl
bCBhbmQgYXJlIG1lYW50IHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGxvdy1sZXZlbAorLy8ga25v
d2xlZGdlIGluIHRoZSBCMy0+QWlyIGxvd2VyaW5nLiBUaGUgY3VycmVudCBleGFtcGxlIGlzIEND
YWxsLgorCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxv
d2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNiArNDA3
LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIK
ICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCit4ODY6IFN3YXAzMiBVRDpHOjMyLCBV
RDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKworeDg2XzY0OiBTd2FwNjQgVUQ6
Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRyCisKIE1vdmUzMiBVOkc6
MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgogICAgIEFkZHIs
IFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3ICs2ODAsMTkgQEAgUmV0RG91YmxlIFU6Rjo2NCAvcmV0
dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBTaHVmZmxlIGlzIGEgbXVsdGktc291cmNlLCBt
dWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11bHRhbmVvdXNseSBkb2VzIG11bHRpcGxlIG1v
dmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUgc3BlY2lmaWVkIGFzIHRyaXBsZXRzIG9mIHNy
YywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxlIHlvdSBjYW4gcmVxdWVzdCBhIHN3YXAgdGhp
cworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAxLCAldG1wMiwgNjQsICV0bXAyLCAldG1wMSwg
NjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBB
IFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBv
cGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgogY3VzdG9tIFBhdGNo
CiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxvd2VyaW5nIEMgY2FsbHMuIFRoZXNlIGRvbid0
IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRoZXkgZ2V0IGxvd2VyZWQgdG8KKyMgc29tZXRo
aW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFsdWUgbXVzdCBiZSBhIENDYWxsVmFsdWUuCitj
dXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNpb24gMTk0
ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBjb25zdCBWZWN0b3I8dHlwZW5hbWUgQmFu
azo6UmVnaXN0ZXJUeXBlCiAgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5r
Pjo6aW5Qcmlvcml0eU9yZGVyKCk7CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlv
cml0eU9yZGVyKEFyZzo6VHlwZSk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBWZWN0b3I8UmVn
PiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWly
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVk
ZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2lu
Y2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKKy8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RP
X0VYSVQsIG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgorc3RhdGljIGJvb2wgaGlk
ZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KKworc3Rh
dGljIHZvaWQgdXNhZ2UoKQoreworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0YjMgWzxmaWx0ZXI+
XVxuIik7CisgICAgaWYgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAg
ICAgICAgZXhpdCgxKTsKK30KKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOworCituYW1lc3BhY2UgeworCitT
dGF0aWNMb2NrIGNyYXNoTG9jazsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0
IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNL
KHgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGlmICghISh4KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNyYXNoTG9j
ay5sb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKKworVk0qIHZtOworCitzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBj
b21waWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCit7CisgICAgcHJlcGFyZUZvckdlbmVyYXRpb24o
cHJvYy5jb2RlKCkpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHBy
b2MuY29kZSgpLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVs
bHB0cik7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAor
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIp
KSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBpbnZva2UoY29uc3QgQjM6OkNvbXBpbGF0aW9uJiBj
b2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFQgKCpmdW5jdGlvbikoQXJndW1l
bnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBp
bGVBbmRSdW4oQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQoreworICAgIHJldHVybiBpbnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRz
Li4uKTsKK30KKwordm9pZCB0ZXN0U2ltcGxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oNDIpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVNpbXBsZVN3YXAoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgxKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAg
ICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhp
bmdzWzJdID09IDQpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNV07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIo
YmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9v
dC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVD
SyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAx
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDUpLCBU
bXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oNiksIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSg3KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDgpLCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdU
NyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRk
cihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
Mik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0
KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYp
OworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdT
aGlmdEJhY2t3YXJkcygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNSksIFRtcChHUFJJbmZvOjpyZWdUNCkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg2KSwgVG1wKEdQUklu
Zm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDcp
LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oOCksIFRtcChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1w
KEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpy
ZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0g
Y29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRk
cihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRk
cihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRk
cihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGlu
Z3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5n
c1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdz
WzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlUm90YXRlKCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCks
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAg
ICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA0KTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEp
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdz
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMzUpLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDE7CisgICAgZm9yIChSZWcgcmVnIDogcmVn
cykgeworICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAgICAgICAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oY291bnQrKyksIFRtcChyZWcp
KTsKKyAgICB9CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxs
cHRyKTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7CisgICAgICAgIGlmIChyZWcgIT0gUmVn
KEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgIH0K
KworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90
KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCks
IDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpz
dGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgZm9yIChpbnQzMl90IHRoaW5nIDogdGhpbmdzKQorICAgICAgICBDSEVD
Syh0aGluZyA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnQoKQoreworICAg
IEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJ
bmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0
KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDUpLCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oNiksIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg3KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDgpLCBUbXAoR1BSSW5m
bzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBp
bnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJh
c2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJh
c2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAgIENIRUNL
KHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAgQ0hFQ0so
dGhpbmdzWzZdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdU
MykpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg1KSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
KDYpLCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW0oNyksIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSg4KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9v
dC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwg
VG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbOF07Cisg
ICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwg
YmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFz
ZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFz
ZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFz
ZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKwor
ICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSygh
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsK
KyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s2XSA9PSAzKTsKKyAg
ICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnRP
dGhlckJhY2t3YXJkKCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIHRlc3Qgd2FzIG15IG9yaWdpbmFs
IGF0dGVtcHQgYXQgVHJlZVNoaWZ0QmFja3dhcmQgYnV0IG1pc3Rha2VzIHdlcmUgbWFkZS4gU28s
IHRoaXMKKyAgICAvLyBlbmRzIHVwIGJlaW5nIGp1c3QgYSB3ZWlyZCB0ZXN0LiBCdXQgd2VpcmQg
dGVzdHMgYXJlIHVzZWZ1bCwgc28gSSBrZXB0IGl0LgorICAgIAorICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDUpLCBU
bXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oNiksIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSg3KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDgpLCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDUpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNyksIFRtcChHUFJJbmZvOjpyZWdU
MSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRk
cihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSA4KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
OCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDcpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA3
KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYp
OworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZU11bHRp
cGxlU2hpZnRzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9
IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg1KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDYpLCBUbXAoR1BSSW5mbzo6
cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdU
NSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVDSyh0aGlu
Z3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDMpOworICAgIENIRUNLKHRoaW5n
c1s1XSA9PSAxKTsKK30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB0YXNrcy5hcHBlbmQoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KCAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgIFsmXSAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCN0ZXN0ICIuLi5cbiIpOyAgICAgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0
OyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCN0
ZXN0ICI6IE9LIVxuIik7ICAgXAorICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0g
JlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBEZXF1ZTxSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7CisKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29u
c3QgY2hhciogdGVzdE5hbWUpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAh
IXN0cmNhc2VzdHIodGVzdE5hbWUsIGZpbHRlcik7CisgICAgfTsKKworICAgIFJVTih0ZXN0U2lt
cGxlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKSk7CisgICAgUlVOKHRlc3RT
aHVmZmxlU2ltcGxlU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkpOwor
ICAgIFJVTih0ZXN0U2h1ZmZsZUxvbmdTaGlmdEJhY2t3YXJkcygpKTsKKyAgICBSVU4odGVzdFNo
dWZmbGVTaW1wbGVSb3RhdGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKSk7CisgICAgUlVOKHRl
c3RTaHVmZmxlVHJlZVNoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3
YXJkKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVRyZWVTaGlmdE90aGVyQmFja3dhcmQoKSk7Cisg
ICAgUlVOKHRlc3RTaHVmZmxlTXVsdGlwbGVTaGlmdHMoKSk7CisKKyAgICAvLyBTdGlsbCBuZWVk
IHRoZSBmb2xsb3dpbmcgdGVzdHM6CisgICAgLy8gLSBtdWx0aXBsZSBzaGlmdHMKKyAgICAvLyAt
IG11bHRpcGxlIHJvdGF0ZXMKKyAgICAvLyAtIHNoaWZ0IGFuZCByb3RhdGUKKyAgICAvLyAtIHNo
aWZ0IG92ZXIgYWxsIHJlZ2lzdGVycworICAgIC8vIC0gcm90YXRlIG92ZXIgYWxsIHJlZ2lzdGVy
cworICAgIC8vIC0gcm90YXRlIHdpdGggbXVsdGlwbGUgd2lkdGhzCisgICAgLy8gLSBtZW1vcnkg
c2hpZnQKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5IHNoaWZ0CisgICAgLy8gLSBtZW1vcnktPm1l
bW9yeSBzaGlmdCB3aXRoIG5vIHNwYXJlIHJlZ2lzdGVycworICAgIC8vIC0gbWVtb3J5IHJvdGF0
ZQorICAgIC8vIC0gbWVtb3J5IHJvdGF0ZSB3aXRoIG11bHRpcGxlIHdpZHRocworICAgIC8vIC0g
bWVtb3J5LT5tZW1vcnkgcm90YXRlCisgICAgLy8gLSBtZW1vcnktPm1lbW9yeSByb3RhdGUgd2l0
aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUgd2l0aCBubyBzcGFyZSBy
ZWdpc3RlcnMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUgd2l0aCBubyBzcGFyZSByZWdpc3RlcnMg
d2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5IHJvdGF0ZSB3aXRo
IG5vIHNwYXJlIHJlZ2lzdGVycworICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgcm90YXRlIHdpdGgg
bm8gc3BhcmUgcmVnaXN0ZXJzIHdpdGggbXVsdGlwbGUgd2lkdGhzCisgICAgLy8gLSBmbG9hdGlu
ZyBwb2ludAorCisgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgdXNhZ2UoKTsKKwor
ICAgIExvY2sgbG9jazsKKworICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29y
Q29yZXMoKTsgaS0tOykgeworICAgICAgICB0aHJlYWRzLmFwcGVuZCgKKyAgICAgICAgICAgIGNy
ZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCisgICAgICAgICAg
ICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza3MuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2tzLnRha2VGaXJzdCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT5ydW4oKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICB9CisKKyAg
ICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBjcmFzaExvY2subG9jaygpOworfQorCit9
IC8vIGFub255bW9pcyBuYW1lc3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkKKworc3Rh
dGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQoreworICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3Qg
ZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IG51bGxw
dHI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2FzZSAxOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFyZ3ZbMV07CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBydW4oZmlsdGVyKTsKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268906</attachid>
            <date>2016-01-13 14:59:34 -0800</date>
            <delta_ts>2016-01-13 18:43:09 -0800</delta_ts>
            <desc>fixed the &quot;fringe&quot; case</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147139</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMjIgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE0NCw5IEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdp
ZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE5Nyw5
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmci
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjUsMTYgKzI2NCwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0
aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7
CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnBy
aW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDExIEBA
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNs
YXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwK
LSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFyZwogICAg
IH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7CisgICAgICAg
IGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3QgewogICAgICAg
ICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAg
ICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIENv
bGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBMYXRlQ29s
ZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CkBAIC01NDksNiArNTgxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdpZHRoQXJnOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSB3aWR0aDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApAQCAtNTg1LDYgKzYyNSwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CiAgICAgfQogCisg
ICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1tKCkg
fHwgaXNJbW02NCgpOworICAgIH0KKwogICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTYwNSw2ICs2NTAsMjEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNN
ZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaXNTdGFja01lbW9yeSgpIGNvbnN0OworCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNjM3LDYgKzY5
NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKICAgICB9
CiAKKyAgICBib29sIGlzV2lkdGhBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9CisKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpAQCAtNjgwLDE4ICs3NDUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBBZGRyOgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6
Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5KCk7IH0KICAgICAKICAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtNzMwLDYgKzc4NCwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQp
OwogICAgIH0KIAorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gV2lkdGhBcmcpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lkdGg+
KG1fb2Zmc2V0KTsKKyAgICB9CisKICAgICBib29sIGlzR1BUbXAoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAtNzU0LDYgKzgxNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6
CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAgICAgIHJldHVybiBp
c0dQVG1wKCk7CkBAIC03NzEsNiArODMyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0Nv
bmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAg
ICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTgxMiw2ICs4NzQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sIGNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0OworCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTUzLDYgKzEwMTcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NCw2ICsxMDM5LDggQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCB1c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7
CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBh
cmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQg
bmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAgIC8vCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgSW5zdExpc3QmIGluc3Rz
KCkgeyByZXR1cm4gbV9pbnN0czsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KLSAg
ICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgSW5zdCYgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKICAgICB7CiAgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0
PihpbnN0KSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBhcHBlbmQoQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIEluc3QmIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICAgICAgcmV0dXJuIG1faW5zdHMubGFzdCgpOwog
ICAgIH0KIAogICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29u
dmVudGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorQXJnIG1h
cnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3VtZW50Q291bnQsIHVuc2lnbmVk
JiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXggPSBhcmd1bWVudENvdW50Kys7CisgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBCYW5rSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIFRtcChCYW5rSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKKworICAgIHVuc2lnbmVkIHNsb3RT
aXplOworICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgeworICAgICAgICAvLyBBcmd1bWVu
dHMgYXJlIHBhY2tlZC4KKyAgICAgICAgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNoaWxkLT50eXBl
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWxpZ25lZC4KKyAg
ICAgICAgc2xvdFNpemUgPSA4OworICAgIH0KKworICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7CisgICAgQXJnIHJlc3VsdCA9
IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7CisgICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCgKKyAg
ICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgZnBBcmd1bWVudENvdW50LCB1
bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICBzd2l0Y2ggKEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNhc2UgQXJnOjpHUDoKKyAgICAg
ICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BSSW5mbz4oZ3BBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgY2hpbGQpOworICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgcmV0
dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCwgY2hpbGQpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBBcmcoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYgY29kZSwgQ0NhbGxW
YWx1ZSogdmFsdWUpCit7CisgICAgVmVjdG9yPEFyZz4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBl
bmQoVG1wKENDYWxsU3BlY2lhbDo6c2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgdW5zaWduZWQgZ3BB
cmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAg
IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
dmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAg
ICAgICAgICAgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVu
dENvdW50LCBzdGFja09mZnNldCwgdmFsdWUtPmNoaWxkKGkpKSk7CisgICAgfQorICAgIGNvZGUu
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Rt
cCBjQ2FsbFJlc3VsdChUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBWb2lkOgorICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgY2FzZSBJbnQzMjoKKyAgICBjYXNl
IEludDY0OgorICAgICAgICByZXR1cm4gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICBjYXNlIEZsb2F0OgorICAgIGNhc2UgRG91YmxlOgorICAgICAgICByZXR1cm4gVG1wKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUbXAoKTsKK30KKworSW5zdCBidWlsZENDYWxsKENvZGUmIGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+JiBhcmd1bWVudHMpCit7CisgICAg
SW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChjb2RlLmNDYWxsU3BlY2lhbCgp
KSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChhcmd1bWVudHNbMF0pOworICAgIGluc3QuYXJncy5h
cHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgaW5zdC5hcmdzLmFwcGVu
ZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFyZyBhcmcgPSBhcmd1bWVudHNb
aV07CisgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBl
bmQoYXJnKTsKKyAgICB9CisgICAgcmV0dXJuIGluc3Q7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsaW5n
Q29udmVudGlvbl9oCisjZGVmaW5lIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENDYWxsVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50
aW9uKENvZGUmLCBDQ2FsbFZhbHVlKik7CisKK1RtcCBjQ2FsbFJlc3VsdChUeXBlKTsKKworSW5z
dCBidWlsZENDYWxsKENvZGUmLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8QXJnPiYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDEyICs1
NSwxMyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2MoKSB7IHJldHVybiBtX3Byb2M7
IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5IG9uIHN0YWNrIHNsb3RzIGFs
d2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGluZGV4CiAgICAg
Ly8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3Ug
Y3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4CiAgICAgLy8gdGhhdCBpcyA+
PSBzdGFja1Nsb3RzKCkuc2l6ZSgpLgotICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgKKyAgICAgICAg
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxw
dHIpOwogICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVlKik7CiAKICAg
ICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDdXN0b20uaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGlu
c3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1
ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
aW5zdC5hcmdzLnNpemUoKSAhPSAxICsgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxKSAr
IHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
aGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3IgaW1tZWRp
YXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJn
LmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAx
OworCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1t
ZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGlu
c3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWUqIGNoaWxk
ID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW29mZnNldCAr
IGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYs
IEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIEMg
Y2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cisg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZmbGVDdXN0b206
OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgJSAz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9uIG1heSBvbmx5
IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9pZCB0aGUgdW5k
ZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24gdGhhdCBpcyBz
dXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJdCBhbHNvCisg
ICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRoZSAic2hhcGUi
IG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAgIC8vIGFzIGFu
IGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVzdGluYXRpb24g
cmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBoIGNvbnNpc3Rz
IG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNwYW5uaW5nIHRy
ZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgYXMgYSBzZXF1
ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVzdWFsbHkgcmVx
dWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2VkIGxvb3BzLiBU
aGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vzc29yIGFuZCBv
bmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8gImdldCBpbnRv
IiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVjdXRlZCB1c2lu
ZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0byBhIHNjcmF0
Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhhc2hTZXQ8QXJn
PiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICB1bnNpZ25l
ZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAgICAgICAgICAg
Ly8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRoQXJnKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlhdGUuCisgICAg
ICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0oKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChtb2RlID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3RW50cnkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGFyZy5pc1RtcCgpIHx8IGFyZy5pc1N0YWNrTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0NDYWxsSGVscGVyczo6SnVtcCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFU
QUw6IFVubG93ZXJlZCBzaHVmZmxlOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgog
I2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiArNTIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0
byBjYXJyeSBleHRyYSBzdGF0ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNw
ZWNpYWxzIG1lYW4gdGhhdCB5b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVu
IGluIG1ldGhvZHMgdGhhdCBkb24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERl
ZmluaXRpb24gb2YgUGF0Y2ggaW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUg
dGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0
LCB3aGljaCB3aWxsIGJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBz
dHJ1Y3QgUGF0Y2hDdXN0b20gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQpAQCAtOTYsNiArOTksMTEzIEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAor
Ly8gRGVmaW5pdGlvbiBvZiBDQ2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90
IHBhdGggQyBmdW5jdGlvbiBjYWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGgg
YW4gQWlyIENDYWxsU3BlY2lhbCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlv
bnMuIFRoZSBsb3dlcmluZyBoYXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwg
c28gdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0
IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRp
YyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsrXSwgQXJn
OjpVc2UsIEFyZzo6R1AsIEFyZzo6cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAgICAgICAg
CisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgIGZ1bmN0
b3IoCisgICAgICAgICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwKKyAgICAg
ICAgICAgICAgICBBcmc6OnR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAgICAgICAg
ICAgICAgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAg
ICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpV
c2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAor
ICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBj
YWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0Nh
bGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0
eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZs
ZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9p
ZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAg
IEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSAr
IDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Cisg
ICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRo
KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6
OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMo
SW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGlj
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3Np
YmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3NpYmxlU2Ny
YXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsK
KyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAg
WyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1w
KHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30KKworLy8gRXhhbXBs
ZTogKGEgPT4gYiwgYiA9PiBhLCBhID0+IGMsIGIgPT4gZCkKK3N0cnVjdCBSb3RhdGUgeworICAg
IFZlY3RvcjxTaHVmZmxlUGFpcj4gbG9vcDsgLy8gaW4gdGhlIGV4YW1wbGUsIHRoaXMgaXMgdGhl
IGxvb3A6IChhID0+IGIsIGIgPT4gYSkKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZyaW5nZTsg
Ly8gaW4gdGhlIGV4YW1wbGUsIHRoZXNlIGFyZSB0aGUgYXNzb2NpYXRlZCBzaGlmdHM6IChhID0+
IGMsIGIgPT4gZCkKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFNodWZm
bGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHdp
ZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRT
aHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAy
PiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQoreworICAgIHBhaXJz
LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09IHBhaXIuZHN0KCk7
CisgICAgICAgIH0pOworICAgIAorICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBpcyB0
aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAgIGZv
ciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFp
ci5zcmMoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5cGUo
dHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpIHx8IHBhaXIuZHN0KCku
aXNNZW1vcnkoKSk7CisgICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBraW5k
cyBvZiBvcGVyYXRpb25zIHRoYXQgd2Ugd2lsbCBkbzoKKyAgICAvLworICAgIC8vIC0gU2hpZnQu
IEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYykuIFdlIGVtaXQgdGhpcyBhcyAiTW92ZSBiLCBjOyBN
b3ZlIGEsIGIiLiBUaGlzIG9ubHkgcmVxdWlyZXMKKyAgICAvLyAgIHNjcmF0Y2ggcmVnaXN0ZXJz
IGlmIHRoZXJlIGFyZSBtZW1vcnktPm1lbW9yeSBtb3Zlcy4gV2Ugd2FudCB0byBmaW5kIGFzIG1h
bnkgb2YgdGhlc2UgYXMKKyAgICAvLyAgIHBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgY2hlYXBl
ci4gTm90ZSB0aGF0IHNoaWZ0cyBjYW4gaW52b2x2ZSB0aGUgc2FtZSBzb3VyY2UgbWVudGlvbmVk
CisgICAgLy8gICBtdWx0aXBsZSB0aW1lcy4gRXhhbXBsZTogKGEgPT4gYiwgYSA9PiBjLCBiID0+
IGQsIGIgPT4gZSkuCisgICAgLy8KKyAgICAvLyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4gYiwg
YiA9PiBhKS4gV2Ugd2FudCB0byBlbWl0IHRoaXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0IGlu
c3RydWN0aW9uCisgICAgLy8gICBtYXkgbm90IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB3
ZSBtYXkgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAgIC8v
ICAgbG9jYXRpb24uIEEgZ25hcmxpZXIgZXhhbXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMgPT4g
YSkuIFdlIGNhbiBlbWl0IHRoaXMgYXMgIlN3YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwgYiIu
IE5vdGUgdGhhdCBzd2FwcGluZyBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcgd2lk
dGhzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGEgcm90YXRlIGNhbiBoYXZlICJmcmluZ2Ui
LiBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgaGF2ZSAoYSA9PiBiLCBiID0+IGEsIGEgPT5jLAorICAg
IC8vIGIgPT4gZCkuIFRoaXMgaGFzIGEgcm90YXRlIGxvb3AgKGEgPT4gYiwgYiA9PiBhKSBhbmQg
c29tZSBmcmluZ2UgKGEgPT4gYywgYiA9PiBkKS4gV2UgdHJlYXQKKyAgICAvLyB0aGUgd2hvbGUg
dGhpbmcgYXMgYSBzaW5nbGUgcm90YXRlLgorICAgIC8vCisgICAgLy8gV2Ugd2lsbCBmaW5kIG11
bHRpcGxlIGRpc2pvaW50IHN1Y2ggb3BlcmF0aW9ucy4gV2UgY2FuIGV4ZWN1dGUgdGhlbSBpbiBh
bnkgb3JkZXIuCisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgTW92ZXMgdGhhdCBzaG91
bGQgYmUgZXhlY3V0ZWQgYmFja3dhcmRzLiBBbGwgc2hpZnRzIGFyZSBrZXllZCBieSB0aGVpcgor
ICAgIC8vIHN0YXJ0aW5nIHNvdXJjZS4KKyAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQ
YWlyPj4gc2hpZnRzOworCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3YXBzIG92ZXIg
c3JjKCkncyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4gZm9yIGEgbGlz
dAorICAgIC8vIG9mIHNpemUgMyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNyYygpLCBsaXN0
WzJdLnNyYygpOyBTd2FwIGxpc3RbMF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgorICAgIC8vIE5v
dGUgdGhhdCB3ZSBhY3R1YWxseSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMgZG9uJ3QgbWF0
Y2ggb3Igb3RoZXIgYmFkIHRoaW5ncyBoYXBwZW4uCisgICAgLy8gQnV0LCBwcmlvciB0byBleGVj
dXRpbmcgYWxsIG9mIHRoYXQsIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgZnJpbmdlOiB0aGUgc2hp
ZnRzIGNvbW1pbmcgb2ZmIHRoZQorICAgIC8vIHJvdGF0ZS4KKyAgICBWZWN0b3I8Um90YXRlPiBy
b3RhdGVzOworCisgICAgeworICAgICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWly
Pj4gbWFwcGluZzsKKyAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJz
KQorICAgICAgICAgICAgbWFwcGluZy5hZGQocGFpci5zcmMoKSwgVmVjdG9yPFNodWZmbGVQYWly
PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHBhaXIpOworCisgICAgICAgIFZlY3RvcjxTaHVm
ZmxlUGFpcj4gY3VycmVudFBhaXJzOworCisgICAgICAgIHdoaWxlICghbWFwcGluZy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuaXNFbXB0eSgpKTsKKyAgICAg
ICAgICAgIEFyZyBvcmlnaW5hbFNyYyA9IG1hcHBpbmcuYmVnaW4oKS0+a2V5OworICAgICAgICAg
ICAgQVNTRVJUKCFzaGlmdHMuY29udGFpbnMob3JpZ2luYWxTcmMpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8QXJnPiB3b3JrbGlzdDsKKyAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2gob3JpZ2luYWxTcmMpOworICAgICAgICAgICAgd2hpbGUgKEFyZyBzcmMg
PSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8
U2h1ZmZsZVBhaXI+Pjo6aXRlcmF0b3IgaXRlciA9IG1hcHBpbmcuZmluZChzcmMpOworICAgICAg
ICAgICAgICAgIGlmIChpdGVyID09IG1hcHBpbmcuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2l0aCBhIHNoaWZ0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBwcmV2aW91c2x5IGJ1aWx0
IHRoZSB0YWlsIG9mIHRoaXMgc2hpZnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0
aGF0J3MgdGhlIGNhc2Ugbm93LgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBw
ZW5kVmVjdG9yKHNoaWZ0cy50YWtlKHNyYykpOworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWly
PiBwYWlycyA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIG1hcHBpbmcu
cmVtb3ZlKGl0ZXIpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYg
cGFpciA6IHBhaXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmQo
cGFpcik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpID09IHNyYyk7Cisg
ICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gocGFpci5kc3QoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJz
LnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzWzBdLnNyYygpID09IG9y
aWdpbmFsU3JjKTsKKworICAgICAgICAgICAgYm9vbCBpc1JvdGF0ZSA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJlbnRQYWlycykgeworICAg
ICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpID09IG9yaWdpbmFsU3JjKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlzUm90YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNSb3Rh
dGUpIHsKKyAgICAgICAgICAgICAgICBSb3RhdGUgcm90YXRlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIFRoZSBjb21tb24gY2FzZSBpcyB0aGF0IHRoZSByb3RhdGUgZG9l
cyBub3QgaGF2ZSBmcmluZ2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBsYXN0IGVsZW1lbnQgaXMgdGhlIHJvdGF0ZS4KKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFBhaXJzLmxhc3QoKS5kc3QoKSA9PSBvcmlnaW5hbFNyYykKKyAgICAgICAgICAgICAgICAg
ICAgcm90YXRlLmxvb3AgPSBXVEZNb3ZlKGN1cnJlbnRQYWlycyk7CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNsb3cgcGF0aC4gVGhl
IHJvdGF0ZSBoYXMgZnJpbmdlLiBXZSBmaWd1cmUgdGhpcyBvdXQgYnkgd29ya2luZworICAgICAg
ICAgICAgICAgICAgICAvLyBiYWNrd2FyZC4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIEhhc2hNYXA8QXJnLCBTaHVmZmxlUGFpcj4gZHN0TWFwcGluZzsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJlbnRQYWly
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1hcHBpbmcuYWRkKHBhaXIuZHN0KCksIHBh
aXIpOworCisgICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIgPSBkc3RNYXBwaW5n
LnRha2Uob3JpZ2luYWxTcmMpOworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcC5hcHBlbmQocGFpcik7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGRzdE1hcHBpbmcuZmluZChwYWlyLnNyYygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IGRzdE1hcHBpbmcuZW5kKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYWlyID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RNYXBwaW5n
LnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHJvdGF0ZS5sb29wLnJldmVyc2UoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgZnJpbmdlIGFwcGVhcnMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaG93IGl0
IGFwcGVhcmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50UGFpcnMsIHNp
bmNlIHRoYXQncyB0aGUgREZTIG9yZGVyLgorICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBCdXQgb2YgY291cnNlIHdlIG9ubHkgaW5jbHVkZSBpdCBpZiBpdCdzIG5vdCBpbiB0
aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc3RNYXBwaW5nLmNvbnRhaW5z
KHBhaXIuZHN0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5mcmluZ2Uu
YXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBncmFwaCBzZWFyY2gg
dGVybWluYXRlcyBiZWNhdXNlIHdlIHJldHVybmVkIHRvIHRoZSBmaXJzdCBzb3VyY2UsIHRoZW4g
dGhlCisgICAgICAgICAgICAgICAgLy8gcGFpciBsaXN0IGhhcyB0byBoYXZlIGEgdmVyeSBwYXJ0
aWN1bGFyIHNoYXBlLgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZS5s
b29wLnNpemUoKSAtIDE7IGktLTspCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyb3RhdGUu
bG9vcFtpXS5kc3QoKSA9PSByb3RhdGUubG9vcFtpICsgMV0uc3JjKCkpOworICAgICAgICAgICAg
ICAgIHJvdGF0ZXMuYXBwZW5kKFdURk1vdmUocm90YXRlKSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBzaGlmdHMuYWRkKG9yaWdpbmFsU3JjLCBXVEZNb3ZlKGN1cnJlbnRQ
YWlycykpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UsIHdl
IG5lZWQgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUgd2F5IHdlIGRvIHRoaXMgaXMgdGhhdCB0
aGUgY2xpZW50IHBhc3NlcworICAgIC8vIHVzIHdoYXQgc2NyYXRjaCByZWdpc3RlcnMgaGUgaGFw
cGVucyB0byBoYXZlIGxheWluZyBhcm91bmQuIFdlIHdpbGwgbmVlZCBzY3JhdGNoIHJlZ2lzdGVy
cyBpbgorICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgLy8KKyAgICAvLyAtIFNodWZm
bGUgcGFpcnMgd2hlcmUgYm90aCBzcmMgYW5kIGRzdCByZWZlciB0byBtZW1vcnkuCisgICAgLy8g
LSBSb3RhdGUgd2hlbiBubyBTd2FwIGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAvLwor
ICAgIC8vIEx1Y2t5IGZvciB1cywgd2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBleHRyYSBzY3Jh
dGNoIHJlZ2lzdGVycyBhbnl0aW1lIHdlIGhhdmUgYSBTaGlmdCB0aGF0CisgICAgLy8gZW5kcyB3
aXRoIGEgcmVnaXN0ZXIuIFdlIHNlYXJjaCBmb3Igc3VjaCBhIHJlZ2lzdGVyIHJpZ2h0IG5vdy4K
KworICAgIGF1dG8gbW92ZUZvcldpZHRoID0gWyZdIChBcmc6OldpZHRoIHdpZHRoKSAtPiBPcGNv
ZGUgeworICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMy
OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUzMiA6IE1vdmVGbG9h
dDsKKyAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9
PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZvcldpZHRoKEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgodHlwZSkpOworCisgICAgLy8gV2Ugd2lsbCBlbWl0IHRoaW5ncyBpbiByZXZlcnNl
LiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFja3Mgb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB3
ZSBlbWl0CisgICAgLy8gYXBwZW5kIHRoZW0gdG9nZXRoZXIgaW4gcmV2ZXJzZSAoZm9yIGV4YW1w
bGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2YgcmVzdWx0UGFja3MgaXMgcGxhY2VkCisgICAgLy8g
Zmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSBsYXN0IHRoaW5nIHdlIGVtaXQgZnJl
ZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgc28KKyAgICAvLyBpdCBhZmZlY3RzIGhv
dyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQuCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0Pj4gcmVz
dWx0UGFja3M7CisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKworICAgIGF1dG8gY29tbWl0UmVz
dWx0ID0gWyZdICgpIHsKKyAgICAgICAgcmVzdWx0UGFja3MuYXBwZW5kKFdURk1vdmUocmVzdWx0
KSk7CisgICAgfTsKKworICAgIGF1dG8gZ2V0U2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgs
IFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRtcCB7CisgICAgICAgIGlmIChzY3JhdGNoZXNbaW5k
ZXhdLmlzVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaGVzW2luZGV4XS50bXAoKTsK
KworICAgICAgICBpZiAoIXBvc3NpYmxlU2NyYXRjaCkKKyAgICAgICAgICAgIHJldHVybiBUbXAo
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwg
cG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNbaW5kZXhdKSk7CisgICAgICAgIHJldHVybiBwb3Nz
aWJsZVNjcmF0Y2g7CisgICAgfTsKKworICAgIGF1dG8gcmV0dXJuU2NyYXRjaCA9IFsmXSAodW5z
aWduZWQgaW5kZXgsIFRtcCB0bXApIHsKKyAgICAgICAgaWYgKEFyZyh0bXApICE9IHNjcmF0Y2hl
c1tpbmRleF0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92
ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhdLCB0bXApKTsKKyAgICB9OworCisgICAgYXV0byBo
YW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyLCB1bnNpZ25lZCBz
Y3JhdGNoSW5kZXgpIHsKKyAgICAgICAgT3Bjb2RlIG1vdmUgPSBtb3ZlRm9yV2lkdGgocGFpci53
aWR0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0obW92ZSwgcGFpci5z
cmMoKS5raW5kKCksIHBhaXIuZHN0KCkua2luZCgpKSkgeworICAgICAgICAgICAgVG1wIHNjcmF0
Y2ggPQorICAgICAgICAgICAgICAgIGdldFNjcmF0Y2goc2NyYXRjaEluZGV4LCBmaW5kUG9zc2li
bGVTY3JhdGNoKHR5cGUsIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG1vdmUs
IHBhaXIuc3JjKCkua2luZCgpLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHBhaXIuc3JjKCks
IHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChw
YWlyLnNyYygpLmlzU29tZUltbSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobW92ZSA9PSBN
b3ZlMzIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlLCBvcmlnaW4s
IEFyZzo6aW1tNjQocGFpci5zcmMoKS52YWx1ZSgpKSwgc2NyYXRjaCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRo
KCkpLCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIHJldHVyblNj
cmF0Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmUsIG9yaWdpbiwg
cGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRsZVNoaWZ0
ID0gWyZdIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzaGlmdC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIo
c2hpZnRbaV0sIDApOworCisgICAgICAgIEFyZyBsYXN0RHN0ID0gc2hpZnQubGFzdCgpLmRzdCgp
OworICAgICAgICBpZiAobGFzdERzdC5pc1RtcCgpKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYg
c2NyYXRjaCA6IHNjcmF0Y2hlcykgeworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoICE9
IGxhc3REc3QpOworICAgICAgICAgICAgICAgIGlmICghc2NyYXRjaC5pc1RtcCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBsYXN0RHN0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlz
IGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBU
aGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwgc2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0
aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBiZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNj
cmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVtaXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2lu
Y2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyByZXZlcnNlKS4KKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogc2hpZnRzKSB7CisgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50
cnkudmFsdWU7CisgICAgICAgIGlmIChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAg
ICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAg
fQorCisgICAgLy8gTm93IGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAo
YXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hp
ZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAo
KSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0
KCk7CisgICAgfQorCisgICAgZm9yIChSb3RhdGUmIHJvdGF0ZSA6IHJvdGF0ZXMpIHsKKyAgICAg
ICAgaWYgKCFyb3RhdGUuZnJpbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHdlIGRvIHRoZSBmcmluZ2UgZmlyc3QhIFRoaXMgd29uJ3QgY2xvYmJlciBhbnkgb2YgdGhl
IHJlZ2lzdGVycyB0aGF0IGFyZQorICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgcm90YXRpb24u
CisgICAgICAgICAgICBoYW5kbGVTaGlmdChyb3RhdGUuZnJpbmdlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBjYW5Td2FwID0gZmFsc2U7CisgICAgICAgIE9wY29kZSBzd2Fw
ID0gT29wczsKKyAgICAgICAgQXJnOjpXaWR0aCBzd2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8g
Ym9ndXMgdmFsdWUKKyAgICAgICAgCisgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKKyAg
ICAgICAgICAgIHN3YXAgPSBTd2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6Oldp
ZHRoMzI7CisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlLmxvb3Ap
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgc3dhcCA9
IFN3YXA2NDsKKyAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRt
cCwgQXJnOjpUbXApOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0
ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBw
YWlyLmRzdCgpLmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBp
c1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpBZGRyKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2FwcGluZyBwYXRoIGlmIHRoZXJlIGlzIGEgbWl4
IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc2h1ZmZs
ZXMgaW52b2x2ZSBtZW1vcnkuIFRoYXQgZ2V0cyB0b28gY29uZnVzaW5nLgorICAgICAgICAgICAg
ICAgICAgICBjYW5Td2FwICY9IChwYWlyLndpZHRoKCkgPCBzd2FwV2lkdGgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYW5Td2Fw
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAx
OyBpLS07KSB7CisgICAgICAgICAgICAgICAgQXJnIGxlZnQgPSByb3RhdGUubG9vcFtpXS5zcmMo
KTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHQgPSByb3RhdGUubG9vcFtpICsgMV0uc3JjKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciBy
YXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJlIHJhcmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEgYmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRv
IGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAg
IC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNo
KHR5cGUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZv
cldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3
YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRjaCwgbGVmdCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgp
KQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZs
ZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIud2lk
dGgoKSA9PSBzd2FwV2lkdGgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGFpci53aWR0aCgpID09IEFyZzo6V2lkdGgzMik7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3dhcFdpZHRoID09IEFyZzo6V2lkdGg2
NCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpKTsK
KworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZG8gYW4gZXh0cmEgemVybyBleHRlbnNpb24u
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUzMiwgb3JpZ2luLCBwYWly
LmRzdCgpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXZSBjYW4gdHJlYXQgdGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2Ug
dGFrZSB0aGUgbGFzdCBkZXN0aW5hdGlvbiAoaS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291
cmNlKSBhbmQgc2F2ZSBpdCBmaXJzdC4gVGhlbiB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGlu
IHRoZSBwYWlyIGluIHRoZSByb3RhdGUKKyAgICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIg
d2UgcmVzdG9yZSB0aGUgbGFzdCBkZXN0aW5hdGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNp
YWwgY2FyZSB0bworICAgICAgICAgICAgLy8gZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3Mg
cG9zc2libGUgdGhhdCB3ZSBoYXZlIGEgcm90YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAg
ICAgICAgICAvLyBhdmFpbGFibGUgcmVnaXN0ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNj
cmF0Y2ggPSBmaW5kUG9zc2libGVTY3JhdGNoKAorICAgICAgICAgICAgICAgIHR5cGUsCisgICAg
ICAgICAgICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlLmxvb3ApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWlyLnNyYygpLnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5k
c3QoKS51c2VzVG1wKHRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0U2Ny
YXRjaCgwLCBzY3JhdGNoKTsKKworICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUgPSBzY3JhdGNo
ID8gQXJnKHNjcmF0Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBoYW5kbGVTaGlmdFBhaXIoCisgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIocm90YXRlLmxv
b3AubGFzdCgpLmRzdCgpLCByb3RhdGVTYXZlLCByb3RhdGUubG9vcFswXS53aWR0aCgpKSwgMSk7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKTsgaS0t
ID4gMTspCisgICAgICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZS5sb29wW2ldLCAx
KTsKKworICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKAorICAgICAgICAgICAgICAgIFNodWZm
bGVQYWlyKHJvdGF0ZVNhdmUsIHJvdGF0ZS5sb29wWzBdLmRzdCgpLCByb3RhdGUubG9vcFswXS53
aWR0aCgpKSwgMSk7CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAgICAgICAgICAg
IHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBjb21taXRS
ZXN1bHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAgICAgIHJlc3Vs
dC5hcHBlbmRWZWN0b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFp
cj4mIHBhaXJzLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25z
dCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKQorewor
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+
IGZwUGFpcnM7CisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7Cisg
ICAgICAgIGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgp
ICYmIHBhaXIud2lkdGgoKSA+IEFyZzo6cG9pbnRlcldpZHRoKCkpIHsKKyAgICAgICAgICAgIC8v
IDgtYnl0ZSBtZW1vcnktdG8tbWVtb3J5IG1vdmVzIG9uIGEgMzItYml0IHBsYXRmb3JtIGFyZSBi
ZXN0IGhhbmRsZWQgYXMgZmxvYXQgbW92ZXMuCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChw
YWlyKTsKKyAgICAgICAgfSBlbHNlIGlmIChwYWlyLnNyYygpLmlzR1AoKSAmJiBwYWlyLmRzdCgp
LmlzR1AoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBt
ZW1vcnktdG8tbWVtb3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisgICAg
ICAgICAgICAvLyBjYW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2Vw
dCBpbiB0aGUgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQo
cGFpcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7
CisgICAgfQorCisgICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kVmVj
dG9yKGVtaXRTaHVmZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCwgb3JpZ2luKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFy
Zzo6RlAsIG9yaWdpbikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJFbWl0U2h1ZmZsZV9oCisjZGVmaW5lIEFp
ckVtaXRTaHVmZmxlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcu
aCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBTaHVmZmxlUGFpciB7CitwdWJsaWM6CisgICAgU2h1ZmZsZVBhaXIoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgU2h1ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0
IEFyZyYgZHN0LCBBcmc6OldpZHRoIHdpZHRoKQorICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAg
ICAgLCBtX2RzdChkc3QpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgQXJnJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0
IEFyZyYgZHN0KCkgY29uc3QgeyByZXR1cm4gbV9kc3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBk
ZXRlcm1pbmVzIHRoZSBraW5kIG9mIG1vdmUgd2UgZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lk
dGgzMiBvciBXaWR0aDY0IHJpZ2h0IG5vdy4KKyAgICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdl
ZW4gTW92ZTMyIGFuZCBNb3ZlLiBGb3IgRlAsIGl0IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFu
ZCBNb3ZlRG91YmxlLgorICAgIEFyZzo6V2lkdGggd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgQXJnIG1fc3JjOworICAgIEFyZyBtX2RzdDsKKyAgICBBcmc6OldpZHRoIG1fd2lk
dGggeyBBcmc6OldpZHRoOCB9OworfTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZl
biB0eXBlLiBUaGUgc2NyYXRjaCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFz
cyBpdCBhcworLy8gZm9sbG93czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJl
Z2lzdGVycyBvciB0ZW1wb3JhcmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCisvLyBy
ZWdpc3RlcnMgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUg
c2FtZSB0eXBlIGFzIHRoZSBzaHVmZmxlLCBhbmQgYXJlIG5vdAorLy8gbGl2ZSBhdCB0aGUgc2h1
ZmZsZSAtIHRoZW4geW91IGNhbiBwYXNzIHRoZW0uIElmIHlvdSBkb24ndCBoYXZlIHNjcmF0Y2gg
cmVnaXN0ZXJzIGF2YWlsYWJsZSBvciBpZgorLy8geW91IGRvbid0IGZlZWwgbGlrZSBsb29raW5n
IGZvciB0aGVtLCB5b3UgY2FuIHBhc3MgbWVtb3J5IGxvY2F0aW9ucy4gSXQncyBhbHdheXMgc2Fm
ZSB0byBwYXNzIGEKKy8vIHBhaXIgb2YgbWVtb3J5IGxvY2F0aW9ucywgYW5kIHJlcGxhY2luZyBl
aXRoZXIgbWVtb3J5IGxvY2F0aW9uIHdpdGggYSByZWdpc3RlciBjYW4gYmUgdmlld2VkIGFzIGFu
CisvLyBvcHRpbWl6YXRpb24uIEl0J3MgYSBwcmV0dHkgaW1wb3J0YW50IG9wdGltaXphdGlvbi4g
U29tZSBtb3JlIG5vdGVzOgorLy8KKy8vIC0gV2UgZGVmaW5lIHNjcmF0Y2ggcmVnaXN0ZXJzIGFz
IHRoaW5ncyB0aGF0IGFyZSBub3QgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYW5kIGFyZSBub3Qg
b25lIG9mCisvLyAgIHRoZSBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUuIE5vdCBiZWluZyBs
aXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbHNvIG1lYW5zIHRoYXQgdGhleSBjYW5ub3QKKy8vICAg
YmUgdXNlZCAKKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24gaXMgb25seSBuZWVk
ZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgK
Ky8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlvdSdyZSBndWFyYW50
ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAg
aW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQgeW91IGRvbid0IGhh
dmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291cmNlIGFuZCB0aGUg
ZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYg
d2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3NpbmcgbWVtb3J5IGxv
Y2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJl
Z2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBl
bWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMgd2hlbiBpdCBkb2Vz
IG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1l
bnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBhZnRlcgorLy8gICBy
ZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQgYWRkIGEgU2h1ZmZs
ZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVmZmxpbmdzIHVudGls
IGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBw
YWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlv
dSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0aGVtLCB0aGVuIG1h
a2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25lIHdheSB0bworLy8g
ICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgK
KyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaCwgQXJn
OjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgdGhhdCBpbnZv
bHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIG1lbW9y
eSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBhYm92
ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBh
aXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3Rk
OjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2
ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisjaW5jbHVkZSAi
QWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUg
IkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBj
b2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxvd2VyTWFjcm9zKGNv
ZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5k
IHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKQEAg
LTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAg
IGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBs
b3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRo
ZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGlj
aXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxl
ZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZl
cyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSArMzgsMTEgQEAgY2xhc3MgQ29kZTsKIAog
Ly8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxv
Y2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBhbGxvY2F0
aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotdm9pZCBwcmVwYXJlRm9yR2VuZXJh
dGlvbihDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9u
KENvZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuIEND
YWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAv
LyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgotdm9pZCBnZW5lcmF0
ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRl
KENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsMTggQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCit2b2lkIElu
c2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4m
IGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzKQorICAgICAgICBp
bnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNlcnRpb25TZXQ6Omluc2VydElu
c3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMpCit7CisgICAgZm9yIChJbnN0
JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIFdURk1vdmUoaW5zdCkp
OworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsK
ICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNl
dC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJk
PEluc3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5k
ZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGlu
ZGV4LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxNSBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29kZSAhPSBOb3AgfHwg
YXJncy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKCkgeyB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZyBhcmcsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAg
ICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhl
c2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVz
ZSB0aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJl
IGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5
b3UncmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5l
c3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQ
cmlvcml0eS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJBZnRlclJl
Z0FsbG9jIik7CisKKyAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVy
czsKKworICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxD
YWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgc2V0OworCisgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSB8fCBp
bnN0Lm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiBsb2NhbENhbGMubGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZTZXRSZWdpc3RlcnMo
KSkKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChjb25zdCBSZWdpc3Rl
clNldCYgc2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKKyAgICAg
ICAgc3RkOjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAg
ICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dFtpXSA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBB
cmc6OnN0YWNrKAorICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBl
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07
CisKKyAgICAvLyBOb3cgdHJhbnNmb3JtIHRoZSBjb2RlLgorICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIFNodWZmbGU6IHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQgPSB1
c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQ
YWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5z
dC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBp
bnN0LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gaW5zdC5hcmdz
W2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3QuYXJn
c1tpICsgMl0ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyYy5pc1JlZygpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0LnNldChzcmMucmVnKCkpOworICAgICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0
Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFy
cmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpGUCk7CisgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAg
ICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5z
dC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENvbGRDQ2FsbDog
eworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPEND
YWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmVVc2VkOworICAg
ICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0Nv
bnZlbnRpb24oY29kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2Fs
bFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAg
ICBBcmcgc3JjID0gaW5zdC5hcmdzW3Jlc3VsdCA/IChpID49IDEgPyBpICsgMSA6IGkpIDogaSBd
OworICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAg
ICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZShjaGls
ZC0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWly
KHNyYywgZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldChzcmMucmVnKCkpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0
Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3Rk
OjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkZQ
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzVG9T
YXZlID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworCisgICAgICAgICAgICAgICAgLy8gQWxz
byBuZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVnaXN0ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFi
b3V0IHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvLyByZWdpc3Rlci4KKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmNsZWFyKHJl
c3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xv
dHM7CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50
eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMo
d2lkdGgpLCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3
aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tT
bG90KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBp
bnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5v
cmlnaW4pKTsKKworICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qu
b3JpZ2luLCBkZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQg
dG8gZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJz
LnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7
CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFj
a1Nsb3RzW3N0YWNrU2xvdEluZGV4KytdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBpbnN0LmFyZ3NbMV0s
IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQocGFpcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5zZXQocmVzdWx0
LnJlZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBncFNjcmF0Y2ggPSBn
ZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgZnBTY3Jh
dGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6RlApOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAg
ICAgICAgICAgaW5zdEluZGV4ICsgMSwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBT
Y3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOworCisgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAg
ICAgICAgWyZdIChJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IWluc3Q7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxvd2VyQWZ0ZXJS
ZWdBbGxvY19oCisjZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgbG93ZXJzIFNodWZmbGUgYW5kIENvbGRDQ2FsbCBp
bnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGFmdGVyIHJlZ2lz
dGVyCisvLyBhbGxvY2F0aW9uLgorCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJik7CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93
ZXJNYWNyb3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0
aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJsb3dlck1hY3JvcyIpOworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4g
ZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihjb2RlLCB2YWx1ZSk7CisK
KyAgICAgICAgICAgICAgICBJbnN0IHNodWZmbGVBcmd1bWVudHMoU2h1ZmZsZSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/
IDAgOiAxOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXN0aW5h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFy
Z3MuYXBwZW5kKGluc3QuYXJnc1tvZmZzZXQgKyBpXSk7CisgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoZGVzdGluYXRpb25zW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChBcmc6OndpZHRoQXJnKEFyZzo6
d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoaW5zdEluZGV4LCBXVEZNb3ZlKHNo
dWZmbGVBcmd1bWVudHMpKTsKKworICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgd2Un
cmUgdXNpbmcgb3VyIG9yaWdpbmFsIGNhbGxlZSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbnNbMF0gPSBpbnN0LmFyZ3NbMF07CisKKyAgICAgICAgICAgICAgICAvLyBTYXZl
IHdoZXJlIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBwdXQgaXRzIHJlc3VsdC4KKyAgICAgICAg
ICAgICAgICBBcmcgcmVzdWx0RHN0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gQXJnKCkgOiBp
bnN0LmFyZ3NbMV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1
aWxkQ0NhbGwoY29kZSwgaW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAg
ICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lk
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsb2F0
OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEs
IE1vdmVGbG9hdCwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZURvdWJsZSwgdmFsdWUs
IHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydChpbnN0SW5kZXggKyAxLCBNb3ZlMzIsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92
ZSwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJNYWNyb3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckxvd2VyTWFjcm9zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckxvd2VyTWFjcm9zX2gKKyNkZWZpbmUgQWlyTG93ZXJNYWNyb3NfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBBaXIgaGFzIHNvbWUgb3Bjb2RlcyB0aGF0IGFyZSB2ZXJ5IGhp
Z2gtbGV2ZWwgYW5kIGFyZSBtZWFudCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBsb3ctbGV2ZWwK
Ky8vIGtub3dsZWRnZSBpbiB0aGUgQjMtPkFpciBsb3dlcmluZy4gVGhlIGN1cnJlbnQgZXhhbXBs
ZSBpcyBDQ2FsbC4KKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJMb3dlck1hY3Jvc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtNDA3
LDYgKzQwNywxNCBAQCBNb3ZlIFU6RzpQdHIsIEQ6RzpQdHIKICAgICBUbXAsIEluZGV4IGFzIHN0
b3JlUHRyCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAoreDg2OiBTd2FwMzIgVUQ6
RzozMiwgVUQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRyCisKK3g4Nl82NDogU3dh
cDY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgorCiBNb3Zl
MzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIKICAg
ICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzIsNyArNjgwLDE5IEBAIFJldERvdWJsZSBVOkY6
NjQgL3JldHVybgogCiBPb3BzIC90ZXJtaW5hbAogCisjIEEgU2h1ZmZsZSBpcyBhIG11bHRpLXNv
dXJjZSwgbXVsdGktZGVzdGluYXRpb24gbW92ZS4gSXQgc2ltdWx0YW5lb3VzbHkgZG9lcyBtdWx0
aXBsZSBtb3ZlcyBhdCBvbmNlLgorIyBUaGUgbW92ZXMgYXJlIHNwZWNpZmllZCBhcyB0cmlwbGV0
cyBvZiBzcmMsIGRzdCwgYW5kIHdpZHRoLiBGb3IgZXhhbXBsZSB5b3UgY2FuIHJlcXVlc3QgYSBz
d2FwIHRoaXMKKyMgd2F5OgorIyAgICAgU2h1ZmZsZSAldG1wMSwgJXRtcDIsIDY0LCAldG1wMiwg
JXRtcDEsIDY0CitjdXN0b20gU2h1ZmZsZQorCiAjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhh
dmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNw
ZWNpYWwgb3BlcmFuZCwKICMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KIGN1c3Rv
bSBQYXRjaAogCisjIEluc3RydWN0aW9ucyB1c2VkIGZvciBsb3dlcmluZyBDIGNhbGxzLiBUaGVz
ZSBkb24ndCBtYWtlIGl0IHRvIEFpciBnZW5lcmF0aW9uLiBUaGV5IGdldCBsb3dlcmVkIHRvCisj
IHNvbWV0aGluZyBlbHNlIGZpcnN0LiBUaGUgb3JpZ2luIFZhbHVlIG11c3QgYmUgYSBDQ2FsbFZh
bHVlLgorY3VzdG9tIENDYWxsCitjdXN0b20gQ29sZENDYWxsCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgY29uc3QgVmVjdG9yPHR5cGVu
YW1lIEJhbms6OlJlZ2lzdGVyVHlwZQogICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3Jk
ZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOwogfQogCi1jb25zdCBWZWN0b3I8UmVnPiYgcmVn
c0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVmVj
dG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKIAogfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODA5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgor
I2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkIz
Q29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlB1cmVOYU4u
aCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisvLyBXZSBkb24ndCBoYXZlIGEgTk9fUkVUVVJO
X0RVRV9UT19FWElULCBub3Igc2hvdWxkIHdlLiBUaGF0J3MgcmlkaWN1bG91cy4KK3N0YXRpYyBi
b29sIGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSB7IHJldHVybiB0cnVlOyB9
CisKK3N0YXRpYyB2b2lkIHVzYWdlKCkKK3sKKyAgICBkYXRhTG9nKCJVc2FnZTogdGVzdGIzIFs8
ZmlsdGVyPl1cbiIpOworICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlk
KCkpCisgICAgICAgIGV4aXQoMSk7Cit9CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBu
YW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsKKworbmFtZXNwYWNl
IHsKKworU3RhdGljTG9jayBjcmFzaExvY2s7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsg
d2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmlu
ZSBDSEVDSyh4KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoISEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBj
cmFzaExvY2subG9jaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJ
TkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI3gpOyBcCisgICAgICAgIENSQVNIKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoZmFsc2UpCisKK1ZNKiB2bTsKKworc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxh
dGlvbj4gY29tcGlsZShCMzo6UHJvY2VkdXJlJiBwcm9jKQoreworICAgIHByZXBhcmVGb3JHZW5l
cmF0aW9uKHByb2MuY29kZSgpKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5l
cmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIG51bGxwdHIpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGls
YXRpb24iKSksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKGNvbnN0IEIzOjpDb21waWxh
dGlvbiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBUICgqZnVuY3Rpb24p
KEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRz
Li4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
VCBjb21waWxlQW5kUnVuKEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKK3sKKyAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFy
Z3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZSgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDQyKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKwor
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVTaW1wbGVTd2FwKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNF07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdz
KSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
KDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMp
KTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhp
bmdzWzVdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRd
ID09IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkKK3sKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChH
UFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSg1KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDYpLCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNyksIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg4KSwgVG1wKEdQUkluZm86OnJlZ1Q3
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCks
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5m
bzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBB
cmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworICAgIENIRUNLKHRoaW5nc1s2
XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNyk7Cit9CisKK3ZvaWQgdGVzdFNodWZm
bGVMb25nU2hpZnRCYWNrd2FyZHMoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgxKSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDUpLCBUbXAoR1BSSW5mbzo6
cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNiksIFRt
cChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSg3KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDgpLCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
NiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BS
SW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBB
cmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBB
cmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hF
Q0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVD
Syh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNL
KHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpCit7
CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsK
KworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAg
IFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNF07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdz
KSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNCk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaW1wbGVCcm9hZGNhc3QoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDIpLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMyksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0KSwgVG1wKEdQUkluZm86OnJl
Z1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5u
ZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
NjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNl
LCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNl
LCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlQnJvYWRjYXN0
QWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBw
cm9jLmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3Jp
dHlPcmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDM1KSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgdW5zaWduZWQgY291bnQgPSAxOworICAgIGZvciAoUmVnIHJl
ZyA6IHJlZ3MpIHsKKyAgICAgICAgaWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVnVDApKQorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKGNvdW50KyspLCBU
bXAocmVnKSk7CisgICAgfQorICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZs
ZSwgbnVsbHB0cik7CisgICAgZm9yIChSZWcgcmVnIDogcmVncykgeworICAgICAgICBpZiAocmVn
ICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAgICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAocmVnKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsK
KyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2Yo
aW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBp
ICogc2l6ZW9mKGludDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Mu
c2l6ZSgpLCA2NjYpOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAg
ICAKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKKworICAgIGZvciAoaW50MzJfdCB0aGluZyA6IHRoaW5ncykKKyAgICAg
ICAgQ0hFQ0sodGhpbmcgPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0KCkK
K3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBU
bXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSg1KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDYpLCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNyksIFRtcChHUFJJbmZvOjpy
ZWdUNikpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg4KSwgVG1w
KEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q2
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwor
CisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6
OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6
YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0
aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKwor
ICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAg
IENIRUNLKHRoaW5nc1s2XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisK
K3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnRCYWNrd2FyZCgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNSks
IFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSg2KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDcpLCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oOCksIFRtcChHUFJJbmZvOjpyZWdUNykpOwor
ICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdz
WzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjph
ZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjph
ZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjph
ZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09
IDIpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0g
Myk7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJl
ZVNoaWZ0T3RoZXJCYWNrd2FyZCgpCit7CisgICAgLy8gTk9URTogVGhpcyB0ZXN0IHdhcyBteSBv
cmlnaW5hbCBhdHRlbXB0IGF0IFRyZWVTaGlmdEJhY2t3YXJkIGJ1dCBtaXN0YWtlcyB3ZXJlIG1h
ZGUuIFNvLCB0aGlzCisgICAgLy8gZW5kcyB1cCBiZWluZyBqdXN0IGEgd2VpcmQgdGVzdC4gQnV0
IHdlaXJkIHRlc3RzIGFyZSB1c2VmdWwsIHNvIEkga2VwdCBpdC4KKyAgICAKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNCksIFRtcChH
UFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSg1KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDYpLCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNyksIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg4KSwgVG1wKEdQUkluZm86OnJlZ1Q3
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZv
OjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiks
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBB
cmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gOCk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDgpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA3KTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gNyk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s2
XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZm
bGVNdWx0aXBsZVNoaWZ0cygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDEpLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNSksIFRtcChHUFJJbmZvOjpyZWdU
NCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg2KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiks
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hF
Q0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAzKTsKKyAgICBDSEVD
Syh0aGluZ3NbNV0gPT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdl
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMSksIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgyKSwgVG1wKEdQUklu
Zm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDMp
LCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oNCksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSg1KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDYpLCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRy
KGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRy
KGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoTG9uZ0ZyaW5nZSgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMiksIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQpLCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNSks
IFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSg2KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJl
Z1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGlu
dDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFz
ZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFz
ZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKwor
ICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSygh
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsK
KyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOwor
ICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVuZCggICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgWyZdICgpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICBcCisgICAgICAgICAg
ICAgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICBcCisgICAgICAgICAgICAgICAgfSkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lk
IHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKworICAgIERl
cXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKKworICAgIGF1dG8gc2hvdWxk
UnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biAhZmlsdGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9OworCisg
ICAgUlVOKHRlc3RTaW1wbGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVM
b25nU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkpOwor
ICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVT
aW1wbGVCcm9hZGNhc3QoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxl
VHJlZVNoaWZ0QmFja3dhcmQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJC
YWNrd2FyZCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJv
dGF0ZVdpdGhMb25nRnJpbmdlKCkpOworCisgICAgLy8gU3RpbGwgbmVlZCB0aGUgZm9sbG93aW5n
IHRlc3RzOgorICAgIC8vIC0gbXVsdGlwbGUgc2hpZnRzCisgICAgLy8gLSBtdWx0aXBsZSByb3Rh
dGVzCisgICAgLy8gLSBzaGlmdCBhbmQgcm90YXRlCisgICAgLy8gLSBzaGlmdCBvdmVyIGFsbCBy
ZWdpc3RlcnMKKyAgICAvLyAtIHJvdGF0ZSBvdmVyIGFsbCByZWdpc3RlcnMKKyAgICAvLyAtIHJv
dGF0ZSB3aXRoIG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gbWVtb3J5IHNoaWZ0CisgICAgLy8g
LSBtZW1vcnktPm1lbW9yeSBzaGlmdAorICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgc2hpZnQgd2l0
aCBubyBzcGFyZSByZWdpc3RlcnMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUKKyAgICAvLyAtIG1l
bW9yeSByb3RhdGUgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5
IHJvdGF0ZQorICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgcm90YXRlIHdpdGggbXVsdGlwbGUgd2lk
dGhzCisgICAgLy8gLSBtZW1vcnkgcm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzCisgICAg
Ly8gLSBtZW1vcnkgcm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzIHdpdGggbXVsdGlwbGUg
d2lkdGhzCisgICAgLy8gLSBtZW1vcnktPm1lbW9yeSByb3RhdGUgd2l0aCBubyBzcGFyZSByZWdp
c3RlcnMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5IHJvdGF0ZSB3aXRoIG5vIHNwYXJlIHJlZ2lz
dGVycyB3aXRoIG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gZmxvYXRpbmcgcG9pbnQKKworICAg
IGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdlKCk7CisKKyAgICBMb2NrIGxvY2s7
CisKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTsp
IHsKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoCisgICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisg
ICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFsmXSAoKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobG9jayk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhc2sgPSB0YXNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+cnVuKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisgICAgfQorCisgICAgZm9yIChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKHRocmVhZCk7CisgICAgY3Jhc2hMb2NrLmxvY2soKTsKK30KKworfSAvLyBhbm9ueW1vaXMg
bmFtZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisKK3N0YXRpYyB2b2lkIHJ1bihj
b25zdCBjaGFyKikKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJsZWQuXG4iKTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBudWxscHRyOworICAgIHN3aXRj
aCAoYXJnYykgeworICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAg
ICAgICBmaWx0ZXIgPSBhcmd2WzFdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICB1c2FnZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcnVuKGZpbHRl
cik7CisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268928</attachid>
            <date>2016-01-13 18:43:09 -0800</date>
            <delta_ts>2016-01-13 19:12:55 -0800</delta_ts>
            <desc>even more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>166317</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMjIgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE0NCw5IEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdp
ZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE5Nyw5
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmci
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjUsMTYgKzI2NCwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0
aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7
CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnBy
aW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDExIEBA
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNs
YXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwK
LSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFyZwogICAg
IH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7CisgICAgICAg
IGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3QgewogICAgICAg
ICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAg
ICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIENv
bGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBMYXRlQ29s
ZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CkBAIC00MzUsNiArNDY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIGltbVB0cihjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVzcykpOwor
ICAgIH0KKwogICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNl
dCA9IDApCiAgICAgewogICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwpAQCAtNTQ5LDYgKzU4
NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3Rh
dGljIEFyZyB3aWR0aEFyZyhXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gd2lkdGg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKQEAgLTU4NSw2ICs2MzAsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wgaXNTb21l
SW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1tNjQoKTsK
KyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
a2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjU1LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzU3RhY2tN
ZW1vcnkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs3MDIsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAgYm9vbCBp
c1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gV2lkdGhB
cmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwxOCArNzUwLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQWRkcjoK
LSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAgICBjYXNl
IEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJfdCBvZmZz
ZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3ODksMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFdp
ZHRoQXJnKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNldCk7Cisg
ICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBp
c1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwpAQCAt
NzcxLDYgKzgzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0
aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODc5LDggQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDIyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFs
OgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CkBAIC05NzQsNiArMTA0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRtcCB0bXApIGNvbnN0OworCiAgICAgLy8gVGhp
cyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9y
IFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVt
LiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCwxNSArNzgsMTcgQEAgcHVibGljOgogICAgIEluc3RMaXN0JiBpbnN0cygpIHsgcmV0dXJuIG1f
aW5zdHM7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+Ci0gICAgdm9pZCBhcHBlbmRJ
bnN0KEluc3QmJiBpbnN0KQorICAgIEluc3QmIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCiAgICAg
ewogICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAg
ICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICBJbnN0JiBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAg
ICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICAv
LyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28g
dGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KK0FyZyBtYXJzaGFsbENDYWxsQXJn
dW1lbnRJbXBsKHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQs
IFZhbHVlKiBjaGlsZCkKK3sKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gYXJndW1lbnRD
b3VudCsrOworICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJlck9mQXJndW1l
bnRSZWdpc3RlcnMpCisgICAgICAgIHJldHVybiBUbXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdp
c3Rlcihhcmd1bWVudEluZGV4KSk7CisKKyAgICB1bnNpZ25lZCBzbG90U2l6ZTsKKyAgICBpZiAo
aXNBUk02NCgpICYmIGlzSU9TKCkpIHsKKyAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBwYWNrZWQu
CisgICAgICAgIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsaWduZWQuCisgICAgICAgIHNsb3RTaXpl
ID0gODsKKyAgICB9CisKKyAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworICAgIEFyZyByZXN1bHQgPSBBcmc6OmNhbGxBcmco
c3RhY2tPZmZzZXQpOworICAgIHN0YWNrT2Zmc2V0ICs9IHNsb3RTaXplOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQoCisgICAgdW5zaWduZWQmIGdw
QXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNr
T2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUo
Y2hpbGQtPnR5cGUoKSkpIHsKKyAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgIHJldHVybiBtYXJz
aGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQsIGNoaWxkKTsKKyAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgIHJldHVybiBtYXJzaGFsbEND
YWxsQXJndW1lbnRJbXBsPEZQUkluZm8+KGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNo
aWxkKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gQXJnKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitWZWN0b3I8QXJnPiBj
b21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUmIGNvZGUsIENDYWxsVmFsdWUqIHZhbHVlKQor
eworICAgIFZlY3RvcjxBcmc+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKFRtcChDQ2FsbFNw
ZWNpYWw6OnNjcmF0Y2hSZWdpc3RlcikpOworICAgIHVuc2lnbmVkIGdwQXJndW1lbnRDb3VudCA9
IDA7CisgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFj
a09mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGls
ZHJlbigpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIG1hcnNo
YWxsQ0NhbGxBcmd1bWVudChncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsIHZhbHVlLT5jaGlsZChpKSkpOworICAgIH0KKyAgICBjb2RlLnJlcXVlc3RDYWxsQXJn
QXJlYVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
c3RhY2tPZmZzZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUbXAgY0NhbGxSZXN1bHQo
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgcmV0dXJuIFRtcCgpOworICAgIGNhc2UgSW50MzI6CisgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgcmV0dXJuIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgY2FzZSBGbG9hdDoK
KyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJuIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gVG1wKCk7Cit9CisKK0luc3QgYnVpbGRDQ2FsbChDb2RlJiBjb2RlLCBWYWx1ZSogb3Jp
Z2luLCBjb25zdCBWZWN0b3I8QXJnPiYgYXJndW1lbnRzKQoreworICAgIEluc3QgaW5zdChQYXRj
aCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwoY29kZS5jQ2FsbFNwZWNpYWwoKSkpOworICAgIGluc3Qu
YXJncy5hcHBlbmQoYXJndW1lbnRzWzBdKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAgICBp
ZiAoYXJnLmlzVG1wKCkpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAg
fQorICAgIHJldHVybiBpbnN0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAor
I2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1R5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihDb2RlJiwgQ0Nh
bGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQoVHlwZSk7CisKK0luc3QgYnVpbGRDQ2FsbChD
b2RlJiwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPEFyZz4mKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSwxMiArNTUsMTMgQEAgcHVibGlj
OgogCiAgICAgUHJvY2VkdXJlJiBwcm9jKCkgeyByZXR1cm4gbV9wcm9jOyB9CiAKLSAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gMSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOwogCiAgICAg
Ly8gTm90ZSB0aGF0IHlvdSBjYW4gcmVseSBvbiBzdGFjayBzbG90cyBhbHdheXMgZ2V0dGluZyBp
bmRpY2VzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBpbmRleAogICAgIC8vIG9mIGFueSBwcmlv
ciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3RhY2sgc2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUg
ZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAgIC8vIHRoYXQgaXMgPj0gc3RhY2tTbG90cygp
LnNpemUoKS4KLSAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QoCisgICAgICAgIHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKICAgICBTdGFj
a1Nsb3QqIGFkZFN0YWNrU2xvdChTdGFja1Nsb3RWYWx1ZSopOwogCiAgICAgU3BlY2lhbCogYWRk
U3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ3VzdG9tLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIEND
YWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgIT0gMSArICh2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBj
YW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFh
cmcuaXNTdGFja01lbW9yeSgpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKworICAgIC8vIElm
IHRoZXJlIGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fubm90IGJlIGFuIGltbWVkaWF0ZS4KKyAgICBp
ZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7CisgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNT
b21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaW5zdC5h
cmdzWzFdLmNhblJlcHJlc2VudCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5u
dW1DaGlsZHJlbigpOyBpLS07KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpKTsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAg
aWYgKCFhcmcuY2FuUmVwcmVzZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxs
Q3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3Qs
ICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2Fs
bEhlbHBlcnM6Okp1bXAoKTsKK30KKworYm9vbCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJ
bnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICUgMykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQSBkZXN0aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4g
VGhpcyByZXF1aXJlbWVudCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlv
cgorICAgIC8vIG9mIGhhdmluZyBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0
IG11bHRpcGxlIGlucHV0cyBzaW11bHRhbmVvdXNseS4gSXQgYWxzbworICAgIC8vIGltcG9zZXMg
c29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZs
ZS4gSWYgd2UgdHJlYXQgYSBzaHVmZmxlIHBhaXIKKyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUg
QXJncyBhcyBub2RlcywgdGhlbiB0aGUgc2luZ2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1l
YW5zIHRoYXQgdGhlCisgICAgLy8gc2h1ZmZsZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMg
b2Ygc3ViZ3JhcGhzOgorICAgIC8vCisgICAgLy8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0
aGVzZSBzaGlmdHMuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQor
ICAgIC8vICAgaW5zdHJ1Y3Rpb25zIGFuZCBkb24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCBy
ZWdpc3RlcnMuCisgICAgLy8KKyAgICAvLyAtIENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29u
c2lzdCBvZiBub2RlcyB0aGF0IGhhdmUgb25lIHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29y
LCBzbworICAgIC8vICAgdGhlcmUgaXMgbm8gd2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJv
bSBvdXRzaWRlIG9mIGl0LiBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAgICAv
LyAgIG9yIGJ5IHNhdmluZyBvbmUgb2YgdGhlIEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFu
ZCBleGVjdXRpbmcgaXQgYXMgYSBzaGlmdC4KKyAgICBIYXNoU2V0PEFyZz4gZHN0czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsKKyAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAz
OworCisgICAgICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdp
ZHRoLgorICAgICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAgICBpZiAoIW1vZGUp
IHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobW9kZSA9PSAxKTsK
KyAgICAgICAgICAgIGlmICghZHN0cy5hZGQoYXJnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcuaXNUbXAoKSB8
fCBhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBObyBkZXN0aW5hdGlvbiByZWdpc3RlciBtYXkgYXBw
ZWFyIGluIGFueSBhZGRyZXNzIGV4cHJlc3Npb25zLiBUaGUgbG93ZXJpbmcgY2FuJ3QgaGFuZGxl
IGl0CisgICAgLy8gYW5kIGl0J3Mgbm90IHVzZWZ1bCBmb3IgdGhlIHdheSB3ZSBlbmQgdXAgdXNp
bmcgU2h1ZmZsZXMuIE5vcm1hbGx5LCBTaHVmZmxlcyBvbmx5IHVzZWQgZm9yCisgICAgLy8gc3Rh
Y2sgYWRkcmVzc2VzIGFuZCBub24tc3RhY2sgcmVnaXN0ZXJzLgorICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgaWYgKCFhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgYXJnLmZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgaWYg
KGRzdHMuY29udGFpbnModG1wKSkKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgU2h1
ZmZsZUN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlv
bkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgc2h1ZmZsZTogIiwg
aW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTUxLDYgKzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQgdG8gY2FycnkgZXh0cmEgc3RhdGUgYXJvdW5k
IHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBTcGVjaWFscyBtZWFuIHRoYXQgeW91CiAvLyBh
bHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZlbiBpbiBtZXRob2RzIHRoYXQgZG9uJ3QgdGFr
ZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBEZWZpbml0aW9uIG9mIFBhdGNoIGluc3RydWN0
aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5zdHJ1
Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgogc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKQEAgLTk2LDYgKzk5LDExMyBAQCBzdHJ1
Y3QgUGF0Y2hDdXN0b20gewogICAgIH0KIH07CiAKKy8vIERlZmluaXRpb24gb2YgQ0NhbGwgaW5z
dHJ1Y3Rpb24uIENDYWxsIGlzIHVzZWQgZm9yIGhvdCBwYXRoIEMgZnVuY3Rpb24gY2FsbHMuIEl0
J3MgbG93ZXJlZCB0byBhCisvLyBQYXRjaCB3aXRoIGFuIEFpciBDQ2FsbFNwZWNpYWwgYWxvbmcg
d2l0aCBjb2RlIHRvIG1hcnNoYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgbG93ZXJpbmcgaGFwcGVucwor
Ly8gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciBzZWVzIHRoZSBjbG9iYmVycy4KK3N0cnVjdCBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbjsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICAgICAg
ZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBvaW50
ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUtPnR5cGUo
KSAhPSBWb2lkKSB7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3Qu
YXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLAorICAgICAgICAgICAgICAgIEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRo
Rm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0
YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworCisgICAgc3RhdGljIGJvb2wg
YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5z
dCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGp1
c3QgY3Jhc2hlcywgc2luY2Ugd2UgZXhwZWN0IEMgY2FsbHMgdG8gYmUgbG93ZXJlZCBiZWZvcmUg
Z2VuZXJhdGlvbi4KKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKworc3RydWN0IENvbGRD
Q2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMganVzdCBsaWtlIGEgY2FsbCwgYnV0
IHVzZXMgYmVjb21lIGNvbGQuCisgICAgICAgIENDYWxsQ3VzdG9tOjpmb3JFYWNoQXJnKAorICAg
ICAgICAgICAgaW5zdCwKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGZ1
bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChyb2xlKSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAg
fSk7CisgICAgfQorfTsKKworc3RydWN0IFNodWZmbGVDdXN0b20geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGltaXQgPSBp
bnN0LmFyZ3Muc2l6ZSgpIC8gMyAqIDM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaW1pdDsgaSArPSAzKSB7CisgICAgICAgICAgICBBcmcmIHNyYyA9IGluc3QuYXJnc1tpICsg
MF07CisgICAgICAgICAgICBBcmcmIGRzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAg
ICBBcmcmIHdpZHRoQXJnID0gaW5zdC5hcmdzW2kgKyAyXTsKKyAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSB3aWR0aEFyZy53aWR0aCgpOworICAgICAgICAgICAgQXJnOjpUeXBlIHR5cGUg
PSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkgPyBBcmc6OkdQIDogQXJnOjpGUDsKKyAgICAgICAg
ICAgIGZ1bmN0b3Ioc3JjLCBBcmc6OlVzZSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVu
Y3Rvcihkc3QsIEFyZzo6RGVmLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKHdp
ZHRoQXJnLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpXaWR0aDgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0Jik7CisgICAg
CisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChpbmRleCAlIDMpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJh
dGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cit9OworCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgaWYgKGZ1
bmN0b3IodG1wKSkKKyAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIHJldHVybiBU
bXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0
IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNj
cmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1RtcCh0bXApICYmICFhcmcyLnVzZXNUbXAodG1w
KTsKKyAgICAgICAgfSk7Cit9CisKKy8vIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSwgYSA9PiBj
LCBiID0+IGQpCitzdHJ1Y3QgUm90YXRlIHsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGxvb3A7
IC8vIGluIHRoZSBleGFtcGxlLCB0aGlzIGlzIHRoZSBsb29wOiAoYSA9PiBiLCBiID0+IGEpCisg
ICAgVmVjdG9yPFNodWZmbGVQYWlyPiBmcmluZ2U7IC8vIGluIHRoZSBleGFtcGxlLCB0aGVzZSBh
cmUgdGhlIGFzc29jaWF0ZWQgc2hpZnRzOiAoYSA9PiBjLCBiID0+IGQpCit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKwordm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBk
c3QoKSk7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZs
ZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlw
ZSwgVmFsdWUqIG9yaWdpbikKK3sKKyAgICBwYWlycy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFpci5zcmMoKSA9PSBwYWlyLmRzdCgpOworICAgICAgICB9KTsKKyAgICAKKyAgICAv
LyBGaXJzdCB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgdGhlIGtpbmQgb2Ygc2h1ZmZsZSB0aGF0IHdl
IGtub3cgaG93IHRvIGRlYWwgd2l0aC4KKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
IDogcGFpcnMpIHsKKyAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKTsKKyAg
ICAgICAgQVNTRVJUKHBhaXIuZHN0KCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBh
aXIuZHN0KCkuaXNUbXAoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpOworICAgIH0KKworICAg
IC8vIFRoZXJlIGFyZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdp
bGwgZG86CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMp
LiBXZSBlbWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVp
cmVzCisgICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1v
cnkgbW92ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBw
b3NzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFwZXIuIE5vdGUgdGhhdCBzaGlmdHMgY2FuIGlu
dm9sdmUgdGhlIHNhbWUgc291cmNlIG1lbnRpb25lZAorICAgIC8vICAgbXVsdGlwbGUgdGltZXMu
IEV4YW1wbGU6IChhID0+IGIsIGEgPT4gYywgYiA9PiBkLCBiID0+IGUpLgorICAgIC8vCisgICAg
Ly8gLSBSb3RhdGUuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQgdG8gZW1pdCB0
aGlzIGFzICJTd2FwIGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8vICAgbWF5IG5v
dCBiZSBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3JhdGNoIHJlZ2lz
dGVyIG9yIGEgc2NyYXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGduYXJsaWVyIGV4
YW1wbGUgaXMgKGEgPT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0aGlzIGFzICJT
d2FwIGIsIGM7CisgICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBpbmcgaGFzIHRv
IGJlIGNhcmVmdWwgYWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAgIC8vIE5vdGUg
dGhhdCBhIHJvdGF0ZSBjYW4gaGF2ZSAiZnJpbmdlIi4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGhh
dmUgKGEgPT4gYiwgYiA9PiBhLCBhID0+YywKKyAgICAvLyBiID0+IGQpLiBUaGlzIGhhcyBhIHJv
dGF0ZSBsb29wIChhID0+IGIsIGIgPT4gYSkgYW5kIHNvbWUgZnJpbmdlIChhID0+IGMsIGIgPT4g
ZCkuIFdlIHRyZWF0CisgICAgLy8gdGhlIHdob2xlIHRoaW5nIGFzIGEgc2luZ2xlIHJvdGF0ZS4K
KyAgICAvLworICAgIC8vIFdlIHdpbGwgZmluZCBtdWx0aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJh
dGlvbnMuIFdlIGNhbiBleGVjdXRlIHRoZW0gaW4gYW55IG9yZGVyLgorCisgICAgLy8gV2UgaW50
ZXJwcmV0IHRoZXNlIGFzIE1vdmVzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4g
QWxsIHNoaWZ0cyBhcmUga2V5ZWQgYnkgdGhlaXIKKyAgICAvLyBzdGFydGluZyBzb3VyY2UuCisg
ICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IHNoaWZ0czsKKworICAgIC8vIFdl
IGludGVycHJldCB0aGVzZSBhcyBTd2FwcyBvdmVyIHNyYygpJ3MgdGhhdCBzaG91bGQgYmUgZXhl
Y3V0ZWQgYmFja3dhcmRzLCBpLmUuIGZvciBhIGxpc3QKKyAgICAvLyBvZiBzaXplIDMgd2Ugd291
bGQgZG8gIlN3YXAgbGlzdFsxXS5zcmMoKSwgbGlzdFsyXS5zcmMoKTsgU3dhcCBsaXN0WzBdLnNy
YygpLCBsaXN0WzFdLnNyYygpIi4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgY2FuJ3Qg
ZG8gdGhhdCBpZiB0aGUgd2lkdGhzIGRvbid0IG1hdGNoIG9yIG90aGVyIGJhZCB0aGluZ3MgaGFw
cGVuLgorICAgIC8vIEJ1dCwgcHJpb3IgdG8gZXhlY3V0aW5nIGFsbCBvZiB0aGF0LCB3ZSBuZWVk
IHRvIGV4ZWN1dGUgdGhlIGZyaW5nZTogdGhlIHNoaWZ0cyBjb21taW5nIG9mZiB0aGUKKyAgICAv
LyByb3RhdGUuCisgICAgVmVjdG9yPFJvdGF0ZT4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAg
SGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAo
Y29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRk
KHBhaXIuc3JjKCksIFZlY3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChwYWlyKTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKwor
ICAgICAgICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
Y3VycmVudFBhaXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBt
YXBwaW5nLmJlZ2luKCktPmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5z
KG9yaWdpbmFsU3JjKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEFyZz4gd29ya2xpc3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3Jj
KTsKKyAgICAgICAgICAgIHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0
ZXIgPSBtYXBwaW5nLmZpbmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBw
aW5nLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBv
c3NpYmxlIHRoYXQgd2UgcHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0Lgor
ICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQocGFpci5zcmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKHBhaXIuZHN0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlyc1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAg
IGJvb2wgaXNSb3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5kc3Qo
KSA9PSBvcmlnaW5hbFNyYykgeworICAgICAgICAgICAgICAgICAgICBpc1JvdGF0ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzUm90YXRlKSB7CisgICAgICAgICAgICAgICAgUm90
YXRlIHJvdGF0ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29t
bW9uIGNhc2UgaXMgdGhhdCB0aGUgcm90YXRlIGRvZXMgbm90IGhhdmUgZnJpbmdlLiBXaGVuIHRo
aXMgaGFwcGVucywgdGhlCisgICAgICAgICAgICAgICAgLy8gbGFzdCBlbGVtZW50IGlzIHRoZSBy
b3RhdGUuCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWlycy5sYXN0KCkuZHN0KCkgPT0g
b3JpZ2luYWxTcmMpCisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wID0gV1RGTW92ZShj
dXJyZW50UGFpcnMpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzbG93IHBhdGguIFRoZSByb3RhdGUgaGFzIGZyaW5nZS4gV2UgZmln
dXJlIHRoaXMgb3V0IGJ5IHdvcmtpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gYmFja3dhcmQu
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPEFyZywg
U2h1ZmZsZVBhaXI+IGRzdE1hcHBpbmc7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
U2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkc3RNYXBwaW5nLmFkZChwYWlyLmRzdCgpLCBwYWlyKTsKKworICAgICAgICAgICAgICAgICAg
ICBTaHVmZmxlUGFpciBwYWlyID0gZHN0TWFwcGluZy50YWtlKG9yaWdpbmFsU3JjKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRl
Lmxvb3AuYXBwZW5kKHBhaXIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIg
PSBkc3RNYXBwaW5nLmZpbmQocGFpci5zcmMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlciA9PSBkc3RNYXBwaW5nLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpciA9IGl0ZXItPnZhbHVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5yZW1vdmUoaXRlcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcC5yZXZlcnNlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyaW5nZSBhcHBl
YXJzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGhvdyBpdCBhcHBlYXJlZCBpbiB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY3VycmVudFBhaXJzLCBzaW5jZSB0aGF0J3MgdGhlIERGUyBvcmRlci4K
KyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJl
bnRQYWlycykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG9mIGNvdXJzZSB3ZSBv
bmx5IGluY2x1ZGUgaXQgaWYgaXQncyBub3QgaW4gdGhlIGxvb3AuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZHN0TWFwcGluZy5jb250YWlucyhwYWlyLmRzdCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByb3RhdGUuZnJpbmdlLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1pbmF0ZXMgYmVjYXVzZSB3ZSByZXR1
cm5lZCB0byB0aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHBh
aXIgbGlzdCBoYXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxhciBzaGFwZS4KKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KQorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocm90YXRlLmxvb3BbaV0uZHN0KCkgPT0gcm90YXRlLmxv
b3BbaSArIDFdLnNyYygpKTsKKyAgICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChXVEZNb3Zl
KHJvdGF0ZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2hpZnRzLmFk
ZChvcmlnaW5hbFNyYywgV1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVy
cy4gVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1
cyB3aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5k
LiBXZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5n
IGNhc2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFu
ZCBkc3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0
cnVjdGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFy
ZSBndWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBo
YXZlIGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2gg
Zm9yIHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9
IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0
aCkgeworICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiB0eXBl
ID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDY0OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91
YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92
ZSA9IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8v
IFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBh
Y2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVt
IHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9m
IHJlc3VsdFBhY2tzIGlzIHBsYWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVj
YXVzZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdp
c3RlcnMsIHNvCisgICAgLy8gaXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0
LgorICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0
PiByZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJl
c3VsdFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdl
dFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBU
bXAgeworICAgICAgICBpZiAoc2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAg
cmV0dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNj
cmF0Y2gpCisgICAgICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
SW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVz
W2luZGV4XSkpOworICAgICAgICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAg
ICBhdXRvIHJldHVyblNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7Cisg
ICAgICAgIGlmIChBcmcodG1wKSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4
XSwgdG1wKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25z
dCBTaHVmZmxlUGFpciYgcGFpciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9w
Y29kZSBtb3ZlID0gbW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtp
bmQoKSkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRT
Y3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygp
LCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpU
bXApKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFp
ci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFs
dWUoKSksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWly
LmRzdCgpKSk7CisgICAgICAgICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRj
aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChtb3ZlLCBvcmlnaW4sIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsK
KyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWly
PiYgc2hpZnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07
KQorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBB
cmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNU
bXAoKSkgeworICAgICAgICAgICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0g
bGFzdERzdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8vIEZpcnN0IGhhbmRsZSBz
aGlmdHMgd2hvc2UgbGFzdCBkZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUg
dXAgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZp
bmFsIHNlcXVlbmNlLCBzbyB0aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdp
bGwgYmUKKyAgICAvLyBhdmFpbGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGlu
ZyBlbWl0dGVkIHByaW9yIChzbywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAg
Ly8gcmV2ZXJzZSkuCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykgeworICAgICAgICBW
ZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoc2hp
ZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7
CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgdGhl
IHJlc3Qgb2YgdGhlIHNoaWZ0cy4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7Cisg
ICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAg
IGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlm
dChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIGZvciAoUm90
YXRlJiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGlmICghcm90YXRlLmZyaW5nZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyB0aGUgZnJpbmdlIGZpcnN0
ISBUaGlzIHdvbid0IGNsb2JiZXIgYW55IG9mIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUKKyAgICAg
ICAgICAgIC8vIHBhcnQgb2YgdGhlIHJvdGF0aW9uLgorICAgICAgICAgICAgaGFuZGxlU2hpZnQo
cm90YXRlLmZyaW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU3dh
cCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIEFyZzo6V2lk
dGggc3dhcFdpZHRoID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3VzIHZhbHVlCisgICAgICAgIAorICAg
ICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICBzd2FwID0gU3dhcDMyOwor
ICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAgZm9yIChT
aHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRo
NjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7CisgICAgICAgICAgICAgICAg
ICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYW5T
d2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6VG1wKTsKKyAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAg
IGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAs
IEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdGFrZSB0aGUg
c3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMgYW5kIHNvbWUgb2YgdGhl
CisgICAgICAgICAgICAgICAgICAgIC8vIHNodWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdl
dHMgdG9vIGNvbmZ1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53
aWR0aCgpIDwgc3dhcFdpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY2FuU3dhcCkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpIC0gMTsgaS0tOykgeworICAgICAgICAgICAgICAg
IEFyZyBsZWZ0ID0gcm90YXRlLmxvb3BbaV0uc3JjKCk7CisgICAgICAgICAgICAgICAgQXJnIHJp
Z2h0ID0gcm90YXRlLmxvb3BbaSArIDFdLnNyYygpOworCisgICAgICAgICAgICAgICAgaWYgKGxl
ZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIgcmFyZSBvdXRjb21lLiBSb3RhdGVzIGFyZSBy
YXJlLiBTcGlsbHMgYXJlIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmluZyBkYXRh
IGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBUbyBnZXQgaGVyZSBhIGxvdCBvZiByYXJlIHN0
dWZmIGhhcyB0bworICAgICAgICAgICAgICAgICAgICAvLyBhbGwgaGFwcGVuIGF0IG9uY2UuCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGdl
dFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCByaWdodCkpOworICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4s
IGxlZnQsIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0
KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIHNjcmF0Y2gs
IGxlZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2luLCBsZWZ0LCByaWdodCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUubG9vcCkg
eworICAgICAgICAgICAgICAgIGlmIChwYWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHBhaXIud2lkdGgoKSA9PSBBcmc6OldpZHRoMzIpOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6OldpZHRoNjQpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBOZWVk
IHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdpbiwgcGFpci5kc3QoKSwgcGFpci5kc3QoKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgY2FuIHRyZWF0
IHRoaXMgYXMgYSBzaGlmdCBzbyBsb25nIGFzIHdlIHRha2UgdGhlIGxhc3QgZGVzdGluYXRpb24g
KGkuZS4gZmlyc3QKKyAgICAgICAgICAgIC8vIHNvdXJjZSkgYW5kIHNhdmUgaXQgZmlyc3QuIFRo
ZW4gd2UgaGFuZGxlIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgcGFpciBpbiB0aGUgcm90YXRlCisg
ICAgICAgICAgICAvLyBzcGVjaWFsbHksIGFmdGVyIHdlIHJlc3RvcmUgdGhlIGxhc3QgZGVzdGlu
YXRpb24uIFRoaXMgcmVxdWlyZXMgc29tZSBzcGVjaWFsIGNhcmUgdG8KKyAgICAgICAgICAgIC8v
IGZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHJv
dGF0ZSB0aGF0IHVzZXMgdGhlIGVudGlyZQorICAgICAgICAgICAgLy8gYXZhaWxhYmxlIHJlZ2lz
dGVyIGZpbGUuCisKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZmluZFBvc3NpYmxlU2NyYXRj
aCgKKyAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJv
dGF0ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5zcmMoKS51c2Vz
VG1wKHRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuZHN0KCkudXNlc1RtcCh0bXApKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgc2NyYXRjaCk7CisKKyAgICAg
ICAgICAgIEFyZyByb3RhdGVTYXZlID0gc2NyYXRjaCA/IEFyZyhzY3JhdGNoKSA6IHNjcmF0Y2hl
c1swXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKAorICAgICAg
ICAgICAgICAgIFNodWZmbGVQYWlyKHJvdGF0ZS5sb29wLmxhc3QoKS5kc3QoKSwgcm90YXRlU2F2
ZSwgcm90YXRlLmxvb3BbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIGhh
bmRsZVNoaWZ0UGFpcihyb3RhdGUubG9vcFtpXSwgMSk7CisKKyAgICAgICAgICAgIGhhbmRsZVNo
aWZ0UGFpcigKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGUu
bG9vcFswXS5kc3QoKSwgcm90YXRlLmxvb3BbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAg
ICBpZiAoc2NyYXRjaCkKKyAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gp
OworICAgICAgICB9CisKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgQVNT
RVJUKHJlc3VsdC5pc0VtcHR5KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0UGFj
a3Muc2l6ZSgpOyBpLS07KQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHJlc3VsdFBhY2tz
W2ldKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZs
ZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWlycywKKyAgICBjb25zdCBzdGQ6
OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNj
cmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbikKK3sKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGdw
UGFpcnM7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBmcFBhaXJzOworICAgIGZvciAoY29uc3Qg
U2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBpZiAocGFpci5zcmMoKS5pc01l
bW9yeSgpICYmIHBhaXIuZHN0KCkuaXNNZW1vcnkoKSAmJiBwYWlyLndpZHRoKCkgPiBBcmc6OnBv
aW50ZXJXaWR0aCgpKSB7CisgICAgICAgICAgICAvLyA4LWJ5dGUgbWVtb3J5LXRvLW1lbW9yeSBt
b3ZlcyBvbiBhIDMyLWJpdCBwbGF0Zm9ybSBhcmUgYmVzdCBoYW5kbGVkIGFzIGZsb2F0IG1vdmVz
LgorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgICAgIH0gZWxzZSBpZiAo
cGFpci5zcmMoKS5pc0dQKCkgJiYgcGFpci5kc3QoKS5pc0dQKCkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCBncFBhaXJzIGdldHMgbWVtb3J5LXRvLW1lbW9yeSBzaHVmZmxlcy4g
VGhlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZQorICAgICAgICAgICAgLy8gY2FuIGRvIHRoYXQgbW9y
ZSBlZmZpY2llbnRseSB1c2luZyBHUFJzLCBleGNlcHQgaW4gdGhlIHNwZWNpYWwgY2FzZSBhYm92
ZS4KKyAgICAgICAgICAgIGdwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnN0
PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShncFBhaXJzLCBn
cFNjcmF0Y2gsIEFyZzo6R1AsIG9yaWdpbikpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1p
dFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBBcmc6OkZQLCBvcmlnaW4pKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVtaXRTaHVmZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJFbWl0U2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyRW1pdFNodWZmbGVfaAorI2RlZmluZSBBaXJFbWl0U2h1ZmZsZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU2h1ZmZsZVBhaXIg
eworcHVibGljOgorICAgIFNodWZmbGVQYWlyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNo
dWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgQXJnOjpXaWR0aCB3aWR0
aCkKKyAgICAgICAgOiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0KQorICAgICAgICAs
IG1fd2lkdGgod2lkdGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZyYgc3JjKCkgY29u
c3QgeyByZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHN0OyB9CisKKyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3Zl
IHdlIGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cu
CisgICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQ
LCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KKyAgICBBcmc6Oldp
ZHRoIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBB
cmcgbV9kc3Q7CisgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKK307CisK
Ky8vIFBlcmZvcm0gYSBzaHVmZmxlIG9mIGEgZ2l2ZW4gdHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1l
bnQgaXMgbWFuZGF0b3J5LiBZb3Ugc2hvdWxkIHBhc3MgaXQgYXMKKy8vIGZvbGxvd3M6IElmIHlv
dSBrbm93IHRoYXQgeW91IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZh
aWxhYmxlIC0gdGhhdCBpcywgdGhleSdyZQorLy8gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50
aW9uZWQgaW4gdGhlIHNodWZmbGUsIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwg
YW5kIGFyZSBub3QKKy8vIGxpdmUgYXQgdGhlIHNodWZmbGUgLSB0aGVuIHlvdSBjYW4gcGFzcyB0
aGVtLiBJZiB5b3UgZG9uJ3QgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBhdmFpbGFibGUgb3IgaWYK
Ky8vIHlvdSBkb24ndCBmZWVsIGxpa2UgbG9va2luZyBmb3IgdGhlbSwgeW91IGNhbiBwYXNzIG1l
bW9yeSBsb2NhdGlvbnMuIEl0J3MgYWx3YXlzIHNhZmUgdG8gcGFzcyBhCisvLyBwYWlyIG9mIG1l
bW9yeSBsb2NhdGlvbnMsIGFuZCByZXBsYWNpbmcgZWl0aGVyIG1lbW9yeSBsb2NhdGlvbiB3aXRo
IGEgcmVnaXN0ZXIgY2FuIGJlIHZpZXdlZCBhcyBhbgorLy8gb3B0aW1pemF0aW9uLiBJdCdzIGEg
cHJldHR5IGltcG9ydGFudCBvcHRpbWl6YXRpb24uIFNvbWUgbW9yZSBub3RlczoKKy8vCisvLyAt
IFdlIGRlZmluZSBzY3JhdGNoIHJlZ2lzdGVycyBhcyB0aGluZ3MgdGhhdCBhcmUgbm90IGxpdmUg
YmVmb3JlIHRoZSBzaHVmZmxlIGFuZCBhcmUgbm90IG9uZSBvZgorLy8gICB0aGUgZGVzdGluYXRp
b25zIG9mIHRoZSBzaHVmZmxlLiBOb3QgYmVpbmcgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYWxz
byBtZWFucyB0aGF0IHRoZXkgY2Fubm90CisvLyAgIGJlIHVzZWQgZm9yIGFueSBvZiB0aGUgc291
cmNlcyBvZiB0aGUgc2h1ZmZsZS4KKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24g
aXMgb25seSBuZWVkZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBp
cyB1c2VkIGJvdGgKKy8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlv
dSdyZSBndWFyYW50ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVy
ZSBpcyBhIFN3YXAgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQg
eW91IGRvbid0IGhhdmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291
cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMg
U3dhcCBvbiB4ODYgd2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3Np
bmcgbWVtb3J5IGxvY2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxl
KCkgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQg
d2lsbCBjYXVzZSBlbWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMg
d2hlbiBpdCBkb2VzIG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRo
YXQgcHJlZGljYW1lbnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBh
ZnRlcgorLy8gICByZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQg
YWRkIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVm
ZmxpbmdzIHVudGlsIGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1v
cnk9Pm1lbW9yeSBwYWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9p
ZCB0aGVtIGlmIHlvdSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0
aGVtLCB0aGVuIG1ha2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25l
IHdheSB0bworLy8gICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KK1ZlY3RvcjxJbnN0PiBl
bWl0U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4g
c2NyYXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZm
bGUgdGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0
ZXJzIG9yIG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRo
ZSBydWxlcyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0
b3I8U2h1ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRj
aCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdp
bik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgi
CisjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5o
IgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9y
dFVzZWRSZWdpc3RlcnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJh
dGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxv
d2VyTWFjcm9zKGNvZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGlt
aXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRp
bWl6YXRpb25zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA0NTYKQEAgLTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2Rl
JiBjb2RlKQogICAgIGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29k
ZSk7CiAKKyAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0
aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFr
ZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5
IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5k
bGVDYWxsZWVTYXZlcyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSArMzgsMTEgQEAgY2xh
c3MgQ29kZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFu
eSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdp
c3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVG
b3JHZW5lcmF0aW9uKENvZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcg
dGhlIGdpdmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwg
Y2FsbGJhY2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgot
dm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CitKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiAr
MzMsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewogCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBW
ZWN0b3I8SW5zdD4mIGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3Rz
KQorICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNlcnRpb25T
ZXQ6Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMpCit7Cisg
ICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIFdU
Rk1vdmUoaW5zdCkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2Nr
KiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2Vy
dGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDkgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwg
c3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0
cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5z
dHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxNSBAQCBwdWJsaWM6CiAKICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29k
ZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKCkgeyB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFy
ZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcmdzLmFwcGVu
ZChhcmcpOworICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9CisKICAgICAvLyBO
b3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3
ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlz
IG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJ
bnN0JiIgdGhlbiB5b3UncmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUg
IkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAi
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2VyQWZ0ZXJS
ZWdBbGxvYyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAi
bG93ZXJBZnRlclJlZ0FsbG9jIik7CisKKyAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4g
dXNlZFJlZ2lzdGVyczsKKworICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2Nh
bENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgc2V0OworCisgICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0g
U2h1ZmZsZSB8fCBpbnN0Lm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKFJlZyByZWcgOiBsb2NhbENhbGMubGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBzZXQu
c2V0KHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvY2Fs
Q2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChzZXQubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwg
c2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChj
b25zdCBSZWdpc3RlclNldCYgc2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcs
IDI+IHsKKyAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KSkgeworICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdFtpXSA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbaV0gPSBBcmc6OnN0YWNrKAorICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNr
U2xvdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRp
dmVXaWR0aCh0eXBlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpB
bm9ueW1vdXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisKKyAgICAvLyBOb3cgdHJhbnNmb3JtIHRoZSBjb2RlLgorICAgIEluc2Vy
dGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIFNodWZmbGU6IHsKKyAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCBzZXQgPSB1c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisgICAgICAgICAgICAgICAgVmVj
dG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAg
IEFyZyBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgICAgICAgICBBcmcgZHN0
ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0
aCA9IGluc3QuYXJnc1tpICsgMl0ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmZv
ckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWly
KHNyYywgZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBz
dGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7
CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0
Y2hlcyhzZXQsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJ
bnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywg
Z3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgaW5z
dCA9IEluc3QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY2FzZSBDb2xkQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2
YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgcHJlVXNlZDsKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5h
dGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpKTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAo
aSA+PSAxID8gaSArIDEgOiBpKSA6IGkgXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9
IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9
IEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNyYy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlVXNl
ZC5zZXQoc3JjLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBz
dGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6
R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRT
Y3JhdGNoZXMocHJlVXNlZCwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgcmVnc1RvU2F2ZSA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsK
KworICAgICAgICAgICAgICAgIC8vIEFsc28gbmVlZCB0byBzYXZlIGFsbCBsaXZlIHJlZ2lzdGVy
cy4gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAg
Ly8gcmVnaXN0ZXIuCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmVnc1RvU2F2ZS5jbGVhcihyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcg
YXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJn
Ojpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc3RhY2tTbG90ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
LmFkZFN0YWNrU2xvdChBcmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcs
IEFyZzo6c3RhY2soc3RhY2tTbG90KSwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrU2xvdHMuYXBwZW5kKHN0YWNrU2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0
cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BT
Y3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAgICAgICAgICAgICAgICBpbnN0
ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAgICAg
ICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lzdGVy
cy4KKyAgICAgICAgICAgICAgICBwYWlycy5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgc3RhY2tTbG90SW5kZXggPSAwOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9y
RWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJn
KHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpj
b25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrU2xvdCogc3RhY2tTbG90ID0gc3RhY2tTbG90c1tzdGFja1Nsb3RJbmRleCsrXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihBcmc6OnN0YWNrKHN0
YWNrU2xvdCksIGFyZywgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBw
YWlyKHJlc3VsdCwgaW5zdC5hcmdzWzFdLCBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAg
ICAgIHJlZ3NUb1NhdmUuc2V0KHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6R1Ap
OworICAgICAgICAgICAgICAgIGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBB
cmc6OkZQKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIGVtaXRTaHVm
ZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKworICAgICAgICBibG9jay0+aW5zdHMoKS5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0OworICAgICAgICAgICAgfSk7CisgICAgfQor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAorI2RlZmluZSBBaXJMb3dlckFmdGVy
UmVnQWxsb2NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGxvd2Vy
cyBTaHVmZmxlIGFuZCBDb2xkQ0NhbGwgaW5zdHJ1Y3Rpb25zLiBUaGlzIHBoYXNlIGlzIGRlc2ln
bmVkIHRvIGJlIHJ1biBhZnRlciByZWdpc3RlcgorLy8gYWxsb2NhdGlvbi4KKwordm9pZCBsb3dl
ckFmdGVyUmVnQWxsb2MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJBZnRlclJl
Z0FsbG9jX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNy
b3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJiBjb2Rl
KQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJNYWNyb3MiKTsKKwor
ICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGlu
c3Qub3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgICAgICAgICAg
Q0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAg
ICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0Nv
bnZlbnRpb24oY29kZSwgdmFsdWUpOworCisgICAgICAgICAgICAgICAgSW5zdCBzaHVmZmxlQXJn
dW1lbnRzKFNodWZmbGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV0p
OworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRlc3Rp
bmF0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5h
cHBlbmQoQXJnOjp3aWR0aEFyZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJ
bnN0KGluc3RJbmRleCwgV1RGTW92ZShzaHVmZmxlQXJndW1lbnRzKSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IHdlJ3JlIHVzaW5nIG91ciBvcmlnaW5hbCBjYWxsZWUgYXJn
dW1lbnQuCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25zWzBdID0gaW5zdC5hcmdzWzBdOwor
CisgICAgICAgICAgICAgICAgLy8gU2F2ZSB3aGVyZSB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24g
cHV0IGl0cyByZXN1bHQuCisgICAgICAgICAgICAgICAgQXJnIHJlc3VsdERzdCA9IHZhbHVlLT50
eXBlKCkgPT0gVm9pZCA/IEFyZygpIDogaW5zdC5hcmdzWzFdOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0
aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0KHZh
bHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRmxvYXQsIHZhbHVlLCByZXN1bHQsIHJlc3Vs
dERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRl
eCArIDEsIE1vdmVEb3VibGUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZTMyLCB2YWx1
ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCisjZGVmaW5lIEFpckxvd2Vy
TWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQWlyIGhhcyBzb21l
IG9wY29kZXMgdGhhdCBhcmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVhbnQgdG8gcmVkdWNl
IHRoZSBhbW91bnQgb2YgbG93LWxldmVsCisvLyBrbm93bGVkZ2UgaW4gdGhlIEIzLT5BaXIgbG93
ZXJpbmcuIFRoZSBjdXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwuCisKK3ZvaWQgbG93ZXJNYWNyb3Mo
Q29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9u
IDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw2ICs0MDcsMTQgQEAgTW92ZSBVOkc6UHRyLCBEOkc6
UHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0
b3JlUHRyCiAKK3g4NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRtcAorICAg
IFRtcCwgQWRkcgorCit4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBU
bXAKKyAgICBUbXAsIEFkZHIKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1w
IGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjcyLDcg
KzY4MCwxOSBAQCBSZXREb3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVybWluYWwKIAor
IyBBIFNodWZmbGUgaXMgYSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9uIG1vdmUuIEl0
IHNpbXVsdGFuZW91c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KKyMgVGhlIG1vdmVz
IGFyZSBzcGVjaWZpZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0aC4gRm9yIGV4
YW1wbGUgeW91IGNhbiByZXF1ZXN0IGEgc3dhcCB0aGlzCisjIHdheToKKyMgICAgIFNodWZmbGUg
JXRtcDEsICV0bXAyLCA2NCwgJXRtcDIsICV0bXAxLCA2NAorY3VzdG9tIFNodWZmbGUKKwogIyBB
aXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNoIG11c3QgYmUg
dGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAorIyBJbnN0cnVjdGlvbnMgdXNlZCBm
b3IgbG93ZXJpbmcgQyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIgZ2VuZXJhdGlv
bi4gVGhleSBnZXQgbG93ZXJlZCB0bworIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4gVGhlIG9yaWdp
biBWYWx1ZSBtdXN0IGJlIGEgQ0NhbGxWYWx1ZS4KK2N1c3RvbSBDQ2FsbAorY3VzdG9tIENvbGRD
Q2FsbAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1
Miw3IEBAIGNvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGUKICAgICByZXR1
cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKIH0K
IAotY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKK0pT
X0VYUE9SVF9QUklWQVRFIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFy
Zzo6VHlwZSk7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRl
ICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8
Y21hdGg+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorCisvLyBXZSBkb24ndCBoYXZlIGEgTk9fUkVUVVJOX0RVRV9UT19FWElULCBu
b3Igc2hvdWxkIHdlLiBUaGF0J3MgcmlkaWN1bG91cy4KK3N0YXRpYyBib29sIGhpZGRlblRydXRo
QmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSB7IHJldHVybiB0cnVlOyB9CisKK3N0YXRpYyB2b2lk
IHVzYWdlKCkKK3sKKyAgICBkYXRhTG9nKCJVc2FnZTogdGVzdGIzIFs8ZmlsdGVyPl1cbiIpOwor
ICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKCkpCisgICAgICAgIGV4
aXQoMSk7Cit9CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsKKworbmFtZXNwYWNlIHsKKworU3RhdGljTG9j
ayBjcmFzaExvY2s7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhl
IGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBpZiAoISEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjcmFzaExvY2subG9jaygp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRU
WV9GVU5DVElPTiwgI3gpOyBcCisgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2Up
CisKK1ZNKiB2bTsKKworc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29tcGlsZShC
Mzo6UHJvY2VkdXJlJiBwcm9jKQoreworICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MuY29k
ZSgpKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jLmNvZGUo
KSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOwor
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGlsYXRpb24iKSksIHByb2Mu
cmVsZWFzZUJ5cHJvZHVjdHMoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKGNvbnN0IEIzOjpDb21waWxhdGlvbiYgY29kZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikg
PSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVu
KEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7Cit9
CisKK3ZvaWQgdGVzdFNpbXBsZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFk
ZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQyKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKKy8vIFVzZSB0aGlzIHRvIHB1dCBhIGNv
bnN0YW50IGludG8gYSByZWdpc3RlciB3aXRob3V0IEFpciBiZWluZyBhYmxlIHRvIHNlZSB0aGUg
Y29uc3RhbnQuCit2b2lkIGxvYWRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgaW50cHRyX3Qg
dmFsdWUsIFRtcCB0bXApCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbG9jazsKKyAgICBzdGF0
aWMgc3RkOjptYXA8aW50cHRyX3QsIGludHB0cl90Kj4qIG1hcDsgLy8gSSdtIG5vdCBtZXNzaW5n
IHdpdGggSGFzaE1hcCdzIHByb2JsZW1zIHdpdGggaW50ZWdlcnMuCisKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihsb2NrKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgbWFwID0gbmV3IHN0ZDo6bWFw
PGludHB0cl90LCBpbnRwdHJfdCo+KCk7CisKKyAgICBpZiAoIW1hcC0+Y291bnQodmFsdWUpKQor
ICAgICAgICAoKm1hcClbdmFsdWVdID0gbmV3IGludHB0cl90KHZhbHVlKTsKKworICAgIGludHB0
cl90KiBwdHIgPSAoKm1hcClbdmFsdWVdOworICAgIGJsb2NrLT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCB0bXApOworICAgIGJs
b2NrLT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjphZGRyKHRtcCksIHRtcCk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaW1wbGVTd2FwKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7Cisg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5k
KAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDQpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVNpbXBsZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s1XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3
VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwg
MCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwg
MyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwg
c2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9
PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUxv
bmdTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBw
cm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQs
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BS
SW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJl
Z1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86
OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNl
LCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNl
LCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNl
LCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAg
ICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAg
IENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdTaGlmdEJh
Y2t3YXJkcygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBw
cm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQs
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BS
SW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJl
Z1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBU
bXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNl
LCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNl
LCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNl
LCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAg
ICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAg
IENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0
ZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNv
ZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChH
UFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVNpbXBsZUJyb2FkY2FzdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAg
ICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGlu
Z3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAg
IENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAg
Q0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgzNSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHVuc2lnbmVkIGNv
dW50ID0gMTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7CisgICAgICAgIGlmIChyZWcgIT0g
UmVnKEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudChyb290LCBjb3Vu
dCsrLCBUbXAocmVnKSk7CisgICAgfQorICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQo
U2h1ZmZsZSwgbnVsbHB0cik7CisgICAgZm9yIChSZWcgcmVnIDogcmVncykgeworICAgICAgICBp
ZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAgICAgICAgICBzaHVmZmxlLmFwcGVu
ZChUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAocmVnKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpKTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChz
aXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhz
bG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdz
KHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IH0KKyAgICAKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIGZvciAoaW50MzJfdCB0aGluZyA6IHRoaW5ncykK
KyAgICAgICAgQ0hFQ0sodGhpbmcgPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJlZVNo
aWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290
LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1w
KEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZv
OjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFw
cGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChH
UFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRt
cCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2Up
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyks
IEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiks
IEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAg
Q0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbM10gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOworICAgIENI
RUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0gMyk7CisgICAgQ0hF
Q0sodGhpbmdzWzddID09IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0QmFja3dh
cmQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5j
b2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxv
YWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAo
R1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86
OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkp
OworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QwKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwg
QXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7CisgICAgQ0hF
Q0sodGhpbmdzWzVdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s2XSA9PSAzKTsKKyAgICBDSEVD
Syh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJh
Y2t3YXJkKCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIHRlc3Qgd2FzIG15IG9yaWdpbmFsIGF0dGVt
cHQgYXQgVHJlZVNoaWZ0QmFja3dhcmQgYnV0IG1pc3Rha2VzIHdlcmUgbWFkZS4gU28sIHRoaXMK
KyAgICAvLyBlbmRzIHVwIGJlaW5nIGp1c3QgYSB3ZWlyZCB0ZXN0LiBCdXQgd2VpcmQgdGVzdHMg
YXJlIHVzZWZ1bCwgc28gSSBrZXB0IGl0LgorICAgIAorICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsK
KyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxv
YWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAo
R1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86
OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChH
UFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcpLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50
MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNl
LCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNl
LCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsK
KyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNL
KHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gOCk7CisgICAgQ0hFQ0so
dGhpbmdzWzJdID09IDgpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA3KTsKKyAgICBDSEVDSyh0
aGluZ3NbNF0gPT0gNyk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDYpOworICAgIENIRUNLKHRo
aW5nc1s2XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNSk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChy
b290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwg
VG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxl
LCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50
MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNl
LCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNl
LCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAzKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNV0gPT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRo
RnJpbmdlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHBy
b2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChy
b290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwg
VG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJ
bmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVn
VDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJn
OjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9m
KHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwor
CisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsK
KyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7Cit9
CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoTG9uZ0ZyaW5nZSgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEs
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5k
KAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKwor
ICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpH
UCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFk
ZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFk
ZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
cm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9
PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09
IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0g
NCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlTXVs
dGlwbGVSb3RhdGVzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRt
cChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5m
bzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAg
VG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwg
NCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwg
c2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDYpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0g
NSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEs
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5k
KAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsK
KyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykp
LCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihi
YXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1
XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncygpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290
LCAzNSArIGksIFRtcChyZWdzW2ldKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVu
ZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1w
KHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgU3RhY2tTbG90
KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCks
IEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOwor
CisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNl
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAg
ICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBz
aXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2Us
IGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMzUpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdz
LnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gMzUgKyBzdGF0aWNfY2Fz
dDxpbnQzMl90PihpKSAtIDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlQWxsUmVncygp
Cit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihB
cmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRD
b25zdGFudChyb290LCAzNSArIGksIFRtcChyZWdzW2ldKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9
IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3Nb
aSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAg
IHNodWZmbGUuYXBwZW5kKFRtcChyZWdzLmxhc3QoKSksIFRtcChyZWdzWzBdKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3Rh
Y2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6
TG9ja2VkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
KyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6
OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90
PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJl
dDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNL
KCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM1
ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVncy5zaXplKCkpIC0gMSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tp
XSA9PSAzNSArIHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIC0gMSk7Cit9CisKK3ZvaWQgdGVzdFNo
dWZmbGVTaW1wbGVTd2FwNjQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAw
MDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAw
MDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChy
b290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzRdOworICAg
IFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJh
c2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAq
IHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAw
MDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQwMDAwMDAwMDAwMDAwMDAw
bGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAw
MDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAw
MDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxv
YWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRy
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBp
bnQ2NF90IHRoaW5nc1s1XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIg
KiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAw
MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzMDAwMDAwMDAwMDAwMDAw
MGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAg
Q0hFQ0sodGhpbmdzWzRdID09IDQwMDAwMDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlU3dhcE1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAw
MDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMw
MDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzRdOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBB
cmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAw
MDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQwMDAwMDAwMDAwMDAw
MDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMzAw
MDAwMDAwMDAwMDAwMDBsbCkpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRo
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBU
bXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAw
MDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUw
MDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFwcGVu
ZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50NjRfdCB0aGluZ3NbNV07CisgICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihi
YXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDY0
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0
aGluZ3NbMl0gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oNDAwMDAwMDAwMDAwMDAwMDBsbCkpOworfQorCit2b2lkIHRlc3RTaHVmZmxl
U2hpZnRNZW1vcnkoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0g
PSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChH
UFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzJdOworICAgIFRtcCBiYXNlID0gY29k
ZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihi
YXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDEpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAzNSk7CisgICAgQ0hFQ0sobWVtb3J5
WzFdID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5TG9uZygpCit7Cisg
ICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKwor
ICAgIGludDMyX3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsx
XSA9IDM2OworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290
LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3Qt
PmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRy
KFRtcChHUFJJbmZvOjpyZWdUMyksIDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJl
Z1QzKSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMiksCisgICAgICAg
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1szXTsK
KyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykp
LCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzNik7CisgICAgQ0hFQ0sobWVtb3J5
WzBdID09IDIpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNo
dWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAg
ICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIFZlY3RvcjxSZWc+
IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmly
c3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytp
KQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgaSArIDEsIFRtcChyZWdzW2ldKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAg
ICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAg
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRk
cihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpy
ZWdUMCksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwg
cmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFd
KSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgVmVj
dG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Nb
MF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAg
TW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVn
VDApLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAzNik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRo
aW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgQ0hFQ0sobWVtb3J5WzBd
ID09IDEpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Cit9CisKKyNkZWZpbmUgUlVOKHRl
c3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRS
dW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPigg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAg
ICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxz
ZSk7CisKK3ZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKK3sKKyAgICBKU0M6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigp
OworCisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOworCisgICAg
YXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3ROYW1lKSAtPiBib29sIHsKKyAg
ICAgICAgcmV0dXJuICFmaWx0ZXIgfHwgISFzdHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOwor
ICAgIH07CisKKyAgICBSVU4odGVzdFNpbXBsZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1w
bGVTd2FwKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZUxvbmdTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVMb25nU2hpZnRCYWNr
d2FyZHMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlUm90YXRlKCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVCcm9hZGNh
c3RBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVRyZWVTaGlmdCgpKTsKKyAgICBSVU4o
dGVzdFNodWZmbGVUcmVlU2hpZnRCYWNrd2FyZCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVl
U2hpZnRPdGhlckJhY2t3YXJkKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRz
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhGcmluZ2UoKSk7CisgICAgUlVOKHRl
c3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTXVs
dGlwbGVSb3RhdGVzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0QW5kUm90YXRlKCkpOwor
ICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVS
b3RhdGVBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVN3YXA2NCgpKTsKKyAg
ICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVN3
YXBNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVT
aGlmdE1lbW9yeUxvbmcoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdz
KCkpOworCisgICAgLy8gU3RpbGwgbmVlZCB0aGUgZm9sbG93aW5nIHRlc3RzOgorICAgIC8vIC0g
bWVtb3J5IHJvdGF0ZQorICAgIC8vIC0gbWVtb3J5IHJvdGF0ZSB3aXRoIG11bHRpcGxlIHdpZHRo
cworICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkgcm90YXRlCisgICAgLy8gLSBtZW1vcnktPm1lbW9y
eSByb3RhdGUgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUgd2l0
aCBubyBzcGFyZSByZWdpc3RlcnMKKyAgICAvLyAtIG1lbW9yeSByb3RhdGUgd2l0aCBubyBzcGFy
ZSByZWdpc3RlcnMgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5
IHJvdGF0ZSB3aXRoIG5vIHNwYXJlIHJlZ2lzdGVycworICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkg
cm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzIHdpdGggbXVsdGlwbGUgd2lkdGhzCisgICAg
Ly8gLSBmbG9hdGluZyBwb2ludAorCisgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAg
dXNhZ2UoKTsKKworICAgIExvY2sgbG9jazsKKworICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVy
PiB0aHJlYWRzOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJl
ck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgeworICAgICAgICB0aHJlYWRzLmFwcGVuZCgKKyAg
ICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIs
CisgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFz
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2tzLnRha2VGaXJzdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0
YXNrLT5ydW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsK
KyAgICB9CisKKyAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKKyAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBjcmFzaExvY2subG9j
aygpOworfQorCit9IC8vIGFub255bW9pcyBuYW1lc3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIz
X0pJVCkKKworc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQoreworICAgIGRhdGFMb2coIkIz
IEpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGZp
bHRlciA9IG51bGxwdHI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2FzZSAxOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFyZ3ZbMV07CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBydW4oZmlsdGVyKTsKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268929</attachid>
            <date>2016-01-13 19:12:55 -0800</date>
            <delta_ts>2016-01-13 20:11:48 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>174125</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMjIgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE0NCw5IEBAIHZvaWQgQXJnOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdp
ZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYgKzE5Nyw5
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhBcmci
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjUsMTYgKzI2NCwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0
aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgiOCIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5w
cmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7
CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0LnBy
aW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDExIEBA
CiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CiAKIGNs
YXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91YmxlQ29uZCwK
LSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFyZwogICAg
IH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7CisgICAgICAg
IGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3QgewogICAgICAg
ICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7CiAgICAg
fQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNv
bGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAg
ICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIENv
bGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBMYXRlQ29s
ZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKICAgICB7
CkBAIC00MzUsNiArNDY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKKyAgICBzdGF0aWMgQXJnIGltbVB0cihjb25zdCB2b2lkKiBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVzcykpOwor
ICAgIH0KKwogICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNl
dCA9IDApCiAgICAgewogICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwpAQCAtNTQ5LDYgKzU4
NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3Rh
dGljIEFyZyB3aWR0aEFyZyhXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gd2lkdGg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKQEAgLTU4NSw2ICs2MzAsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wgaXNTb21l
SW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1tNjQoKTsK
KyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
a2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjU1LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzU3RhY2tN
ZW1vcnkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs3MDIsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAgYm9vbCBp
c1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gV2lkdGhB
cmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwxOCArNzUwLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQWRkcjoK
LSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAgICBjYXNl
IEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJfdCBvZmZz
ZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3ODksMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFdp
ZHRoQXJnKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNldCk7Cisg
ICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBp
c1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwpAQCAt
NzcxLDYgKzgzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0
aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODc5LDggQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDIyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFs
OgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CkBAIC05NzQsNiArMTA0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRtcCB0bXApIGNvbnN0OworCiAgICAgLy8gVGhp
cyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9y
IFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVt
LiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCwxNSArNzgsMTcgQEAgcHVibGljOgogICAgIEluc3RMaXN0JiBpbnN0cygpIHsgcmV0dXJuIG1f
aW5zdHM7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+Ci0gICAgdm9pZCBhcHBlbmRJ
bnN0KEluc3QmJiBpbnN0KQorICAgIEluc3QmIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCiAgICAg
ewogICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAg
ICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICBJbnN0JiBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAg
ICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICAv
LyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28g
dGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KK0FyZyBtYXJzaGFsbENDYWxsQXJn
dW1lbnRJbXBsKHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQs
IFZhbHVlKiBjaGlsZCkKK3sKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0gYXJndW1lbnRD
b3VudCsrOworICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJlck9mQXJndW1l
bnRSZWdpc3RlcnMpCisgICAgICAgIHJldHVybiBUbXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdp
c3Rlcihhcmd1bWVudEluZGV4KSk7CisKKyAgICB1bnNpZ25lZCBzbG90U2l6ZTsKKyAgICBpZiAo
aXNBUk02NCgpICYmIGlzSU9TKCkpIHsKKyAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBwYWNrZWQu
CisgICAgICAgIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFsaWduZWQuCisgICAgICAgIHNsb3RTaXpl
ID0gODsKKyAgICB9CisKKyAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworICAgIEFyZyByZXN1bHQgPSBBcmc6OmNhbGxBcmco
c3RhY2tPZmZzZXQpOworICAgIHN0YWNrT2Zmc2V0ICs9IHNsb3RTaXplOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQoCisgICAgdW5zaWduZWQmIGdw
QXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNr
T2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUo
Y2hpbGQtPnR5cGUoKSkpIHsKKyAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgIHJldHVybiBtYXJz
aGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQsIGNoaWxkKTsKKyAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgIHJldHVybiBtYXJzaGFsbEND
YWxsQXJndW1lbnRJbXBsPEZQUkluZm8+KGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNo
aWxkKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gQXJnKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitWZWN0b3I8QXJnPiBj
b21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUmIGNvZGUsIENDYWxsVmFsdWUqIHZhbHVlKQor
eworICAgIFZlY3RvcjxBcmc+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKFRtcChDQ2FsbFNw
ZWNpYWw6OnNjcmF0Y2hSZWdpc3RlcikpOworICAgIHVuc2lnbmVkIGdwQXJndW1lbnRDb3VudCA9
IDA7CisgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFj
a09mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGls
ZHJlbigpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIG1hcnNo
YWxsQ0NhbGxBcmd1bWVudChncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsIHZhbHVlLT5jaGlsZChpKSkpOworICAgIH0KKyAgICBjb2RlLnJlcXVlc3RDYWxsQXJn
QXJlYVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
c3RhY2tPZmZzZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUbXAgY0NhbGxSZXN1bHQo
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgcmV0dXJuIFRtcCgpOworICAgIGNhc2UgSW50MzI6CisgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgcmV0dXJuIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgY2FzZSBGbG9hdDoK
KyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJuIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gVG1wKCk7Cit9CisKK0luc3QgYnVpbGRDQ2FsbChDb2RlJiBjb2RlLCBWYWx1ZSogb3Jp
Z2luLCBjb25zdCBWZWN0b3I8QXJnPiYgYXJndW1lbnRzKQoreworICAgIEluc3QgaW5zdChQYXRj
aCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwoY29kZS5jQ2FsbFNwZWNpYWwoKSkpOworICAgIGluc3Qu
YXJncy5hcHBlbmQoYXJndW1lbnRzWzBdKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMikpOworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAgICBp
ZiAoYXJnLmlzVG1wKCkpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAg
fQorICAgIHJldHVybiBpbnN0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAor
I2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1R5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihDb2RlJiwgQ0Nh
bGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQoVHlwZSk7CisKK0luc3QgYnVpbGRDQ2FsbChD
b2RlJiwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9yPEFyZz4mKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSwxMiArNTUsMTMgQEAgcHVibGlj
OgogCiAgICAgUHJvY2VkdXJlJiBwcm9jKCkgeyByZXR1cm4gbV9wcm9jOyB9CiAKLSAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gMSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOwogCiAgICAg
Ly8gTm90ZSB0aGF0IHlvdSBjYW4gcmVseSBvbiBzdGFjayBzbG90cyBhbHdheXMgZ2V0dGluZyBp
bmRpY2VzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBpbmRleAogICAgIC8vIG9mIGFueSBwcmlv
ciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3RhY2sgc2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUg
ZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAgIC8vIHRoYXQgaXMgPj0gc3RhY2tTbG90cygp
LnNpemUoKS4KLSAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QoCisgICAgICAgIHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKICAgICBTdGFj
a1Nsb3QqIGFkZFN0YWNrU2xvdChTdGFja1Nsb3RWYWx1ZSopOwogCiAgICAgU3BlY2lhbCogYWRk
U3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ3VzdG9tLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIEND
YWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgIT0gMSArICh2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBj
YW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFh
cmcuaXNTdGFja01lbW9yeSgpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKworICAgIC8vIElm
IHRoZXJlIGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fubm90IGJlIGFuIGltbWVkaWF0ZS4KKyAgICBp
ZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7CisgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNT
b21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaW5zdC5h
cmdzWzFdLmNhblJlcHJlc2VudCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5u
dW1DaGlsZHJlbigpOyBpLS07KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpKTsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAg
aWYgKCFhcmcuY2FuUmVwcmVzZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxs
Q3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3Qs
ICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2Fs
bEhlbHBlcnM6Okp1bXAoKTsKK30KKworYm9vbCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJ
bnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICUgMykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQSBkZXN0aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4g
VGhpcyByZXF1aXJlbWVudCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlv
cgorICAgIC8vIG9mIGhhdmluZyBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0
IG11bHRpcGxlIGlucHV0cyBzaW11bHRhbmVvdXNseS4gSXQgYWxzbworICAgIC8vIGltcG9zZXMg
c29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZs
ZS4gSWYgd2UgdHJlYXQgYSBzaHVmZmxlIHBhaXIKKyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUg
QXJncyBhcyBub2RlcywgdGhlbiB0aGUgc2luZ2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1l
YW5zIHRoYXQgdGhlCisgICAgLy8gc2h1ZmZsZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMg
b2Ygc3ViZ3JhcGhzOgorICAgIC8vCisgICAgLy8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0
aGVzZSBzaGlmdHMuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQor
ICAgIC8vICAgaW5zdHJ1Y3Rpb25zIGFuZCBkb24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCBy
ZWdpc3RlcnMuCisgICAgLy8KKyAgICAvLyAtIENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29u
c2lzdCBvZiBub2RlcyB0aGF0IGhhdmUgb25lIHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29y
LCBzbworICAgIC8vICAgdGhlcmUgaXMgbm8gd2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJv
bSBvdXRzaWRlIG9mIGl0LiBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAgICAv
LyAgIG9yIGJ5IHNhdmluZyBvbmUgb2YgdGhlIEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFu
ZCBleGVjdXRpbmcgaXQgYXMgYSBzaGlmdC4KKyAgICBIYXNoU2V0PEFyZz4gZHN0czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsKKyAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAz
OworCisgICAgICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdp
ZHRoLgorICAgICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAgICBpZiAoIW1vZGUp
IHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobW9kZSA9PSAxKTsK
KyAgICAgICAgICAgIGlmICghZHN0cy5hZGQoYXJnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcuaXNUbXAoKSB8
fCBhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBObyBkZXN0aW5hdGlvbiByZWdpc3RlciBtYXkgYXBw
ZWFyIGluIGFueSBhZGRyZXNzIGV4cHJlc3Npb25zLiBUaGUgbG93ZXJpbmcgY2FuJ3QgaGFuZGxl
IGl0CisgICAgLy8gYW5kIGl0J3Mgbm90IHVzZWZ1bCBmb3IgdGhlIHdheSB3ZSBlbmQgdXAgdXNp
bmcgU2h1ZmZsZXMuIE5vcm1hbGx5LCBTaHVmZmxlcyBvbmx5IHVzZWQgZm9yCisgICAgLy8gc3Rh
Y2sgYWRkcmVzc2VzIGFuZCBub24tc3RhY2sgcmVnaXN0ZXJzLgorICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgaWYgKCFhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgYXJnLmZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgaWYg
KGRzdHMuY29udGFpbnModG1wKSkKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgU2h1
ZmZsZUN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlv
bkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgc2h1ZmZsZTogIiwg
aW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTUxLDYgKzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQgdG8gY2FycnkgZXh0cmEgc3RhdGUgYXJvdW5k
IHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBTcGVjaWFscyBtZWFuIHRoYXQgeW91CiAvLyBh
bHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZlbiBpbiBtZXRob2RzIHRoYXQgZG9uJ3QgdGFr
ZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBEZWZpbml0aW9uIG9mIFBhdGNoIGluc3RydWN0
aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5zdHJ1
Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgogc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKQEAgLTk2LDYgKzk5LDExMyBAQCBzdHJ1
Y3QgUGF0Y2hDdXN0b20gewogICAgIH0KIH07CiAKKy8vIERlZmluaXRpb24gb2YgQ0NhbGwgaW5z
dHJ1Y3Rpb24uIENDYWxsIGlzIHVzZWQgZm9yIGhvdCBwYXRoIEMgZnVuY3Rpb24gY2FsbHMuIEl0
J3MgbG93ZXJlZCB0byBhCisvLyBQYXRjaCB3aXRoIGFuIEFpciBDQ2FsbFNwZWNpYWwgYWxvbmcg
d2l0aCBjb2RlIHRvIG1hcnNoYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgbG93ZXJpbmcgaGFwcGVucwor
Ly8gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciBzZWVzIHRoZSBjbG9iYmVycy4KK3N0cnVjdCBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbjsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICAgICAg
ZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBvaW50
ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUtPnR5cGUo
KSAhPSBWb2lkKSB7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3Qu
YXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLAorICAgICAgICAgICAgICAgIEFyZzo6
dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRo
Rm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybVN0
YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworCisgICAgc3RhdGljIGJvb2wg
YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5z
dCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGp1
c3QgY3Jhc2hlcywgc2luY2Ugd2UgZXhwZWN0IEMgY2FsbHMgdG8gYmUgbG93ZXJlZCBiZWZvcmUg
Z2VuZXJhdGlvbi4KKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKworc3RydWN0IENvbGRD
Q2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMganVzdCBsaWtlIGEgY2FsbCwgYnV0
IHVzZXMgYmVjb21lIGNvbGQuCisgICAgICAgIENDYWxsQ3VzdG9tOjpmb3JFYWNoQXJnKAorICAg
ICAgICAgICAgaW5zdCwKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAgICAgICAgIGZ1
bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChyb2xlKSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAg
fSk7CisgICAgfQorfTsKKworc3RydWN0IFNodWZmbGVDdXN0b20geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGltaXQgPSBp
bnN0LmFyZ3Muc2l6ZSgpIC8gMyAqIDM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaW1pdDsgaSArPSAzKSB7CisgICAgICAgICAgICBBcmcmIHNyYyA9IGluc3QuYXJnc1tpICsg
MF07CisgICAgICAgICAgICBBcmcmIGRzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAg
ICBBcmcmIHdpZHRoQXJnID0gaW5zdC5hcmdzW2kgKyAyXTsKKyAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGggPSB3aWR0aEFyZy53aWR0aCgpOworICAgICAgICAgICAgQXJnOjpUeXBlIHR5cGUg
PSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkgPyBBcmc6OkdQIDogQXJnOjpGUDsKKyAgICAgICAg
ICAgIGZ1bmN0b3Ioc3JjLCBBcmc6OlVzZSwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVu
Y3Rvcihkc3QsIEFyZzo6RGVmLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKHdp
ZHRoQXJnLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpXaWR0aDgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0Jik7CisgICAg
CisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChpbmRleCAlIDMpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJh
dGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cit9OworCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRT
aHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgaWYgKGZ1
bmN0b3IodG1wKSkKKyAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIHJldHVybiBU
bXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0
IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7CisgICAgcmV0dXJuIGZpbmRQb3NzaWJsZVNj
cmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1RtcCh0bXApICYmICFhcmcyLnVzZXNUbXAodG1w
KTsKKyAgICAgICAgfSk7Cit9CisKKy8vIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSwgYSA9PiBj
LCBiID0+IGQpCitzdHJ1Y3QgUm90YXRlIHsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGxvb3A7
IC8vIGluIHRoZSBleGFtcGxlLCB0aGlzIGlzIHRoZSBsb29wOiAoYSA9PiBiLCBiID0+IGEpCisg
ICAgVmVjdG9yPFNodWZmbGVQYWlyPiBmcmluZ2U7IC8vIGluIHRoZSBleGFtcGxlLCB0aGVzZSBh
cmUgdGhlIGFzc29jaWF0ZWQgc2hpZnRzOiAoYSA9PiBjLCBiID0+IGQpCit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKwordm9pZCBTaHVmZmxlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCh3aWR0aCgpLCAiOiIsIHNyYygpLCAiPT4iLCBk
c3QoKSk7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZs
ZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaGVzLCBBcmc6OlR5cGUgdHlw
ZSwgVmFsdWUqIG9yaWdpbikKK3sKKyAgICBwYWlycy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFpci5zcmMoKSA9PSBwYWlyLmRzdCgpOworICAgICAgICB9KTsKKyAgICAKKyAgICAv
LyBGaXJzdCB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgdGhlIGtpbmQgb2Ygc2h1ZmZsZSB0aGF0IHdl
IGtub3cgaG93IHRvIGRlYWwgd2l0aC4KKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
IDogcGFpcnMpIHsKKyAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKTsKKyAg
ICAgICAgQVNTRVJUKHBhaXIuZHN0KCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBh
aXIuZHN0KCkuaXNUbXAoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpOworICAgIH0KKworICAg
IC8vIFRoZXJlIGFyZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdp
bGwgZG86CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMp
LiBXZSBlbWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVp
cmVzCisgICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1v
cnkgbW92ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBw
b3NzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFwZXIuIE5vdGUgdGhhdCBzaGlmdHMgY2FuIGlu
dm9sdmUgdGhlIHNhbWUgc291cmNlIG1lbnRpb25lZAorICAgIC8vICAgbXVsdGlwbGUgdGltZXMu
IEV4YW1wbGU6IChhID0+IGIsIGEgPT4gYywgYiA9PiBkLCBiID0+IGUpLgorICAgIC8vCisgICAg
Ly8gLSBSb3RhdGUuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQgdG8gZW1pdCB0
aGlzIGFzICJTd2FwIGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8vICAgbWF5IG5v
dCBiZSBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3JhdGNoIHJlZ2lz
dGVyIG9yIGEgc2NyYXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGduYXJsaWVyIGV4
YW1wbGUgaXMgKGEgPT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0aGlzIGFzICJT
d2FwIGIsIGM7CisgICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBpbmcgaGFzIHRv
IGJlIGNhcmVmdWwgYWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAgIC8vIE5vdGUg
dGhhdCBhIHJvdGF0ZSBjYW4gaGF2ZSAiZnJpbmdlIi4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGhh
dmUgKGEgPT4gYiwgYiA9PiBhLCBhID0+YywKKyAgICAvLyBiID0+IGQpLiBUaGlzIGhhcyBhIHJv
dGF0ZSBsb29wIChhID0+IGIsIGIgPT4gYSkgYW5kIHNvbWUgZnJpbmdlIChhID0+IGMsIGIgPT4g
ZCkuIFdlIHRyZWF0CisgICAgLy8gdGhlIHdob2xlIHRoaW5nIGFzIGEgc2luZ2xlIHJvdGF0ZS4K
KyAgICAvLworICAgIC8vIFdlIHdpbGwgZmluZCBtdWx0aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJh
dGlvbnMuIFdlIGNhbiBleGVjdXRlIHRoZW0gaW4gYW55IG9yZGVyLgorCisgICAgLy8gV2UgaW50
ZXJwcmV0IHRoZXNlIGFzIE1vdmVzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4g
QWxsIHNoaWZ0cyBhcmUga2V5ZWQgYnkgdGhlaXIKKyAgICAvLyBzdGFydGluZyBzb3VyY2UuCisg
ICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IHNoaWZ0czsKKworICAgIC8vIFdl
IGludGVycHJldCB0aGVzZSBhcyBTd2FwcyBvdmVyIHNyYygpJ3MgdGhhdCBzaG91bGQgYmUgZXhl
Y3V0ZWQgYmFja3dhcmRzLCBpLmUuIGZvciBhIGxpc3QKKyAgICAvLyBvZiBzaXplIDMgd2Ugd291
bGQgZG8gIlN3YXAgbGlzdFsxXS5zcmMoKSwgbGlzdFsyXS5zcmMoKTsgU3dhcCBsaXN0WzBdLnNy
YygpLCBsaXN0WzFdLnNyYygpIi4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgY2FuJ3Qg
ZG8gdGhhdCBpZiB0aGUgd2lkdGhzIGRvbid0IG1hdGNoIG9yIG90aGVyIGJhZCB0aGluZ3MgaGFw
cGVuLgorICAgIC8vIEJ1dCwgcHJpb3IgdG8gZXhlY3V0aW5nIGFsbCBvZiB0aGF0LCB3ZSBuZWVk
IHRvIGV4ZWN1dGUgdGhlIGZyaW5nZTogdGhlIHNoaWZ0cyBjb21taW5nIG9mZiB0aGUKKyAgICAv
LyByb3RhdGUuCisgICAgVmVjdG9yPFJvdGF0ZT4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAg
SGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAo
Y29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRk
KHBhaXIuc3JjKCksIFZlY3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChwYWlyKTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKwor
ICAgICAgICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
Y3VycmVudFBhaXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBt
YXBwaW5nLmJlZ2luKCktPmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5z
KG9yaWdpbmFsU3JjKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEFyZz4gd29ya2xpc3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3Jj
KTsKKyAgICAgICAgICAgIHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0
ZXIgPSBtYXBwaW5nLmZpbmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBw
aW5nLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBv
c3NpYmxlIHRoYXQgd2UgcHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0Lgor
ICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQocGFpci5zcmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKHBhaXIuZHN0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlyc1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAg
IGJvb2wgaXNSb3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBh
aXImIHBhaXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5kc3Qo
KSA9PSBvcmlnaW5hbFNyYykgeworICAgICAgICAgICAgICAgICAgICBpc1JvdGF0ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzUm90YXRlKSB7CisgICAgICAgICAgICAgICAgUm90
YXRlIHJvdGF0ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29t
bW9uIGNhc2UgaXMgdGhhdCB0aGUgcm90YXRlIGRvZXMgbm90IGhhdmUgZnJpbmdlLiBXaGVuIHRo
aXMgaGFwcGVucywgdGhlCisgICAgICAgICAgICAgICAgLy8gbGFzdCBlbGVtZW50IGlzIHRoZSBy
b3RhdGUuCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWlycy5sYXN0KCkuZHN0KCkgPT0g
b3JpZ2luYWxTcmMpCisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wID0gV1RGTW92ZShj
dXJyZW50UGFpcnMpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBzbG93IHBhdGguIFRoZSByb3RhdGUgaGFzIGZyaW5nZS4gV2UgZmln
dXJlIHRoaXMgb3V0IGJ5IHdvcmtpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gYmFja3dhcmQu
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPEFyZywg
U2h1ZmZsZVBhaXI+IGRzdE1hcHBpbmc7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
U2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkc3RNYXBwaW5nLmFkZChwYWlyLmRzdCgpLCBwYWlyKTsKKworICAgICAgICAgICAgICAgICAg
ICBTaHVmZmxlUGFpciBwYWlyID0gZHN0TWFwcGluZy50YWtlKG9yaWdpbmFsU3JjKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRl
Lmxvb3AuYXBwZW5kKHBhaXIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIg
PSBkc3RNYXBwaW5nLmZpbmQocGFpci5zcmMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlciA9PSBkc3RNYXBwaW5nLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpciA9IGl0ZXItPnZhbHVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5yZW1vdmUoaXRlcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcC5yZXZlcnNlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyaW5nZSBhcHBl
YXJzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGhvdyBpdCBhcHBlYXJlZCBpbiB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY3VycmVudFBhaXJzLCBzaW5jZSB0aGF0J3MgdGhlIERGUyBvcmRlci4K
KyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJl
bnRQYWlycykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG9mIGNvdXJzZSB3ZSBv
bmx5IGluY2x1ZGUgaXQgaWYgaXQncyBub3QgaW4gdGhlIGxvb3AuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZHN0TWFwcGluZy5jb250YWlucyhwYWlyLmRzdCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByb3RhdGUuZnJpbmdlLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1pbmF0ZXMgYmVjYXVzZSB3ZSByZXR1
cm5lZCB0byB0aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHBh
aXIgbGlzdCBoYXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxhciBzaGFwZS4KKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KQorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocm90YXRlLmxvb3BbaV0uZHN0KCkgPT0gcm90YXRlLmxv
b3BbaSArIDFdLnNyYygpKTsKKyAgICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChXVEZNb3Zl
KHJvdGF0ZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2hpZnRzLmFk
ZChvcmlnaW5hbFNyYywgV1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVy
cy4gVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1
cyB3aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5k
LiBXZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5n
IGNhc2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFu
ZCBkc3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0
cnVjdGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFy
ZSBndWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBo
YXZlIGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2gg
Zm9yIHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9
IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0
aCkgeworICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiB0eXBl
ID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDY0OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91
YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92
ZSA9IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8v
IFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBh
Y2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVt
IHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9m
IHJlc3VsdFBhY2tzIGlzIHBsYWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVj
YXVzZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdp
c3RlcnMsIHNvCisgICAgLy8gaXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0
LgorICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0
PiByZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJl
c3VsdFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdl
dFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBU
bXAgeworICAgICAgICBpZiAoc2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAg
cmV0dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNj
cmF0Y2gpCisgICAgICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
SW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVz
W2luZGV4XSkpOworICAgICAgICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAg
ICBhdXRvIHJldHVyblNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7Cisg
ICAgICAgIGlmIChBcmcodG1wKSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4
XSwgdG1wKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25z
dCBTaHVmZmxlUGFpciYgcGFpciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9w
Y29kZSBtb3ZlID0gbW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtp
bmQoKSkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRT
Y3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygp
LCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpU
bXApKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFp
ci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFs
dWUoKSksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWly
LmRzdCgpKSk7CisgICAgICAgICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRj
aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChtb3ZlLCBvcmlnaW4sIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsK
KyAgICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWly
PiYgc2hpZnQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2hpZnQuc2l6ZSgpOyBpLS07
KQorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHNoaWZ0W2ldLCAwKTsKKworICAgICAgICBB
cmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsKKyAgICAgICAgaWYgKGxhc3REc3QuaXNU
bXAoKSkgeworICAgICAgICAgICAgZm9yIChBcmcmIHNjcmF0Y2ggOiBzY3JhdGNoZXMpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBsYXN0RHN0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0g
bGFzdERzdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8vIEZpcnN0IGhhbmRsZSBz
aGlmdHMgd2hvc2UgbGFzdCBkZXN0aW5hdGlvbiBpcyBhIHRtcCBiZWNhdXNlIHRoZXNlIGZyZWUg
dXAgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgLy8gVGhlc2UgZW5kIHVwIGxhc3QgaW4gdGhlIGZp
bmFsIHNlcXVlbmNlLCBzbyB0aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlc2Ugc2hpZnRzIHdp
bGwgYmUKKyAgICAvLyBhdmFpbGFibGUgYXMgYSBzY3JhdGNoIGxvY2F0aW9uIGZvciBhbnl0aGlu
ZyBlbWl0dGVkIHByaW9yIChzbywgYWZ0ZXIsIHNpbmNlIHdlJ3JlIGVtaXR0aW5nIGluCisgICAg
Ly8gcmV2ZXJzZSkuCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykgeworICAgICAgICBW
ZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoc2hp
ZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7
CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgdGhl
IHJlc3Qgb2YgdGhlIHNoaWZ0cy4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7Cisg
ICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAg
IGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCisgICAgICAgICAgICBoYW5kbGVTaGlm
dChzaGlmdCk7CisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIGZvciAoUm90
YXRlJiByb3RhdGUgOiByb3RhdGVzKSB7CisgICAgICAgIGlmICghcm90YXRlLmZyaW5nZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyB0aGUgZnJpbmdlIGZpcnN0
ISBUaGlzIHdvbid0IGNsb2JiZXIgYW55IG9mIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUKKyAgICAg
ICAgICAgIC8vIHBhcnQgb2YgdGhlIHJvdGF0aW9uLgorICAgICAgICAgICAgaGFuZGxlU2hpZnQo
cm90YXRlLmZyaW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU3dh
cCA9IGZhbHNlOworICAgICAgICBPcGNvZGUgc3dhcCA9IE9vcHM7CisgICAgICAgIEFyZzo6V2lk
dGggc3dhcFdpZHRoID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3VzIHZhbHVlCisgICAgICAgIAorICAg
ICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICBzd2FwID0gU3dhcDMyOwor
ICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAgICAgICAgZm9yIChT
aHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRo
NjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7CisgICAgICAgICAgICAgICAg
ICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjYW5T
d2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6VG1wKTsKKyAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAg
IGlmIChwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAs
IEFyZzo6QWRkcik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdGFrZSB0aGUg
c3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMgYW5kIHNvbWUgb2YgdGhl
CisgICAgICAgICAgICAgICAgICAgIC8vIHNodWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdl
dHMgdG9vIGNvbmZ1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSAocGFpci53
aWR0aCgpID09IHN3YXBXaWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhblN3YXApIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKSAtIDE7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBBcmcgbGVmdCA9IHJvdGF0ZS5sb29wW2ldLnNyYygpOworICAgICAgICAgICAgICAgIEFyZyBy
aWdodCA9IHJvdGF0ZS5sb29wW2kgKyAxXS5zcmMoKTsKKworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LmlzTWVtb3J5KCkgJiYgcmlnaHQuaXNNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIHN1cGVyIHJhcmUgb3V0Y29tZS4gUm90YXRlcyBhcmUg
cmFyZS4gU3BpbGxzIGFyZSByYXJlLgorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZpbmcgZGF0
YSBiZXR3ZWVuIHR3byBzcGlsbHMgaXMgcmFyZS4gVG8gZ2V0IGhlcmUgYSBsb3Qgb2YgcmFyZSBz
dHVmZiBoYXMgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIGhhcHBlbiBhdCBvbmNlLgor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBn
ZXRTY3JhdGNoKDAsIGZpbmRQb3NzaWJsZVNjcmF0Y2godHlwZSwgbGVmdCwgcmlnaHQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaCk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgoc3dhcFdpZHRoKSwgb3JpZ2lu
LCBsZWZ0LCBzY3JhdGNoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5z
dChzd2FwLCBvcmlnaW4sIHNjcmF0Y2gsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgoc3dhcFdpZHRoKSwgb3JpZ2luLCBzY3JhdGNo
LCBsZWZ0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LmlzTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlLmxvb3Ap
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gTmVl
ZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0KCksIHBhaXIuZHN0KCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiB0cmVh
dCB0aGlzIGFzIGEgc2hpZnQgc28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRlc3RpbmF0aW9u
IChpLmUuIGZpcnN0CisgICAgICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0IGZpcnN0LiBU
aGVuIHdlIGhhbmRsZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhlIHJvdGF0ZQor
ICAgICAgICAgICAgLy8gc3BlY2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBsYXN0IGRlc3Rp
bmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAgICAgICAgICAv
LyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgYSBy
b3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWlsYWJsZSByZWdp
c3RlciBmaWxlLgorCisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJsZVNjcmF0
Y2goCisgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXAp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiBy
b3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNl
c1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpLnVzZXNUbXAodG1wKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRTY3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAg
ICAgICAgICBBcmcgcm90YXRlU2F2ZSA9IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNo
ZXNbMF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAgICAg
ICAgICAgICAgICBTaHVmZmxlUGFpcihyb3RhdGUubG9vcC5sYXN0KCkuZHN0KCksIHJvdGF0ZVNh
dmUsIHJvdGF0ZS5sb29wWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBo
YW5kbGVTaGlmdFBhaXIocm90YXRlLmxvb3BbaV0sIDEpOworCisgICAgICAgICAgICBoYW5kbGVT
aGlmdFBhaXIoCisgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIocm90YXRlU2F2ZSwgcm90YXRl
Lmxvb3BbMF0uZHN0KCksIHJvdGF0ZS5sb29wWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAg
ICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFT
U0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBh
Y2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNr
c1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZm
bGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3Rk
OjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBT
Y3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pCit7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBn
cFBhaXJzOworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnBQYWlyczsKKyAgICBmb3IgKGNvbnN0
IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNN
ZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5KCkgJiYgcGFpci53aWR0aCgpID4gQXJnOjpw
b2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAgLy8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkg
bW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJlIGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zl
cy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYg
KHBhaXIuc3JjKCkuaXNHUCgpICYmIHBhaXIuZHN0KCkuaXNHUCgpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMu
IFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1v
cmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJv
dmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5z
dD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywg
Z3BTY3JhdGNoLCBBcmc6OkdQLCBvcmlnaW4pKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVt
aXRTaHVmZmxlKGZwUGFpcnMsIGZwU2NyYXRjaCwgQXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUgQWlyRW1pdFNodWZmbGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWly
IHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
aHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lk
dGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNv
bnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVy
biBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92
ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93
LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBG
UCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgQXJnOjpX
aWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAg
QXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07Cit9Owor
CisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3Vt
ZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5
b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2
YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVu
dGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUs
IGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3Mg
dGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlm
CisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBt
ZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBzYWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBt
ZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0
aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMgYW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBh
IHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9uLiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8g
LSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZl
IGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5vdCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0
aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFs
c28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8gICBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIHNv
dXJjZXMgb2YgdGhlIHNodWZmbGUuCisvLworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9u
IGlzIG9ubHkgbmVlZGVkIHdoZW4geW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkg
aXMgdXNlZCBib3RoCisvLyAgIGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZ
b3UncmUgZ3VhcmFudGVlZCBub3QgdG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhl
cmUgaXMgYSBTd2FwIGluc3RydWN0aW9uIGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5k
IHlvdSBkb24ndCBoYXZlIGFueSBtZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNv
dXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIG9mCisvLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRz
IFN3YXAgb24geDg2IHdoaWxlIEZQIG5ldmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNz
aW5nIG1lbW9yeSBsb2NhdGlvbnMgYXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZs
ZSgpIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0
IHdpbGwgY2F1c2UgZW1pdFNodWZmbGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJz
IHdoZW4gaXQgZG9lcyBuZWVkCisvLyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0
aGF0IHByZWRpY2FtZW50IGlzIHRvIGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkg
YWZ0ZXIKKy8vICAgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxk
IGFkZCBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1
ZmZsaW5ncyB1bnRpbCBhZnRlciByZWdhbGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVt
b3J5PT5tZW1vcnkgcGFpcnMgYXJlIG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZv
aWQgdGhlbSBpZiB5b3Ugd2FudAorLy8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8g
dGhlbSwgdGhlbiBtYWtpbmcgc3VyZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9u
ZSB3YXkgdG8KKy8vICAgZ2V0IGFjY2VwdGFibGUgcGVyZm9ybWFuY2UuCitWZWN0b3I8SW5zdD4g
ZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiwgc3RkOjphcnJheTxBcmcsIDI+
IHNjcmF0Y2gsIEFyZzo6VHlwZSwgVmFsdWUqIG9yaWdpbik7CisKKy8vIFBlcmZvcm0gYSBzaHVm
ZmxlIHRoYXQgaW52b2x2ZXMgYW55IG51bWJlciBvZiB0eXBlcy4gUGFzcyBzY3JhdGNoIHJlZ2lz
dGVycyBvciBtZW1vcnkgbG9jYXRpb25zCisvLyBmb3IgZWFjaCB0eXBlIGFjY29yZGluZyB0byB0
aGUgcnVsZXMgYWJvdmUuCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVj
dG9yPFNodWZmbGVQYWlyPiYsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0
Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmln
aW4pOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRW1pdFNodWZmbGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5o
IgorI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMu
aCIKICNpbmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBv
cnRVc2VkUmVnaXN0ZXJzLmgiCkBAIC02NSw2ICs2Nyw4IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVy
YXRpb24oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CiAKKyAgICBs
b3dlck1hY3Jvcyhjb2RlKTsKKwogICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRp
bWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0
aW1pemF0aW9ucy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDU2CkBAIC04MCw2ICs4NCw4IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29k
ZSYgY29kZSkKICAgICBlbHNlCiAgICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNv
ZGUpOwogCisgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOworCiAgICAgLy8gUHJpb3IgdG8g
dGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1h
a2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCiAgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlm
eSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCiAgICAgaGFu
ZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTEgKzM4LDExIEBAIGNs
YXNzIENvZGU7CiAKIC8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBh
bnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVn
aXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLXZvaWQgcHJl
cGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJl
Rm9yR2VuZXJhdGlvbihDb2RlJik7CiAKIC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5n
IHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxs
IGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4K
LXZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOworSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CiAKIH0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYg
KzMzLDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKIAordm9pZCBJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29uc3Qg
VmVjdG9yPEluc3Q+JiBpbnN0cykKK3sKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0
cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgaW5zdCk7Cit9CisKK3ZvaWQgSW5zZXJ0aW9u
U2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIFZlY3RvcjxJbnN0PiYmIGluc3RzKQorewor
ICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzKQorICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBX
VEZNb3ZlKGluc3QpKTsKK30KKwogdm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9j
ayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNl
cnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
ZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw5IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgs
IHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOwogICAgIH0KKworICAgIHZvaWQgaW5zZXJ0SW5z
dHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4mKTsKKyAgICB2b2lkIGluc2VydElu
c3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsMTUgQEAgcHVibGljOgogCiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBvcGNv
ZGUgIT0gTm9wIHx8IGFyZ3Muc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGVuZCgpIHsgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChB
cmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXJncy5hcHBl
bmQoYXJnKTsKKyAgICAgICAgYXBwZW5kKGFyZ3VtZW50cy4uLik7CisgICAgfQorCiAgICAgLy8g
Tm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ug
d2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJUiBp
cyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3Qg
SW5zdCYiIHRoZW4geW91J3JlCiAgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVy
UmVnQWxsb2MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUg
IkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlckFmdGVy
UmVnQWxsb2MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
Imxvd2VyQWZ0ZXJSZWdBbGxvYyIpOworCisgICAgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+
IHVzZWRSZWdpc3RlcnM7CisKKyAgICBSZWdMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBSZWdMaXZlbmVzczo6TG9j
YWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKworICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09
IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsKSB7CisgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0
LnNldChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBpZiAoc2V0Lm51bWJlck9m
U2V0UmVnaXN0ZXJzKCkpCisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoJmluc3Qs
IHNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAo
UmVnaXN0ZXJTZXQgc2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsK
KyAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewor
ICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtpXSA9IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soCisgICAg
ICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIC8vIE5vdyB0
cmFuc2Zvcm0gdGhlIGNvZGUuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4
KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAg
ICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2h1ZmZs
ZTogeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0
KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBp
ICs9IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tpICsgMF07
CisgICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAg
ICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAyXS53aWR0aCgp
OworICAgICAgICAgICAgICAgICAgICBzcmMuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
dG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2gg
PSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5
PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpGUCk7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBp
bnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5v
cmlnaW4pKTsKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENvbGRDQ2FsbDogewor
ICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxs
VmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmVVc2VkOworICAgICAg
ICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZl
bnRpb24oY29kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJl
c3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBB
cmcgc3JjID0gaW5zdC5hcmdzW3Jlc3VsdCA/IChpID49IDEgPyBpICsgMSA6IGkpIDogaSBdOwor
ICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAg
ICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+
dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNy
YywgZHN0LCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmlzUmVnKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldChzcmMucmVnKCkpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2gg
PSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgc3RkOjph
cnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkZQKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzVG9TYXZl
ID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworCisgICAgICAgICAgICAgICAgLy8gQWxzbyBu
ZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVnaXN0ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0
IHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvLyByZWdpc3Rlci4KKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmNsZWFyKHJlc3Vs
dC5yZWcoKSk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7
CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lk
dGgpLCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
cGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0
aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0
SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmln
aW4pKTsKKworICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3Jp
Z2luLCBkZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8g
ZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJzLnJl
c2l6ZSgwKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7Cisg
ICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFja1Ns
b3RzW3N0YWNrU2xvdEluZGV4KytdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBw
ZW5kKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBpbnN0LmFyZ3NbMV0sIEFy
Zzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBw
YWlycy5hcHBlbmQocGFpcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5zZXQocmVzdWx0LnJl
ZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBncFNjcmF0Y2ggPSBnZXRT
Y3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpHUCk7CisgICAgICAgICAgICAgICAgZnBTY3JhdGNo
ID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4ICsgMSwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3Jh
dGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworCisgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAg
ICAgWyZdIChJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWlu
c3Q7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvY19oCisjZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKKy8vIFRoaXMgbG93ZXJzIFNodWZmbGUgYW5kIENvbGRDQ2FsbCBpbnN0
cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGFmdGVyIHJlZ2lzdGVy
CisvLyBhbGxvY2F0aW9uLgorCit2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJik7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJN
YWNyb3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNj
b3BlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit2b2lkIGxvd2VyTWFjcm9zKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKGNvZGUsICJsb3dlck1hY3JvcyIpOworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4gZGVz
dGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihjb2RlLCB2YWx1ZSk7CisKKyAg
ICAgICAgICAgICAgICBJbnN0IHNodWZmbGVBcmd1bWVudHMoU2h1ZmZsZSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAg
OiAxOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXN0aW5hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3Mu
YXBwZW5kKGluc3QuYXJnc1tvZmZzZXQgKyBpXSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZm
bGVBcmd1bWVudHMuYXJncy5hcHBlbmQoZGVzdGluYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChBcmc6OndpZHRoQXJnKEFyZzo6d2lk
dGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoaW5zdEluZGV4LCBXVEZNb3ZlKHNodWZm
bGVBcmd1bWVudHMpKTsKKworICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgd2UncmUg
dXNpbmcgb3VyIG9yaWdpbmFsIGNhbGxlZSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbnNbMF0gPSBpbnN0LmFyZ3NbMF07CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHdo
ZXJlIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBwdXQgaXRzIHJlc3VsdC4KKyAgICAgICAgICAg
ICAgICBBcmcgcmVzdWx0RHN0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gQXJnKCkgOiBpbnN0
LmFyZ3NbMV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxk
Q0NhbGwoY29kZSwgaW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAg
ICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1v
dmVGbG9hdCwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZURvdWJsZSwgdmFsdWUsIHJl
c3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dChpbnN0SW5kZXggKyAxLCBNb3ZlMzIsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZSwg
dmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJNYWNyb3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyTWFjcm9zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxv
d2VyTWFjcm9zX2gKKyNkZWZpbmUgQWlyTG93ZXJNYWNyb3NfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCisvLyBBaXIgaGFzIHNvbWUgb3Bjb2RlcyB0aGF0IGFyZSB2ZXJ5IGhpZ2gt
bGV2ZWwgYW5kIGFyZSBtZWFudCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBsb3ctbGV2ZWwKKy8v
IGtub3dsZWRnZSBpbiB0aGUgQjMtPkFpciBsb3dlcmluZy4gVGhlIGN1cnJlbnQgZXhhbXBsZSBp
cyBDQ2FsbC4KKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJMb3dlck1hY3Jvc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtNDA3LDYg
KzQwNywxNCBAQCBNb3ZlIFU6RzpQdHIsIEQ6RzpQdHIKICAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
UHRyCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKIAoreDg2OiBTd2FwMzIgVUQ6Rzoz
MiwgVUQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRyCisKK3g4Nl82NDogU3dhcDY0
IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgorCiBNb3ZlMzIg
VTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIKICAgICBB
ZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02NzIsNyArNjgwLDE5IEBAIFJldERvdWJsZSBVOkY6NjQg
L3JldHVybgogCiBPb3BzIC90ZXJtaW5hbAogCisjIEEgU2h1ZmZsZSBpcyBhIG11bHRpLXNvdXJj
ZSwgbXVsdGktZGVzdGluYXRpb24gbW92ZS4gSXQgc2ltdWx0YW5lb3VzbHkgZG9lcyBtdWx0aXBs
ZSBtb3ZlcyBhdCBvbmNlLgorIyBUaGUgbW92ZXMgYXJlIHNwZWNpZmllZCBhcyB0cmlwbGV0cyBv
ZiBzcmMsIGRzdCwgYW5kIHdpZHRoLiBGb3IgZXhhbXBsZSB5b3UgY2FuIHJlcXVlc3QgYSBzd2Fw
IHRoaXMKKyMgd2F5OgorIyAgICAgU2h1ZmZsZSAldG1wMSwgJXRtcDIsIDY0LCAldG1wMiwgJXRt
cDEsIDY0CitjdXN0b20gU2h1ZmZsZQorCiAjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlv
ci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNp
YWwgb3BlcmFuZCwKICMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KIGN1c3RvbSBQ
YXRjaAogCisjIEluc3RydWN0aW9ucyB1c2VkIGZvciBsb3dlcmluZyBDIGNhbGxzLiBUaGVzZSBk
b24ndCBtYWtlIGl0IHRvIEFpciBnZW5lcmF0aW9uLiBUaGV5IGdldCBsb3dlcmVkIHRvCisjIHNv
bWV0aGluZyBlbHNlIGZpcnN0LiBUaGUgb3JpZ2luIFZhbHVlIG11c3QgYmUgYSBDQ2FsbFZhbHVl
LgorY3VzdG9tIENDYWxsCitjdXN0b20gQ29sZENDYWxsCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9u
IDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgY29uc3QgVmVjdG9yPHR5cGVuYW1l
IEJhbms6OlJlZ2lzdGVyVHlwZQogICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8
QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOwogfQogCi1jb25zdCBWZWN0b3I8UmVnPiYgcmVnc0lu
UHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVmVjdG9y
PFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKIAogfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVz
dGFpci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNp
bmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJCM0Nv
bXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgi
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxtYXA+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL051bWJl
ck9mQ29yZXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKy8vIFdlIGRvbid0IGhh
dmUgYSBOT19SRVRVUk5fRFVFX1RPX0VYSVQsIG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vs
b3VzLgorc3RhdGljIGJvb2wgaGlkZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsg
cmV0dXJuIHRydWU7IH0KKworc3RhdGljIHZvaWQgdXNhZ2UoKQoreworICAgIGRhdGFMb2coIlVz
YWdlOiB0ZXN0YjMgWzxmaWx0ZXI+XVxuIik7CisgICAgaWYgKGhpZGRlblRydXRoQmVjYXVzZU5v
UmV0dXJuSXNTdHVwaWQoKSkKKyAgICAgICAgZXhpdCgxKTsKK30KKworI2lmIEVOQUJMRShCM19K
SVQpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
OworCituYW1lc3BhY2UgeworCitTdGF0aWNMb2NrIGNyYXNoTG9jazsKKworLy8gTm90aGluZyBm
YW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNo
aW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghISh4KSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGNyYXNoTG9jay5sb2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUo
X19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICAgICAg
Q1JBU0goKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworVk0qIHZtOworCitzdGQ6OnVuaXF1ZV9w
dHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCit7CisgICAg
cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYy5jb2RlKCkpOworICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOworICAgIGdlbmVyYXRlKHByb2MuY29kZSgpLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgi
dGVzdGFpciBjb21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBpbnZva2UoY29u
c3QgQjM6OkNvbXBpbGF0aW9uJiBjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAg
IFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50
cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5j
dGlvbihhcmd1bWVudHMuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CitUIGNvbXBpbGVBbmRSdW4oQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBpbnZva2U8VD4oKmNvbXBpbGUo
cHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCB0ZXN0U2ltcGxlKCkKK3sKKyAg
ICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNDIpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsK
K30KKworLy8gVXNlIHRoaXMgdG8gcHV0IGEgY29uc3RhbnQgaW50byBhIHJlZ2lzdGVyIHdpdGhv
dXQgQWlyIGJlaW5nIGFibGUgdG8gc2VlIHRoZSBjb25zdGFudC4KK3ZvaWQgbG9hZENvbnN0YW50
KEJhc2ljQmxvY2sqIGJsb2NrLCBpbnRwdHJfdCB2YWx1ZSwgVG1wIHRtcCkKK3sKKyAgICBzdGF0
aWMgU3RhdGljTG9jayBsb2NrOworICAgIHN0YXRpYyBzdGQ6Om1hcDxpbnRwdHJfdCwgaW50cHRy
X3QqPiogbWFwOyAvLyBJJ20gbm90IG1lc3Npbmcgd2l0aCBIYXNoTWFwJ3MgcHJvYmxlbXMgd2l0
aCBpbnRlZ2Vycy4KKworICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgIGlmICghbWFw
KQorICAgICAgICBtYXAgPSBuZXcgc3RkOjptYXA8aW50cHRyX3QsIGludHB0cl90Kj4oKTsKKwor
ICAgIGlmICghbWFwLT5jb3VudCh2YWx1ZSkpCisgICAgICAgICgqbWFwKVt2YWx1ZV0gPSBuZXcg
aW50cHRyX3QodmFsdWUpOworCisgICAgaW50cHRyX3QqIHB0ciA9ICgqbWFwKVt2YWx1ZV07Cisg
ICAgYmxvY2stPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4ocHRyKSksIHRtcCk7CisgICAgYmxvY2stPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmFkZHIodG1wKSwgdG1wKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRt
cChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGlu
dDMyX3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFz
ZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDMpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQoKQoreworICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAx
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQ
UkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpy
ZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJl
Z1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdz
WzVdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjph
ZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjph
ZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9
PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09
IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRt
cChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdU
NiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsK
KworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJn
OjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAg
ICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRt
cChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q3
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsK
KworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJn
OjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAg
ICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlUm90YXRlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHBy
b2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9v
dCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdU
MSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGlu
dDMyX3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFz
ZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRt
cChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAw
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAz
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7CisgICAg
Q0hFQ0sodGhpbmdzWzNdID09IDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxs
UmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlP
cmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDM1KSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgdW5zaWduZWQgY291bnQgPSAxOworICAgIGZvciAoUmVnIHJlZyA6
IHJlZ3MpIHsKKyAgICAgICAgaWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVnVDApKQorICAgICAg
ICAgICAgbG9hZENvbnN0YW50KHJvb3QsIGNvdW50KyssIFRtcChyZWcpKTsKKyAgICB9CisgICAg
SW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3Ig
KFJlZyByZWcgOiByZWdzKSB7CisgICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1Qw
KSkKKyAgICAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChy
ZWcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgIH0KKworICAgIFN0YWNrU2xv
dCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgp
LCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsK
KworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFz
ZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICog
c2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNl
LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Zm9yIChpbnQzMl90IHRoaW5nIDogdGhpbmdzKQorICAgICAgICBDSEVDSyh0aGluZyA9PSAzNSk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJl
Z1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3
LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQ
UkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisg
ICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQ
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRk
cihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRk
cihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGlu
Z3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAg
IENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAg
Q0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBD
SEVDSyh0aGluZ3NbNF0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAgIENI
RUNLKHRoaW5nc1s2XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVUcmVlU2hpZnRCYWNrd2FyZCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRD
b25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcs
IFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BS
SW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxw
dHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwg
VG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRy
KGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMl0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAgIENI
RUNLKHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAgQ0hF
Q0sodGhpbmdzWzZdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwordm9p
ZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdE90aGVyQmFja3dhcmQoKQoreworICAgIC8vIE5PVEU6IFRo
aXMgdGVzdCB3YXMgbXkgb3JpZ2luYWwgYXR0ZW1wdCBhdCBUcmVlU2hpZnRCYWNrd2FyZCBidXQg
bWlzdGFrZXMgd2VyZSBtYWRlLiBTbywgdGhpcworICAgIC8vIGVuZHMgdXAgYmVpbmcganVzdCBh
IHdlaXJkIHRlc3QuIEJ1dCB3ZWlyZCB0ZXN0cyBhcmUgdXNlZnVsLCBzbyBJIGtlcHQgaXQuCisg
ICAgCisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywg
VG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVn
VDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRD
b25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQo
CisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCks
IFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcp
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUNyksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6
OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
KDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0
KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5k
UnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNL
KHRoaW5nc1sxXSA9PSA4KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gOCk7CisgICAgQ0hFQ0so
dGhpbmdzWzNdID09IDcpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA3KTsKKyAgICBDSEVDSyh0
aGluZ3NbNV0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRo
aW5nc1s3XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAo
R1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzRdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAxKTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhGcmluZ2UoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikp
OworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRt
cChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBp
bnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJh
c2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJh
c2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3Qt
PmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisK
KyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0so
IWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7
CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsK
KyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOwor
ICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdp
dGhMb25nRnJpbmdlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRt
cChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5m
bzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAg
VG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwg
NCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwg
c2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0g
NSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVNdWx0aXBsZVJvdGF0ZXMoKQoreworICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAx
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQ
UkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpy
ZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVu
ZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJ
bmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
NSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisK
KyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjph
ZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjph
ZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9
PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09
IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNo
aWZ0QW5kUm90YXRlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRt
cChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5m
bzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
KTsKKworICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBB
cmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVm
ZmxlU2hpZnRBbGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdz
SW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUu
YWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJlZ3NbaV0pKTsKKyAg
ICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxl
LmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSk7CisKKyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChz
aXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhz
bG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdz
KHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IH0KKyAgICAKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNL
KHRoaW5nc1tpXSA9PSAzNSArIHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIC0gMSk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4m
IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJl
Z3NbaV0pKTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxw
dHIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAg
ICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3MubGFz
dCgpKSwgVG1wKHJlZ3NbMF0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAg
U3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVn
cy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQz
Ml90KSkpOworCisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsK
KyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1sw
XSkpLCBiYXNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsr
aSkgeworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNs
b3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7
CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihyZWdz
LnNpemUoKSkgLSAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7
ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oaSkgLSAxKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXA2NCgpCit7CisgICAg
QjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86
OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRt
cChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOwor
CisgICAgaW50NjRfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6
OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihi
YXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0
aGluZ3NbMl0gPT0gNDAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQ2
NCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNv
ZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5m
bzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwg
VG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzVdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVv
ZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIo
YmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQ2
NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3Ms
IDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsK
KyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0so
dGhpbmdzWzJdID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9
PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNDAwMDAwMDAw
MDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpCit7Cisg
ICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxv
YWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUklu
Zm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGws
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJl
Z1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkp
OworCisgICAgaW50NjRfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRk
cihiYXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGlu
dDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5n
cywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwp
OworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gNDAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigzMDAwMDAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaGlmdE1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAw
MDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAw
MDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxv
YWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRy
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBp
bnQ2NF90IHRoaW5nc1s1XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIg
KiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAw
MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzMDAwMDAwMDAwMDAwMDAw
MGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAg
Q0hFQ0sodGhpbmdzWzRdID09IHN0YXRpY19jYXN0PHVpbnQzMl90Pig0MDAwMDAwMDAwMDAwMDAw
MGxsKSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeSgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMy
X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2Owor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMy
X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2Yo
aW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5
WzBdID09IDM1KTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlU2hpZnRNZW1vcnlMb25nKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAg
Q29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50MzJfdCBtZW1vcnlbMl07CisgICAg
bWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJl
Z1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1w
KEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAg
KiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMCAqIHNp
emVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAx
ICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAxICogc2l6ZW9mKGludDMyX3QpKSwg
VG1wKEdQUkluZm86OnJlZ1QyKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
KTsKKworICAgIGludDMyX3QgdGhpbmdzWzNdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDM2KTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMik7CisgICAgQ0hFQ0sobWVtb3J5
WzFdID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpCit7
CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsK
KworICAgIGludDMyX3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9y
eVsxXSA9IDM2OworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIo
QXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290
LCBpICsgMSwgVG1wKHJlZ3NbaV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNo
dWZmbGUgPSByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAg
IAorICAgICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAw
ICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBz
aXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwg
MSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQzMl90KSks
IFRtcChyZWdzWzFdKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBz
aHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6
ZSgpLCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAg
ICByb290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ld
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDM2KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDMy
X3Q+KGkpKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzFd
ID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBs
bDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4g
cmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJz
dChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFk
ZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kp
CisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBU
bXAocmVnc1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0
cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJv
b3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAg
IFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2Yo
aW50NjRfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAg
IAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2
NF90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9m
KGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3Nb
MV0pLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBw
ZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFw
cGVuZCgKKyAgICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRy
KFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMzYwMDAwMDAwMDAwMDBsbCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVt
b3J5WzBdID09IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAw
MDAwMDAwMDAwbGwpOworfQorCitpbnQ2NF90IGNvbWJpbmVIaUxvKGludDY0X3QgaGlnaCwgaW50
NjRfdCBsb3cpCit7CisgICAgdW5pb24geworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAg
ICBpbnQzMl90IGhhbHZlc1syXTsKKyAgICB9IHU7CisgICAgdS52YWx1ZSA9IGhpZ2g7CisgICAg
dS5oYWx2ZXNbMF0gPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihsb3cpOworICAgIHJldHVybiB1LnZh
bHVlOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgp
Cit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAw
MDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxS
ZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3Zl
Rmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBs
bCwgVG1wKHJlZ3NbaV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUg
PSByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAg
ICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6
ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2Yo
aW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNp
emVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChy
ZWdzWzFdKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNodWZm
bGUuYXBwZW5kKAorICAgICAgICAgICAgVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLAor
ICAgICAgICAgICAgKGkgJiAxKSA/IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSA6IEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IHRo
aW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwg
VG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihp
bnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVD
SyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAx
MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oMzYwMDAwMDAwMDAwMDBsbCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbDsKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09
ICgoaSAmIDEpID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSA6IHZhbHVlKSk7CisgICAg
fQorICAgIENIRUNLKG1lbW9yeVswXSA9PSBjb21iaW5lSGlMbygzNTAwMDAwMDAwMDAwMGxsLCAx
MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBs
bCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnkoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90
IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFw
cGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKworICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBz
aXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApLAorICAgICAgICBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbMl07CisgICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJl
dDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNl
dCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNik7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyKTsKKyAgICBDSEVD
SyhtZW1vcnlbMV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5NjQo
KQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2Rl
KCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAw
MDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAw
MDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290
LCAyMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCisg
ICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRoaW5n
c1syXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hF
Q0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0g
MzYwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEwMDAwMDAwMDAwMDBs
bCk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0so
bWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0
ZXN0KSkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVuZCggICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgWyZdICgpIHsgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICBcCisgICAg
ICAgICAgICAgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICBcCisgICAgICAgICAgICAgICAg
fSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOwor
Cit2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKwor
ICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKKworICAgIGF1dG8g
c2hvdWxkUnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7CisgICAgICAg
IHJldHVybiAhZmlsdGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9
OworCisgICAgUlVOKHRlc3RTaW1wbGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU3dh
cCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNo
dWZmbGVMb25nU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0QmFja3dhcmRz
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpKTsKKyAgICBSVU4odGVzdFNo
dWZmbGVTaW1wbGVCcm9hZGNhc3QoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxs
UmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnQoKSk7CisgICAgUlVOKHRlc3RT
aHVmZmxlVHJlZVNoaWZ0QmFja3dhcmQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0
T3RoZXJCYWNrd2FyZCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZU11bHRpcGxl
Um90YXRlcygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVTaGlmdEFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRl
QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTd2FwNjQoKSk7CisgICAgUlVO
KHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTd2FwTWl4
ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1peGVkV2lkdGgoKSk7CisgICAg
UlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnkoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRN
ZW1vcnlMb25nKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpKTsKKyAgICBSVU4odGVz
dFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVJvdGF0ZU1lbW9yeSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnk2NCgp
KTsKKworICAgIC8vIFN0aWxsIG5lZWQgdGhlIGZvbGxvd2luZyB0ZXN0czoKKyAgICAvLyAtIG1l
bW9yeSByb3RhdGUgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAvLyAtIG1lbW9yeS0+bWVtb3J5
IHJvdGF0ZSB3aXRoIG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gbWVtb3J5IHJvdGF0ZSB3aXRo
IG5vIHNwYXJlIHJlZ2lzdGVycworICAgIC8vIC0gbWVtb3J5IHJvdGF0ZSB3aXRoIG5vIHNwYXJl
IHJlZ2lzdGVycyB3aXRoIG11bHRpcGxlIHdpZHRocworICAgIC8vIC0gbWVtb3J5LT5tZW1vcnkg
cm90YXRlIHdpdGggbm8gc3BhcmUgcmVnaXN0ZXJzCisgICAgLy8gLSBtZW1vcnktPm1lbW9yeSBy
b3RhdGUgd2l0aCBubyBzcGFyZSByZWdpc3RlcnMgd2l0aCBtdWx0aXBsZSB3aWR0aHMKKyAgICAv
LyAtIGZsb2F0aW5nIHBvaW50CisKKyAgICBpZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAgICB1
c2FnZSgpOworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+
IHRocmVhZHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVy
T2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVhZHMuYXBwZW5kKAorICAg
ICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwK
KyAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNr
OworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MudGFrZUZpcnN0KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRh
c2stPnJ1bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOwor
ICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQorICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGNyYXNoTG9jay5sb2Nr
KCk7Cit9CisKK30gLy8gYW5vbnltb2lzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNf
SklUKQorCitzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCit7CisgICAgZGF0YUxvZygiQjMg
SklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgY29uc3QgY2hhciogZmls
dGVyID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGFyZ2MpIHsKKyAgICBjYXNlIDE6CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmlsdGVyID0gYXJndlsxXTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIHJ1bihmaWx0ZXIpOworICAgIHJldHVybiAwOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268931</attachid>
            <date>2016-01-13 20:11:48 -0800</date>
            <delta_ts>2016-01-13 22:00:14 -0800</delta_ts>
            <desc>write all the shuffle tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>184152</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5j
bHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1
cm4gYmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAg
ICAgICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBz
aWduZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiAr
NzgsMzEgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0K
IH0KIAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wg
dXNlcyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0
KAorICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJUbXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpKTsKK30KKworYm9vbCBBcmc6OmlzQ29tcGF0aWJsZVR5cGUoY29uc3QgQXJnJiBvdGhlcikg
Y29uc3QKK3sKKyAgICBpZiAoaGFzVHlwZSgpKQorICAgICAgICByZXR1cm4gb3RoZXIuaXNUeXBl
KHR5cGUoKSk7CisgICAgaWYgKG90aGVyLmhhc1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGlzVHlw
ZShvdGhlci50eXBlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEFyZzo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xMTEs
NiArMTUzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBj
YXNlIFNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsK
ICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCh3
aWR0aCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0xNjEsNiArMjA2LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQucHJp
bnQoIlNwZWNpYWwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpXaWR0aEFyZzoK
KyAgICAgICAgb3V0LnByaW50KCJXaWR0aEFyZyIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyNSwxNiArMjczLDE2IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKIHsKICAgICBzd2l0Y2gg
KHdpZHRoKSB7CiAgICAgY2FzZSBBcmc6OldpZHRoODoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0
aDgiKTsKKyAgICAgICAgb3V0LnByaW50KCI4Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEFyZzo6V2lkdGgxNjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDE2Iik7CisgICAgICAgIG91
dC5wcmludCgiMTYiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDMyOgot
ICAgICAgICBvdXQucHJpbnQoIldpZHRoMzIiKTsKKyAgICAgICAgb3V0LnByaW50KCIzMiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Ci0gICAgICAgIG91dC5wcmlu
dCgiV2lkdGg2NCIpOworICAgICAgICBvdXQucHJpbnQoIjY0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZh
bHVlOworCituYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgU3BlY2lhbDsKIGNsYXNzIFN0YWNrU2xv
dDsKQEAgLTY5LDcgKzczLDggQEAgcHVibGljOgogICAgICAgICBSZWxDb25kLAogICAgICAgICBS
ZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBTcGVjaWFsCisgICAgICAgIFNw
ZWNpYWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhf
dCB7CkBAIC0xNTYsNiArMTYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihGUCk7CisgICAgfQorCiAgICAg
ZW51bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwKICAgICAgICAgV2lkdGgxNiwK
QEAgLTIyMCw2ICsyMzIsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9s
ZSkgJiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUm9sZSBjb29sZWQo
Um9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2Ug
Q29sZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6
CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2Ug
WkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAgICAgY2Fz
ZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAgICAgICAgY2FzZSBMYXRlVXNl
OgorICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAgICAgICB9CisgICAgfQorCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxs
IFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29s
IGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTQzNSw2ICs0NjcsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgaW1tUHRy
KGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gaW1tNjQoYml0d2lz
ZV9jYXN0PGludHB0cl90PihhZGRyZXNzKSk7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBhZGRy
KEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChiYXNlLmlzR1AoKSk7CkBAIC01NDksNiArNTg2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRo
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdp
ZHRoQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB3aWR0aDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApA
QCAtNTg1LDYgKzYzMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1t
NjQ7CiAgICAgfQogCisgICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzSW1tKCkgfHwgaXNJbW02NCgpOworICAgIH0KKwogICAgIGJvb2wgaXNBZGRyKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTYwNSw2ICs2
NTUsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0K
IAorICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBj
YXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgaXNTdGFja01lbW9yeSgpIGNvbnN0OworCiAgICAgYm9vbCBp
c1JlbENvbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25k
OwpAQCAtNjM3LDYgKzcwMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0g
U3BlY2lhbDsKICAgICB9CiAKKyAgICBib29sIGlzV2lkdGhBcmcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9CisKICAgICBib29sIGlzQWxp
dmUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpA
QCAtNjgwLDE4ICs3NTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAg
fQogCi0gICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKLSAgICAgICAgY2FzZSBBZGRyOgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAg
ICBjYXNlIENhbGxBcmc6Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5
KCk7IH0KICAgICAKICAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtNzMwLDYg
Kzc4OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVj
aWFsKj4obV9vZmZzZXQpOwogICAgIH0KIAorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gV2lkdGhBcmcpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2lkdGg+KG1fb2Zmc2V0KTsKKyAgICB9CisKICAgICBib29sIGlzR1BUbXAoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAt
NzU0LDYgKzgxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBj
YXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0
aEFyZzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAg
ICAgICAgIHJldHVybiBpc0dQVG1wKCk7CkBAIC03NzEsNiArODM3LDcgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2Fz
ZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTgxMiw2
ICs4NzksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXBy
ZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaXNDb21wYXRpYmxlVHlwZShj
b25zdCBBcmcmIG90aGVyKSBjb25zdDsKKwogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDI0
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91Ymxl
Q29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC05NzQsNiArMTA0Niw4
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRt
cCB0bXApIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0
IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAg
IC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNSArNzgsMTcgQEAgcHVibGljOgogICAgIElu
c3RMaXN0JiBpbnN0cygpIHsgcmV0dXJuIG1faW5zdHM7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEluc3Q+Ci0gICAgdm9pZCBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAgIEluc3QmIGFw
cGVuZEluc3QoSW5zdCYmIGluc3QpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6
OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQgYXBw
ZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICBJbnN0JiBhcHBlbmQoQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgICAgIHJldHVybiBtX2lu
c3RzLmxhc3QoKTsKICAgICB9CiAKICAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8g
d2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2Ug
aXMgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29u
dmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwu
aCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5r
SW5mbz4KK0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsKHVuc2lnbmVkJiBhcmd1bWVudENv
dW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4ID0gYXJndW1lbnRDb3VudCsrOworICAgIGlmIChhcmd1bWVudEluZGV4
IDwgQmFua0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpCisgICAgICAgIHJldHVybiBU
bXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7CisKKyAgICB1
bnNpZ25lZCBzbG90U2l6ZTsKKyAgICBpZiAoaXNBUk02NCgpICYmIGlzSU9TKCkpIHsKKyAgICAg
ICAgLy8gQXJndW1lbnRzIGFyZSBwYWNrZWQuCisgICAgICAgIHNsb3RTaXplID0gc2l6ZW9mVHlw
ZShjaGlsZC0+dHlwZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcmd1bWVudHMgYXJl
IGFsaWduZWQuCisgICAgICAgIHNsb3RTaXplID0gODsKKyAgICB9CisKKyAgICBzdGFja09mZnNl
dCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworICAg
IEFyZyByZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOworICAgIHN0YWNrT2Zmc2V0
ICs9IHNsb3RTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FyZyBtYXJzaGFsbENDYWxs
QXJndW1lbnQoCisgICAgdW5zaWduZWQmIGdwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJn
dW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAg
c3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpIHsKKyAgICBjYXNlIEFy
Zzo6R1A6CisgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+
KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKKyAgICBjYXNlIEFyZzo6RlA6
CisgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEZQUkluZm8+KGZwQXJn
dW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQXJnKCk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUm
IGNvZGUsIENDYWxsVmFsdWUqIHZhbHVlKQoreworICAgIFZlY3RvcjxBcmc+IHJlc3VsdDsKKyAg
ICByZXN1bHQuYXBwZW5kKFRtcChDQ2FsbFNwZWNpYWw6OnNjcmF0Y2hSZWdpc3RlcikpOworICAg
IHVuc2lnbmVkIGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgZnBBcmd1bWVudENv
dW50ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgKKyAgICAgICAgICAgIG1hcnNoYWxsQ0NhbGxBcmd1bWVudChncEFyZ3VtZW50Q291
bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHZhbHVlLT5jaGlsZChpKSkpOworICAg
IH0KKyAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZzZXQpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitUbXAgY0NhbGxSZXN1bHQoVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgcmV0dXJuIFRtcCgpOworICAgIGNhc2UgSW50
MzI6CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgcmV0dXJuIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgY2FzZSBGbG9hdDoKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0
dXJuIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVG1wKCk7Cit9CisKK0luc3QgYnVpbGRD
Q2FsbChDb2RlJiBjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8QXJnPiYgYXJndW1l
bnRzKQoreworICAgIEluc3QgaW5zdChQYXRjaCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwoY29kZS5j
Q2FsbFNwZWNpYWwoKSkpOworICAgIGluc3QuYXJncy5hcHBlbmQoYXJndW1lbnRzWzBdKTsKKyAg
ICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIGlu
c3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAgIGluc3Qu
YXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJn
ID0gYXJndW1lbnRzW2ldOworICAgICAgICBpZiAoYXJnLmlzVG1wKCkpCisgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAgfQorICAgIHJldHVybiBpbnN0OworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorI2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25f
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUg
IkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOwor
CituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUND
YWxsaW5nQ29udmVudGlvbihDb2RlJiwgQ0NhbGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQo
VHlwZSk7CisKK0luc3QgYnVpbGRDQ2FsbChDb2RlJiwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVj
dG9yPEFyZz4mKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTQ4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NSwxMiArNTUsMTMgQEAgcHVibGljOgogCiAgICAgUHJvY2VkdXJlJiBwcm9jKCkgeyBy
ZXR1cm4gbV9wcm9jOyB9CiAKLSAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5ID0gMSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91
YmxlIGZyZXF1ZW5jeSA9IDEpOwogCiAgICAgLy8gTm90ZSB0aGF0IHlvdSBjYW4gcmVseSBvbiBz
dGFjayBzbG90cyBhbHdheXMgZ2V0dGluZyBpbmRpY2VzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRo
ZSBpbmRleAogICAgIC8vIG9mIGFueSBwcmlvciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3Rh
Y2sgc2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUgZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAg
IC8vIHRoYXQgaXMgPj0gc3RhY2tTbG90cygpLnNpemUoKS4KLSAgICBTdGFja1Nsb3QqIGFkZFN0
YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUq
ID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Ns
b3QoCisgICAgICAgIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RW
YWx1ZSogPSBudWxscHRyKTsKICAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdChTdGFja1Nsb3RW
YWx1ZSopOwogCiAgICAgU3BlY2lhbCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lh
bD4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQ3VzdG9tLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlk
Rm9ybShJbnN0JiBpbnN0KQoreworICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4t
PmFzPENDYWxsVmFsdWU+KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgIT0gMSArICh2YWx1ZS0+dHlwZSgpID09IFZv
aWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBjYW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRt
cHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAg
ICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFhcmcuaXNTdGFja01lbW9yeSgpICYmICFhcmcuaXNT
b21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gMTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fu
bm90IGJlIGFuIGltbWVkaWF0ZS4KKyAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7Cisg
ICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghaW5zdC5hcmdzWzFdLmNhblJlcHJlc2VudCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5udW1DaGlsZHJlbigpOyBpLS07KSB7CisgICAgICAg
IFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgQXJnIGFyZyA9IGluc3Qu
YXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgaWYgKCFhcmcuY2FuUmVwcmVzZW50KGNoaWxkKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBD
Q2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6
IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3QsICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworYm9vbCBT
aHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFy
Z3Muc2l6ZSgpICUgMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQSBkZXN0aW5h
dGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4gVGhpcyByZXF1aXJlbWVudCBhbGxvd3MgdXMgdG8g
YXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvcgorICAgIC8vIG9mIGhhdmluZyBhIGRlc3RpbmF0
aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0IG11bHRpcGxlIGlucHV0cyBzaW11bHRhbmVvdXNs
eS4gSXQgYWxzbworICAgIC8vIGltcG9zZXMgc29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cyBv
biB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZsZS4gSWYgd2UgdHJlYXQgYSBzaHVmZmxlIHBhaXIK
KyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUgQXJncyBhcyBub2RlcywgdGhlbiB0aGUgc2luZ2xl
LWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gc2h1ZmZsZSBn
cmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMgb2Ygc3ViZ3JhcGhzOgorICAgIC8vCisgICAgLy8g
LSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0aGVzZSBzaGlmdHMuIFRoZXkgY2FuIGJlIGV4ZWN1
dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQorICAgIC8vICAgaW5zdHJ1Y3Rpb25zIGFuZCBkb24n
dCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgLy8KKyAgICAvLyAtIENs
b3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29uc2lzdCBvZiBub2RlcyB0aGF0IGhhdmUgb25lIHN1
Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29yLCBzbworICAgIC8vICAgdGhlcmUgaXMgbm8gd2F5
IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJvbSBvdXRzaWRlIG9mIGl0LiBUaGVzZSBjYW4gYmUg
ZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAgICAvLyAgIG9yIGJ5IHNhdmluZyBvbmUgb2YgdGhlIEFy
Z3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCBleGVjdXRpbmcgaXQgYXMgYSBzaGlmdC4KKyAg
ICBIYXNoU2V0PEFyZz4gZHN0czsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsKKyAg
ICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAzOworCisgICAgICAgIGlmIChtb2RlID09IDIpIHsK
KyAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdpZHRoLgorICAgICAgICAgICAgaWYgKCFhcmcuaXNX
aWR0aEFyZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4gaW1t
ZWRpYXRlLgorICAgICAgICBpZiAoIW1vZGUpIHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNTb21l
SW1tKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghYXJn
LmlzQ29tcGF0aWJsZVR5cGUoaW5zdC5hcmdzW2kgKyAxXSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1vZGUgPT0g
MSk7CisgICAgICAgICAgICBpZiAoIWRzdHMuYWRkKGFyZykuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJnLmlzVG1w
KCkgfHwgYXJnLmlzTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gTm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgbWF5
IGFwcGVhciBpbiBhbnkgYWRkcmVzcyBleHByZXNzaW9ucy4gVGhlIGxvd2VyaW5nIGNhbid0IGhh
bmRsZSBpdAorICAgIC8vIGFuZCBpdCdzIG5vdCB1c2VmdWwgZm9yIHRoZSB3YXkgd2UgZW5kIHVw
IHVzaW5nIFNodWZmbGVzLiBOb3JtYWxseSwgU2h1ZmZsZXMgb25seSB1c2VkIGZvcgorICAgIC8v
IHN0YWNrIGFkZHJlc3NlcyBhbmQgbm9uLXN0YWNrIHJlZ2lzdGVycy4KKyAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJnLmlzTWVtb3J5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgIGFyZy5mb3JF
YWNoVG1wRmFzdCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAg
IGlmIChkc3RzLmNvbnRhaW5zKHRtcCkpCisgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1w
IFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIHNodWZmbGU6
ICIsIGluc3QsICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJl
dHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJJbnN0LmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgewogCkBAIC01MSw2ICs1Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UKIC8vIHlvdSBuZWVkIHRvIGNhcnJ5IGV4dHJhIHN0YXRlIGFy
b3VuZCB3aXRoIHRoZSBpbnN0cnVjdGlvbi4gQWxzbywgU3BlY2lhbHMgbWVhbiB0aGF0IHlvdQog
Ly8gYWx3YXlzIGhhdmUgYWNjZXNzIHRvIENvZGUmIGV2ZW4gaW4gbWV0aG9kcyB0aGF0IGRvbid0
IHRha2UgYSBHZW5lcmF0aW9uQ29udGV4dC4KIAorLy8gRGVmaW5pdGlvbiBvZiBQYXRjaCBpbnN0
cnVjdGlvbi4gUGF0Y2ggaXMgdXNlZCB0byBkZWxlZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGlu
c3RydWN0aW9uIHRvIHRoZQorLy8gU3BlY2lhbCBvYmplY3QsIHdoaWNoIHdpbGwgYmUgdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIHRoZSBpbnN0cnVjdGlvbi4KIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJn
KEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC05Niw2ICs5OSwxMTMgQEAg
c3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB9CiB9OwogCisvLyBEZWZpbml0aW9uIG9mIENDYWxs
IGluc3RydWN0aW9uLiBDQ2FsbCBpcyB1c2VkIGZvciBob3QgcGF0aCBDIGZ1bmN0aW9uIGNhbGxz
LiBJdCdzIGxvd2VyZWQgdG8gYQorLy8gUGF0Y2ggd2l0aCBhbiBBaXIgQ0NhbGxTcGVjaWFsIGFs
b25nIHdpdGggY29kZSB0byBtYXJzaGFsIGluc3RydWN0aW9ucy4gVGhlIGxvd2VyaW5nIGhhcHBl
bnMKKy8vIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBzbyB0aGF0IHRoZSByZWdpc3RlciBh
bGxvY2F0b3Igc2VlcyB0aGUgY2xvYmJlcnMuCitzdHJ1Y3QgQ0NhbGxDdXN0b20geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAg
ICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpw
b2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLT50
eXBlKCkgIT0gVm9pZCkgeworICAgICAgICAgICAgZnVuY3RvcigKKyAgICAgICAgICAgICAgICBp
bnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAorICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZv
ckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIGNo
aWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwKKyAgICAgICAgICAgICAgICBB
cmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3
aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZv
cm1TdGF0aWMoQXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKworICAgIHN0YXRpYyBi
b29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3Rz
KEluc3QmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gVGhp
cyBqdXN0IGNyYXNoZXMsIHNpbmNlIHdlIGV4cGVjdCBDIGNhbGxzIHRvIGJlIGxvd2VyZWQgYmVm
b3JlIGdlbmVyYXRpb24uCisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJ
bnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKK3N0cnVjdCBD
b2xkQ0NhbGxDdXN0b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgbGlrZSBhIGNhbGws
IGJ1dCB1c2VzIGJlY29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1c3RvbTo6Zm9yRWFjaEFyZygK
KyAgICAgICAgICAgIGluc3QsCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBmdW5jdG9yKGFyZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUsIHdpZHRoKTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlQ3VzdG9tIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5z
dCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxpbWl0
ID0gaW5zdC5hcmdzLnNpemUoKSAvIDMgKiAzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGltaXQ7IGkgKz0gMykgeworICAgICAgICAgICAgQXJnJiBzcmMgPSBpbnN0LmFyZ3Nb
aSArIDBdOworICAgICAgICAgICAgQXJnJiBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAg
ICAgICAgQXJnJiB3aWR0aEFyZyA9IGluc3QuYXJnc1tpICsgMl07CisgICAgICAgICAgICBBcmc6
OldpZHRoIHdpZHRoID0gd2lkdGhBcmcud2lkdGgoKTsKKyAgICAgICAgICAgIEFyZzo6VHlwZSB0
eXBlID0gc3JjLmlzR1AoKSAmJiBkc3QuaXNHUCgpID8gQXJnOjpHUCA6IEFyZzo6RlA7CisgICAg
ICAgICAgICBmdW5jdG9yKHNyYywgQXJnOjpVc2UsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAg
IGZ1bmN0b3IoZHN0LCBBcmc6OkRlZiwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVuY3Rv
cih3aWR0aEFyZywgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6V2lkdGg4KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOwor
ICAgIAorICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXggJSAzKSB7CisgICAgICAgIGNhc2UgMDoKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKwog
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5
LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0
eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChSZWcgcmVnIDogcmVnc0lu
UHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgIGlm
IChmdW5jdG9yKHRtcCkpCisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKyAgICByZXR1
cm4gVG1wKCk7Cit9CisKK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBlLCBj
b25zdCBBcmcmIGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgeworICAgIHJldHVybiBmaW5kUG9zc2li
bGVTY3JhdGNoKAorICAgICAgICB0eXBlLAorICAgICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuICFhcmcxLnVzZXNUbXAodG1wKSAmJiAhYXJnMi51c2VzVG1w
KHRtcCk7CisgICAgICAgIH0pOworfQorCisvLyBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEsIGEg
PT4gYywgYiA9PiBkKQorc3RydWN0IFJvdGF0ZSB7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBs
b29wOyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhpcyBpcyB0aGUgbG9vcDogKGEgPT4gYiwgYiA9PiBh
KQorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnJpbmdlOyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhl
c2UgYXJlIHRoZSBhc3NvY2lhdGVkIHNoaWZ0czogKGEgPT4gYywgYiA9PiBkKQorfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+
IiwgZHN0KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNo
dWZmbGVQYWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBl
IHR5cGUsIFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhh
dCB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYg
cGFpciA6IHBhaXJzKSB7CisgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzVHlwZSh0eXBlKSk7
CisgICAgICAgIEFTU0VSVChwYWlyLmRzdCgpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VS
VChwYWlyLmRzdCgpLmlzVG1wKCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKTsKKyAgICB9CisK
KyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3
ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9
PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSBy
ZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+
bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0aGVzZSBhcworICAgIC8v
ICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNh
biBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9uZWQKKyAgICAvLyAgIG11bHRpcGxlIHRp
bWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIgPT4gZCwgYiA9PiBlKS4KKyAgICAvLwor
ICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVt
aXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1h
eSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCBy
ZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGll
ciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBh
cyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhh
cyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgYSByb3RhdGUgY2FuIGhhdmUgImZyaW5nZSIuIEZvciBleGFtcGxlLCB3ZSBtaWdo
dCBoYXZlIChhID0+IGIsIGIgPT4gYSwgYSA9PmMsCisgICAgLy8gYiA9PiBkKS4gVGhpcyBoYXMg
YSByb3RhdGUgbG9vcCAoYSA9PiBiLCBiID0+IGEpIGFuZCBzb21lIGZyaW5nZSAoYSA9PiBjLCBi
ID0+IGQpLiBXZSB0cmVhdAorICAgIC8vIHRoZSB3aG9sZSB0aGluZyBhcyBhIHNpbmdsZSByb3Rh
dGUuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIGZpbmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBv
cGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVtIGluIGFueSBvcmRlci4KKworICAgIC8vIFdl
IGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2Fy
ZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRoZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNl
LgorICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAv
LyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMgb3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJl
IGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3IgYSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdl
IHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCksIGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFsw
XS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNh
bid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24ndCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdz
IGhhcHBlbi4KKyAgICAvLyBCdXQsIHByaW9yIHRvIGV4ZWN1dGluZyBhbGwgb2YgdGhhdCwgd2Ug
bmVlZCB0byBleGVjdXRlIHRoZSBmcmluZ2U6IHRoZSBzaGlmdHMgY29tbWluZyBvZmYgdGhlCisg
ICAgLy8gcm90YXRlLgorICAgIFZlY3RvcjxSb3RhdGU+IHJvdGF0ZXM7CisKKyAgICB7CisgICAg
ICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBtYXBwaW5nOworICAgICAgICBm
b3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpCisgICAgICAgICAgICBtYXBwaW5n
LmFkZChwYWlyLnNyYygpLCBWZWN0b3I8U2h1ZmZsZVBhaXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQocGFpcik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7
CisKKyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRQYWlycy5pc0VtcHR5KCkpOworICAgICAgICAgICAgQXJnIG9yaWdpbmFsU3Jj
ID0gbWFwcGluZy5iZWdpbigpLT5rZXk7CisgICAgICAgICAgICBBU1NFUlQoIXNoaWZ0cy5jb250
YWlucyhvcmlnaW5hbFNyYykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHcmFwaE5vZGVX
b3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAgICAgICAgICAgd29ya2xpc3QucHVzaChvcmlnaW5h
bFNyYyk7CisgICAgICAgICAgICB3aGlsZSAoQXJnIHNyYyA9IHdvcmtsaXN0LnBvcCgpKSB7Cisg
ICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+OjppdGVyYXRv
ciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
bWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXaXRoIGEgc2hpZnQgaXQn
cyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkgYnVpbHQgdGhlIHRhaWwgb2YgdGhpcyBzaGlm
dC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoYXQncyB0aGUgY2FzZSBub3cuCisg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmRWZWN0b3Ioc2hpZnRzLnRha2Uo
c3JjKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzID0gV1RGTW92ZShpdGVy
LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisKKyAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHBhaXIuc3JjKCkgPT0gc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgd29y
a2xpc3QucHVzaChwYWlyLmRzdCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuc2l6ZSgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50UGFpcnNbMF0uc3JjKCkgPT0gb3JpZ2luYWxTcmMpOworCisgICAgICAg
ICAgICBib29sIGlzUm90YXRlID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZm
bGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIu
ZHN0KCkgPT0gb3JpZ2luYWxTcmMpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNSb3RhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc1JvdGF0ZSkgeworICAgICAgICAgICAgICAg
IFJvdGF0ZSByb3RhdGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhl
IGNvbW1vbiBjYXNlIGlzIHRoYXQgdGhlIHJvdGF0ZSBkb2VzIG5vdCBoYXZlIGZyaW5nZS4gV2hl
biB0aGlzIGhhcHBlbnMsIHRoZQorICAgICAgICAgICAgICAgIC8vIGxhc3QgZGVzdGluYXRpb24g
aXMgdGhlIGZpcnN0IHNvdXJjZS4KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxh
c3QoKS5kc3QoKSA9PSBvcmlnaW5hbFNyYykKKyAgICAgICAgICAgICAgICAgICAgcm90YXRlLmxv
b3AgPSBXVEZNb3ZlKGN1cnJlbnRQYWlycyk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNsb3cgcGF0aC4gVGhlIHJvdGF0ZSBoYXMg
ZnJpbmdlLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSGFzaE1h
cDxBcmcsIFNodWZmbGVQYWlyPiBkc3RNYXBwaW5nOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZHN0TWFwcGluZy5hZGQocGFpci5kc3QoKSwgcGFpcik7CisKKyAgICAgICAgICAg
ICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpciA9IGRzdE1hcHBpbmcudGFrZShvcmlnaW5hbFNyYyk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJvdGF0ZS5sb29wLmFwcGVuZChwYWlyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gZHN0TWFwcGluZy5maW5kKHBhaXIuc3JjKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZHN0TWFwcGluZy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBpdGVyLT52YWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1hcHBpbmcucmVtb3ZlKGl0ZXIpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm90YXRlLmxvb3AucmV2
ZXJzZSgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmcmlu
Z2UgYXBwZWFycyBpbiB0aGUgc2FtZSBvcmRlciBhcyBob3cgaXQgYXBwZWFyZWQgaW4gdGhlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRQYWlycywgc2luY2UgdGhhdCdzIHRoZSBERlMg
b3JkZXIuCisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIg
OiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBvZiBjb3Vy
c2Ugd2Ugb25seSBpbmNsdWRlIGl0IGlmIGl0J3Mgbm90IGluIHRoZSBsb29wLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGRzdE1hcHBpbmcuY29udGFpbnMocGFpci5kc3QoKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlLmZyaW5nZS5hcHBlbmQocGFpcik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdyYXBoIHNlYXJjaCB0ZXJtaW5hdGVzIGJlY2F1c2Ug
d2UgcmV0dXJuZWQgdG8gdGhlIGZpcnN0IHNvdXJjZSwgdGhlbiB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBwYWlyIGxpc3QgaGFzIHRvIGhhdmUgYSB2ZXJ5IHBhcnRpY3VsYXIgc2hhcGUuCisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpIC0gMTsgaS0t
OykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZS5sb29wW2ldLmRzdCgpID09IHJv
dGF0ZS5sb29wW2kgKyAxXS5zcmMoKSk7CisgICAgICAgICAgICAgICAgcm90YXRlcy5hcHBlbmQo
V1RGTW92ZShyb3RhdGUpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNo
aWZ0cy5hZGQob3JpZ2luYWxTcmMsIFdURk1vdmUoY3VycmVudFBhaXJzKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSwgd2UgbmVlZCB0d28gc2NyYXRjaCBy
ZWdpc3RlcnMuIFRoZSB3YXkgd2UgZG8gdGhpcyBpcyB0aGF0IHRoZSBjbGllbnQgcGFzc2VzCisg
ICAgLy8gdXMgd2hhdCBzY3JhdGNoIHJlZ2lzdGVycyBoZSBoYXBwZW5zIHRvIGhhdmUgbGF5aW5n
IGFyb3VuZC4gV2Ugd2lsbCBuZWVkIHNjcmF0Y2ggcmVnaXN0ZXJzIGluCisgICAgLy8gdGhlIGZv
bGxvd2luZyBjYXNlczoKKyAgICAvLworICAgIC8vIC0gU2h1ZmZsZSBwYWlycyB3aGVyZSBib3Ro
IHNyYyBhbmQgZHN0IHJlZmVyIHRvIG1lbW9yeS4KKyAgICAvLyAtIFJvdGF0ZSB3aGVuIG5vIFN3
YXAgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLgorICAgIC8vCisgICAgLy8gTHVja3kgZm9yIHVz
LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGV4dHJhIHNjcmF0Y2ggcmVnaXN0ZXJzIGFueXRp
bWUgd2UgaGF2ZSBhIFNoaWZ0IHRoYXQKKyAgICAvLyBlbmRzIHdpdGggYSByZWdpc3Rlci4gV2Ug
c2VhcmNoIGZvciBzdWNoIGEgcmVnaXN0ZXIgcmlnaHQgbm93LgorCisgICAgYXV0byBtb3ZlRm9y
V2lkdGggPSBbJl0gKEFyZzo6V2lkdGggd2lkdGgpIC0+IE9wY29kZSB7CisgICAgICAgIHN3aXRj
aCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICByZXR1
cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0OworICAgICAgICBjYXNlIEFy
Zzo6V2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDog
TW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3Bjb2RlIGNvbnNlcnZh
dGl2ZU1vdmUgPSBtb3ZlRm9yV2lkdGgoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSk7CisK
KyAgICAvLyBXZSB3aWxsIGVtaXQgdGhpbmdzIGluIHJldmVyc2UuIFdlIG1haW50YWluIGEgbGlz
dCBvZiBwYWNrcyBvZiBpbnN0cnVjdGlvbnMsIGFuZCB0aGVuIHdlIGVtaXQKKyAgICAvLyBhcHBl
bmQgdGhlbSB0b2dldGhlciBpbiByZXZlcnNlIChmb3IgZXhhbXBsZSB0aGUgdGhpbmcgYXQgdGhl
IGVuZCBvZiByZXN1bHRQYWNrcyBpcyBwbGFjZWQKKyAgICAvLyBmaXJzdCkuIFRoaXMgaXMgdXNl
ZnVsIGJlY2F1c2UgdGhlIGxhc3QgdGhpbmcgd2UgZW1pdCBmcmVlcyB1cCBpdHMgZGVzdGluYXRp
b24gcmVnaXN0ZXJzLCBzbworICAgIC8vIGl0IGFmZmVjdHMgaG93IHdlIGVtaXQgdGhpbmdzIGJl
Zm9yZSBpdC4KKyAgICBWZWN0b3I8VmVjdG9yPEluc3Q+PiByZXN1bHRQYWNrczsKKyAgICBWZWN0
b3I8SW5zdD4gcmVzdWx0OworCisgICAgYXV0byBjb21taXRSZXN1bHQgPSBbJl0gKCkgeworICAg
ICAgICByZXN1bHRQYWNrcy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9OworCisgICAg
YXV0byBnZXRTY3JhdGNoID0gWyZdICh1bnNpZ25lZCBpbmRleCwgVG1wIHBvc3NpYmxlU2NyYXRj
aCkgLT4gVG1wIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hlc1tpbmRleF0uaXNUbXAoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzY3JhdGNoZXNbaW5kZXhdLnRtcCgpOworCisgICAgICAgIGlmICghcG9z
c2libGVTY3JhdGNoKQorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOworICAgICAgICByZXN1bHQu
YXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBwb3NzaWJsZVNjcmF0Y2gsIHNj
cmF0Y2hlc1tpbmRleF0pKTsKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxlU2NyYXRjaDsKKyAgICB9
OworCisgICAgYXV0byByZXR1cm5TY3JhdGNoID0gWyZdICh1bnNpZ25lZCBpbmRleCwgVG1wIHRt
cCkgeworICAgICAgICBpZiAoQXJnKHRtcCkgIT0gc2NyYXRjaGVzW2luZGV4XSkKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHNjcmF0Y2hl
c1tpbmRleF0sIHRtcCkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRsZVNoaWZ0UGFpciA9IFsm
XSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIsIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCkgeworICAg
ICAgICBPcGNvZGUgbW92ZSA9IG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgcGFpci5k
c3QoKS5raW5kKCkpKSB7CisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9CisgICAgICAgICAgICAg
ICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZpbmRQb3NzaWJsZVNjcmF0Y2godHlwZSwgcGFp
ci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRj
aCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCks
IEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldp
ZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgcGFpci5zcmMoKSwgc2NyYXRjaCkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNTb21lSW1t
KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtb3ZlID09IE1vdmUzMik7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUsIG9yaWdpbiwgQXJnOjppbW02NChwYWlyLnNy
YygpLnZhbHVlKCkpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgc2NyYXRj
aCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuU2NyYXRjaChzY3JhdGNoSW5kZXgs
IHNjcmF0Y2gpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZSwgb3JpZ2luLCBwYWlyLnNyYygpLCBwYWlyLmRz
dCgpKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnQgPSBbJl0gKFZlY3RvcjxTaHVm
ZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNoaWZ0LnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihzaGlmdFtpXSwgMCk7CisKKyAg
ICAgICAgQXJnIGxhc3REc3QgPSBzaGlmdC5sYXN0KCkuZHN0KCk7CisgICAgICAgIGlmIChsYXN0
RHN0LmlzVG1wKCkpIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBzY3JhdGNoIDogc2NyYXRjaGVz
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0gbGFzdERzdCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFzY3JhdGNoLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Ny
YXRjaCA9IGxhc3REc3Q7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBGaXJzdCBo
YW5kbGUgc2hpZnRzIHdob3NlIGxhc3QgZGVzdGluYXRpb24gaXMgYSB0bXAgYmVjYXVzZSB0aGVz
ZSBmcmVlIHVwIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIC8vIFRoZXNlIGVuZCB1cCBsYXN0IGlu
IHRoZSBmaW5hbCBzZXF1ZW5jZSwgc28gdGhlIGZpbmFsIGRlc3RpbmF0aW9uIG9mIHRoZXNlIHNo
aWZ0cyB3aWxsIGJlCisgICAgLy8gYXZhaWxhYmxlIGFzIGEgc2NyYXRjaCBsb2NhdGlvbiBmb3Ig
YW55dGhpbmcgZW1pdHRlZCBwcmlvciAoc28sIGFmdGVyLCBzaW5jZSB3ZSdyZSBlbWl0dGluZyBp
bgorICAgIC8vIHJldmVyc2UpLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAg
ICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAg
aWYgKHNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1RtcCgpKQorICAgICAgICAgICAgaGFuZGxlU2hpZnQo
c2hpZnQpOworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgaGFu
ZGxlIHRoZSByZXN0IG9mIHRoZSBzaGlmdHMuCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0
cykgeworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZhbHVlOwor
ICAgICAgICBpZiAoIXNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1RtcCgpKQorICAgICAgICAgICAgaGFu
ZGxlU2hpZnQoc2hpZnQpOworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBm
b3IgKFJvdGF0ZSYgcm90YXRlIDogcm90YXRlcykgeworICAgICAgICBpZiAoIXJvdGF0ZS5mcmlu
Z2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gdGhlIGZyaW5n
ZSBmaXJzdCEgVGhpcyB3b24ndCBjbG9iYmVyIGFueSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJl
CisgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSByb3RhdGlvbi4KKyAgICAgICAgICAgIGhhbmRs
ZVNoaWZ0KHJvdGF0ZS5mcmluZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3YXAgPSBPb3BzOworICAgICAgICBB
cmc6OldpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQorICAgICAg
ICAKKyAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCkgeworICAgICAgICAgICAgc3dhcCA9IFN3
YXAzMjsKKyAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGgzMjsKKyAgICAgICAgICAg
IGJvb2wgaGFzTWVtb3J5ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGhhc0luZGV4ID0gZmFs
c2U7CisgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlLmxvb3ApIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXIud2lkdGgoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgc3dhcCA9IFN3
YXA2NDsKKyAgICAgICAgICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0OworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoYXNN
ZW1vcnkgfD0gcGFpci5zcmMoKS5pc01lbW9yeSgpIHx8IHBhaXIuZHN0KCkuaXNNZW1vcnkoKTsK
KyAgICAgICAgICAgICAgICBoYXNJbmRleCB8PSBwYWlyLnNyYygpLmlzSW5kZXgoKSB8fCBwYWly
LmRzdCgpLmlzSW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FuU3dhcCA9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OlRtcCk7CisKKyAg
ICAgICAgICAgIGlmIChoYXNNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICBjYW5Td2FwICY9IGlz
VmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OkFkZHIpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHRha2UgdGhlIHN3YXBwaW5nIHBhdGggaWYgdGhl
cmUgaXMgYSBtaXggb2Ygd2lkdGhzIGFuZCBzb21lIG9mIHRoZQorICAgICAgICAgICAgICAgIC8v
IHNodWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdldHMgdG9vIGNvbmZ1c2luZy4gV2UgbWln
aHQgYmUgYWJsZSB0byByZWxheCB0aGlzCisgICAgICAgICAgICAgICAgLy8gdG8gb25seSBiYWls
IGlmIHRoZXJlIGFyZSBzdWJ3aWR0aCBwYWlycywgYnV0IEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0
IGl0IHZlcnkKKyAgICAgICAgICAgICAgICAvLyBoYXJkLgorICAgICAgICAgICAgICAgIGZvciAo
U2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUubG9vcCkKKyAgICAgICAgICAgICAgICAgICAgY2Fu
U3dhcCAmPSBwYWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaGFzSW5kZXgpCisgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBpc1ZhbGlk
Rm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2FuU3dhcCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Au
c2l6ZSgpIC0gMTsgaS0tOykgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0ID0gcm90YXRlLmxv
b3BbaV0uc3JjKCk7CisgICAgICAgICAgICAgICAgQXJnIHJpZ2h0ID0gcm90YXRlLmxvb3BbaSAr
IDFdLnNyYygpOworCisgICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdo
dC5pc01lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlz
IGEgc3VwZXIgcmFyZSBvdXRjb21lLiBSb3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUu
CisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBp
cyByYXJlLiBUbyBnZXQgaGVyZSBhIGxvdCBvZiByYXJlIHN0dWZmIGhhcyB0bworICAgICAgICAg
ICAgICAgICAgICAvLyBhbGwgaGFwcGVuIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3Np
YmxlU2NyYXRjaCh0eXBlLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KG1vdmVGb3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRj
aCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVG
b3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIHNjcmF0Y2gsIGxlZnQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlZnQu
aXNNZW1vcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dh
cCwgb3JpZ2luLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAgIGlm
IChwYWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6
OldpZHRoMzIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBB
cmc6OldpZHRoNjQpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCku
aXNUbXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8g
ZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9y
aWdpbiwgcGFpci5kc3QoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgY2FuIHRyZWF0IHRoaXMgYXMgYSBzaGlmdCBzbyBs
b25nIGFzIHdlIHRha2UgdGhlIGxhc3QgZGVzdGluYXRpb24gKGkuZS4gZmlyc3QKKyAgICAgICAg
ICAgIC8vIHNvdXJjZSkgYW5kIHNhdmUgaXQgZmlyc3QuIFRoZW4gd2UgaGFuZGxlIHRoZSBmaXJz
dCBlbnRyeSBpbiB0aGUgcGFpciBpbiB0aGUgcm90YXRlCisgICAgICAgICAgICAvLyBzcGVjaWFs
bHksIGFmdGVyIHdlIHJlc3RvcmUgdGhlIGxhc3QgZGVzdGluYXRpb24uIFRoaXMgcmVxdWlyZXMg
c29tZSBzcGVjaWFsIGNhcmUgdG8KKyAgICAgICAgICAgIC8vIGZpbmQgYSBzY3JhdGNoIHJlZ2lz
dGVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHJvdGF0ZSB0aGF0IHVzZXMgdGhlIGVu
dGlyZQorICAgICAgICAgICAgLy8gYXZhaWxhYmxlIHJlZ2lzdGVyIGZpbGUuCisKKyAgICAgICAg
ICAgIFRtcCBzY3JhdGNoID0gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgICAgICAgICB0
eXBlLAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFpci5zcmMoKS51c2VzVG1wKHRtcCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhaXIuZHN0KCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gTk9U
RTogVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgdXNlIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAg
ICAgICAgICAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgc2NyYXRjaCk7CisKKyAgICAgICAgICAg
IC8vIFdlIG1heSBub3QgaGF2ZSBmb3VuZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdoZW4gdGhpcyBo
YXBwZW5zLCB3ZSBjYW4ganVzdCB1c2UgdGhlIHNwaWxsCisgICAgICAgICAgICAvLyBzbG90IGRp
cmVjdGx5LgorICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0
Y2gpIDogc2NyYXRjaGVzWzBdOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTaGlm
dFBhaXIoCisgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIocm90YXRlLmxvb3AubGFzdCgpLmRz
dCgpLCByb3RhdGVTYXZlLCByb3RhdGUubG9vcFswXS53aWR0aCgpKSwgMSk7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKTsgaS0tID4gMTspCisgICAg
ICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZS5sb29wW2ldLCAxKTsKKworICAgICAg
ICAgICAgaGFuZGxlU2hpZnRQYWlyKAorICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyKHJvdGF0
ZVNhdmUsIHJvdGF0ZS5sb29wWzBdLmRzdCgpLCByb3RhdGUubG9vcFswXS53aWR0aCgpKSwgMSk7
CisKKyAgICAgICAgICAgIGlmIChzY3JhdGNoKQorICAgICAgICAgICAgICAgIHJldHVyblNjcmF0
Y2goMCwgc2NyYXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSByZXN1bHRQYWNrcy5zaXplKCk7IGktLTspCisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0
b3IocmVzdWx0UGFja3NbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPElu
c3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzLAor
ICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5
PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3JpZ2luKQoreworICAgIFZlY3RvcjxT
aHVmZmxlUGFpcj4gZ3BQYWlyczsKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZwUGFpcnM7Cisg
ICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIGlmIChw
YWlyLnNyYygpLmlzTWVtb3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgpICYmIHBhaXIud2lk
dGgoKSA+IEFyZzo6cG9pbnRlcldpZHRoKCkpIHsKKyAgICAgICAgICAgIC8vIDgtYnl0ZSBtZW1v
cnktdG8tbWVtb3J5IG1vdmVzIG9uIGEgMzItYml0IHBsYXRmb3JtIGFyZSBiZXN0IGhhbmRsZWQg
YXMgZmxvYXQgbW92ZXMuCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChwYWlyLnNyYygpLmlzR1AoKSAmJiBwYWlyLmRzdCgpLmlzR1AoKSkgewor
ICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBtZW1vcnktdG8tbWVt
b3J5IHNodWZmbGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCisgICAgICAgICAgICAvLyBj
YW4gZG8gdGhhdCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2VwdCBpbiB0aGUgc3Bl
Y2lhbCBjYXNlIGFib3ZlLgorICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQocGFpcik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgfQorCisg
ICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVm
ZmxlKGdwUGFpcnMsIGdwU2NyYXRjaCwgQXJnOjpHUCwgb3JpZ2luKSk7CisgICAgcmVzdWx0LmFw
cGVuZFZlY3RvcihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFyZzo6RlAsIG9yaWdp
bikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJFbWl0U2h1ZmZsZV9oCisjZGVmaW5lIEFpckVtaXRTaHVmZmxl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBTaHVmZmxlUGFpciB7CitwdWJsaWM6CisgICAgU2h1ZmZsZVBhaXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgU2h1ZmZsZVBhaXIoY29uc3QgQXJnJiBzcmMsIGNvbnN0IEFyZyYgZHN0LCBB
cmc6OldpZHRoIHdpZHRoKQorICAgICAgICA6IG1fc3JjKHNyYykKKyAgICAgICAgLCBtX2RzdChk
c3QpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
QXJnJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0IEFyZyYgZHN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kc3Q7IH0KKworICAgIC8vIFRoZSB3aWR0aCBkZXRlcm1pbmVzIHRo
ZSBraW5kIG9mIG1vdmUgd2UgZG8uIFlvdSBjYW4gb25seSBjaG9vc2UgV2lkdGgzMiBvciBXaWR0
aDY0IHJpZ2h0IG5vdy4KKyAgICAvLyBGb3IgR1AsIGl0IHBpY2tzIGJldHdlZW4gTW92ZTMyIGFu
ZCBNb3ZlLiBGb3IgRlAsIGl0IHBpY2tzIGJldHdlZW4gTW92ZUZsb2F0IGFuZCBNb3ZlRG91Ymxl
LgorICAgIEFyZzo6V2lkdGggd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXJn
IG1fc3JjOworICAgIEFyZyBtX2RzdDsKKyAgICBBcmc6OldpZHRoIG1fd2lkdGggeyBBcmc6Oldp
ZHRoOCB9OworfTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgb2YgYSBnaXZlbiB0eXBlLiBUaGUg
c2NyYXRjaCBhcmd1bWVudCBpcyBtYW5kYXRvcnkuIFlvdSBzaG91bGQgcGFzcyBpdCBhcworLy8g
Zm9sbG93czogSWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBvciB0
ZW1wb3JhcmllcyBhdmFpbGFibGUgLSB0aGF0IGlzLCB0aGV5J3JlCisvLyByZWdpc3RlcnMgdGhh
dCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGUgc2h1ZmZsZSwgaGF2ZSB0aGUgc2FtZSB0eXBlIGFz
IHRoZSBzaHVmZmxlLCBhbmQgYXJlIG5vdAorLy8gbGl2ZSBhdCB0aGUgc2h1ZmZsZSAtIHRoZW4g
eW91IGNhbiBwYXNzIHRoZW0uIElmIHlvdSBkb24ndCBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIGF2
YWlsYWJsZSBvciBpZgorLy8geW91IGRvbid0IGZlZWwgbGlrZSBsb29raW5nIGZvciB0aGVtLCB5
b3UgY2FuIHBhc3MgbWVtb3J5IGxvY2F0aW9ucy4gSXQncyBhbHdheXMgc2FmZSB0byBwYXNzIGEK
Ky8vIHBhaXIgb2YgbWVtb3J5IGxvY2F0aW9ucywgYW5kIHJlcGxhY2luZyBlaXRoZXIgbWVtb3J5
IGxvY2F0aW9uIHdpdGggYSByZWdpc3RlciBjYW4gYmUgdmlld2VkIGFzIGFuCisvLyBvcHRpbWl6
YXRpb24uIEl0J3MgYSBwcmV0dHkgaW1wb3J0YW50IG9wdGltaXphdGlvbi4gU29tZSBtb3JlIG5v
dGVzOgorLy8KKy8vIC0gV2UgZGVmaW5lIHNjcmF0Y2ggcmVnaXN0ZXJzIGFzIHRoaW5ncyB0aGF0
IGFyZSBub3QgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYW5kIGFyZSBub3Qgb25lIG9mCisvLyAg
IHRoZSBkZXN0aW5hdGlvbnMgb2YgdGhlIHNodWZmbGUuIE5vdCBiZWluZyBsaXZlIGJlZm9yZSB0
aGUgc2h1ZmZsZSBhbHNvIG1lYW5zIHRoYXQgdGhleSBjYW5ub3QKKy8vICAgYmUgdXNlZCBmb3Ig
YW55IG9mIHRoZSBzb3VyY2VzIG9mIHRoZSBzaHVmZmxlLgorLy8KKy8vIC0gQSBzZWNvbmQgc2Ny
YXRjaCBsb2NhdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIHlvdSBoYXZlIHNodWZmbGUgcGFpcnMg
d2hlcmUgbWVtb3J5IGlzIHVzZWQgYm90aAorLy8gICBhcyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
LgorLy8KKy8vIC0gWW91J3JlIGd1YXJhbnRlZWQgbm90IHRvIG5lZWQgYW55IHNjcmF0Y2ggbG9j
YXRpb25zIGlmIHRoZXJlIGlzIGEgU3dhcCBpbnN0cnVjdGlvbiBhdmFpbGFibGUgZm9yCisvLyAg
IHRoZSB0eXBlIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhbnkgbWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFy
ZSBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5hdGlvbiBvZgorLy8gICBzb21lIHBhaXJz
LiBHUCBzdXBwb3J0cyBTd2FwIG9uIHg4NiB3aGlsZSBGUCBuZXZlciBzdXBwb3J0cyBTd2FwLgor
Ly8KKy8vIC0gUGFzc2luZyBtZW1vcnkgbG9jYXRpb25zIGFzIHNjcmF0Y2ggaWYgYXJlIHJ1bm5p
bmcgZW1pdFNodWZmbGUoKSBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcworLy8gICBzaWxs
eSwgc2luY2UgdGhhdCB3aWxsIGNhdXNlIGVtaXRTaHVmZmxlKCkgdG8gcGljayBzb21lIHNwZWNp
ZmljIHJlZ2lzdGVycyB3aGVuIGl0IGRvZXMgbmVlZAorLy8gICBzY3JhdGNoLiBPbmUgZWFzeSB3
YXkgdG8gYXZvaWQgdGhhdCBwcmVkaWNhbWVudCBpcyB0byBlbnN1cmUgdGhhdCB5b3UgY2FsbCBl
bWl0U2h1ZmZsZSgpIGFmdGVyCisvLyAgIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciB0aGlzIHJl
YXNvbiB3ZSBjb3VsZCBhZGQgYSBTaHVmZmxlIGluc3RydWN0aW9uIHNvIHRoYXQgd2UgY2FuIGRl
ZmVyCisvLyAgIHNodWZmbGluZ3MgdW50aWwgYWZ0ZXIgcmVnYWxsb2MuCisvLworLy8gLSBTaHVm
ZmxlcyB3aXRoIG1lbW9yeT0+bWVtb3J5IHBhaXJzIGFyZSBub3QgdmVyeSB3ZWxsIHR1bmVkLiBZ
b3Ugc2hvdWxkIGF2b2lkIHRoZW0gaWYgeW91IHdhbnQKKy8vICAgcGVyZm9ybWFuY2UuIElmIHlv
dSBuZWVkIHRvIGRvIHRoZW0sIHRoZW4gbWFraW5nIHN1cmUgdGhhdCB5b3UgcmVzZXJ2ZSBhIHRl
bXBvcmFyeSBpcyBvbmUgd2F5IHRvCisvLyAgIGdldCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlLgor
VmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4sIHN0ZDo6
YXJyYXk8QXJnLCAyPiBzY3JhdGNoLCBBcmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQ
ZXJmb3JtIGEgc2h1ZmZsZSB0aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mg
c2NyYXRjaCByZWdpc3RlcnMgb3IgbWVtb3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBh
Y2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAor
ICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJn
LCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAg
ICBWYWx1ZSogb3JpZ2luKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVk
ZSAiQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCIKKyNpbmNsdWRlICJBaXJMb3dlckFm
dGVyUmVnQWxsb2MuaCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFp
ck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5j
bHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgpAQCAtNjUsNiArNjcsOCBAQCB2b2lkIHBy
ZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAg
ICAgfQogCisgICAgbG93ZXJNYWNyb3MoY29kZSk7CisKICAgICAvLyBUaGlzIGlzIHdoZXJlIHdl
IHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgogICAgIC8vIEZJWE1F
OiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1NgpAQCAtODAsNiArODQsOCBAQCB2b2lkIHByZXBhcmVGb3JH
ZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgZWxzZQogICAgICAgICBpdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyhjb2RlKTsKIAorICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKwogICAg
IC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBs
aWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbwogICAgIC8vIGRvZXMgdGhpbmdz
IGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0
aGVtLgogICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDEx
ICszOCwxMSBAQCBjbGFzcyBDb2RlOwogCiAvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0
IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhh
ZCBhbnkKIC8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGlu
Z3MuCi12b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYpOwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0
aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQg
dGhpcyBtYXkgY2FsbCBjYWxsYmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlz
IGdlbmVyYXRpbmcuCi12b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOwogCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw2ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CiAKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3Qg
aW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9yIChjb25zdCBJbnN0
JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIGluc3QpOworfQorCit2
b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4m
JiBpbnN0cykKK3sKKyAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAgaW5zZXJ0
SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJl
Z2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksNiArNTksOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5z
ZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKICAgICB9CisKKyAgICB2
b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29uc3QgVmVjdG9yPEluc3Q+Jik7CisgICAg
dm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIFZlY3RvcjxJbnN0PiYmKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDE1IEBA
IHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBv
cmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8fCBhcmdzLnNpemUoKTsgfQogCisgICAgdm9pZCBhcHBl
bmQoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
dm9pZCBhcHBlbmQoQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgIGFwcGVuZChhcmd1bWVudHMuLi4pOworICAg
IH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNv
bnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CiAgICAgLy8g
ZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJv
dW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQogICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0
IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVy
UmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckVtaXRTaHVmZmxl
LmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Zv
aWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2MiKTsKKworICAgIEhhc2hNYXA8SW5zdCos
IFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3Mo
Y29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVn
TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykg
eworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAgIGlmIChp
bnN0Lm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qub3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgaWYg
KHNldC5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICAgICAgICAgIHVzZWRSZWdpc3Rl
cnMuYWRkKCZpbnN0LCBzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBnZXRTY3Jh
dGNoZXMgPSBbJl0gKFJlZ2lzdGVyU2V0IHNldCwgQXJnOjpUeXBlIHR5cGUpIC0+IHN0ZDo6YXJy
YXk8QXJnLCAyPiB7CisgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiByZXN1bHQ7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3Jk
ZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5nZXQocmVnKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXN1bHRbaV0gPSBUbXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0LnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBBcmc6
OnN0YWNrKAorICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSks
CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisK
KyAgICAvLyBOb3cgdHJhbnNmb3JtIHRoZSBjb2RlLgorICAgIEluc2VydGlvblNldCBpbnNlcnRp
b25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0
SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIFNodWZmbGU6IHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBzZXQgPSB1c2Vk
UmVnaXN0ZXJzLmdldCgmaW5zdCk7CisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWly
PiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5h
cmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0
LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgICAgICAgICBBcmcgZHN0ID0gaW5zdC5hcmdzW2kg
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IGluc3QuYXJnc1tp
ICsgMl0ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmZvckVhY2hUbXBGYXN0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0
aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywg
Mj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7CisgICAgICAgICAgICAg
ICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6
RlApOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNj
cmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBD
b2xkQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJl
VXNlZDsKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRl
Q0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBUbXAgcmVz
dWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAg
ICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEg
OiBpKSA6IGkgXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JC
M1R5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChT
aHVmZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNy
Yy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlVXNlZC5zZXQoc3JjLnJlZygp
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywg
Mj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6R1ApOworICAgICAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNl
ZCwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgcmVnc1RvU2F2ZSA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKworICAgICAgICAgICAg
ICAgIC8vIEFsc28gbmVlZCB0byBzYXZlIGFsbCBsaXZlIHJlZ2lzdGVycy4gRG9uJ3QgbmVlZCB0
byB3b3JyeSBhYm91dCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIuCisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2
ZS5jbGVhcihyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzdGFja1Nsb3RzOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
bXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVX
aWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3Rh
Y2tTbG90ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChB
cmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6c3RhY2soc3Rh
Y2tTbG90KSwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdHMuYXBw
ZW5kKHN0YWNrU2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAg
ICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0
Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChj
b2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAgICAgICAgICAgICAgIC8vIE5v
dyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lzdGVycy4KKyAgICAgICAgICAg
ICAgICBwYWlycy5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tTbG90
SW5kZXggPSAwOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAgICAgICAg
ICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAg
dG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0
aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tT
bG90ID0gc3RhY2tTbG90c1tzdGFja1Nsb3RJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihBcmc6OnN0YWNrKHN0YWNrU2xvdCksIGFyZywg
d2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCkgeworICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyKHJlc3VsdCwgaW5z
dC5hcmdzWzFdLCBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
c2V0KHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZ3BT
Y3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6R1ApOworICAgICAgICAgICAg
ICAgIGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkZQKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisg
ICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNj
cmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKworICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGlu
ZygKKyAgICAgICAgICAgIFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICFpbnN0OworICAgICAgICAgICAgfSk7CisgICAgfQorfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJM
b3dlckFmdGVyUmVnQWxsb2NfaAorI2RlZmluZSBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGxvd2VycyBTaHVmZmxlIGFuZCBD
b2xkQ0NhbGwgaW5zdHJ1Y3Rpb25zLiBUaGlzIHBoYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBh
ZnRlciByZWdpc3RlcgorLy8gYWxsb2NhdGlvbi4KKwordm9pZCBsb3dlckFmdGVyUmVnQWxsb2Mo
Q29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jv
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckxvd2VyTWFjcm9zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJNYWNyb3MiKTsKKworICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIFZl
Y3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwg
dmFsdWUpOworCisgICAgICAgICAgICAgICAgSW5zdCBzaHVmZmxlQXJndW1lbnRzKFNodWZmbGUs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+dHlwZSgp
ID09IFZvaWQgPyAwIDogMTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFy
Z3VtZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsgaV0pOworICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRlc3RpbmF0aW9uc1tpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoQXJnOjp3aWR0
aEFyZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KGluc3RJbmRleCwg
V1RGTW92ZShzaHVmZmxlQXJndW1lbnRzKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRpY2F0
ZSB0aGF0IHdlJ3JlIHVzaW5nIG91ciBvcmlnaW5hbCBjYWxsZWUgYXJndW1lbnQuCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25zWzBdID0gaW5zdC5hcmdzWzBdOworCisgICAgICAgICAgICAg
ICAgLy8gU2F2ZSB3aGVyZSB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcHV0IGl0cyByZXN1bHQu
CisgICAgICAgICAgICAgICAgQXJnIHJlc3VsdERzdCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/
IEFyZygpIDogaW5zdC5hcmdzWzFdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlvbnMpOworCisg
ICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50eXBlKCkpOwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBNb3ZlRmxvYXQsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmVEb3Vi
bGUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZTMyLCB2YWx1ZSwgcmVzdWx0LCByZXN1
bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRl
eCArIDEsIE1vdmUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCisjZGVmaW5lIEFpckxvd2VyTWFjcm9zX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQWlyIGhhcyBzb21lIG9wY29kZXMgdGhhdCBh
cmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVhbnQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Yg
bG93LWxldmVsCisvLyBrbm93bGVkZ2UgaW4gdGhlIEIzLT5BaXIgbG93ZXJpbmcuIFRoZSBjdXJy
ZW50IGV4YW1wbGUgaXMgQ0NhbGwuCisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5NDg1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNyw2ICs0MDcsMTQgQEAgTW92ZSBVOkc6UHRyLCBEOkc6UHRyCiAgICAgVG1wLCBJ
bmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlUHRyCiAKK3g4Njog
U3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRtcAorICAgIFRtcCwgQWRkcgorCit4
ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFk
ZHIKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQz
MlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjcyLDcgKzY4MCwxOSBAQCBSZXRE
b3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVybWluYWwKIAorIyBBIFNodWZmbGUgaXMg
YSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9uIG1vdmUuIEl0IHNpbXVsdGFuZW91c2x5
IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KKyMgVGhlIG1vdmVzIGFyZSBzcGVjaWZpZWQg
YXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0aC4gRm9yIGV4YW1wbGUgeW91IGNhbiBy
ZXF1ZXN0IGEgc3dhcCB0aGlzCisjIHdheToKKyMgICAgIFNodWZmbGUgJXRtcDEsICV0bXAyLCA2
NCwgJXRtcDIsICV0bXAxLCA2NAorY3VzdG9tIFNodWZmbGUKKwogIyBBaXIgYWxsb3dzIGZvciBl
eG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5
IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJh
bmQuCiBjdXN0b20gUGF0Y2gKIAorIyBJbnN0cnVjdGlvbnMgdXNlZCBmb3IgbG93ZXJpbmcgQyBj
YWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIgZ2VuZXJhdGlvbi4gVGhleSBnZXQgbG93
ZXJlZCB0bworIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4gVGhlIG9yaWdpbiBWYWx1ZSBtdXN0IGJl
IGEgQ0NhbGxWYWx1ZS4KK2N1c3RvbSBDQ2FsbAorY3VzdG9tIENvbGRDQ2FsbAorCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIGNvbnN0IFZl
Y3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGUKICAgICByZXR1cm4gUmVnaXN0ZXJzSW5Q
cmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKIH0KIAotY29uc3QgVmVjdG9y
PFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKK0pTX0VYUE9SVF9QUklWQVRF
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CiAKIH0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRl
LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclBy
aW9yaXR5LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisj
aW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVk
ZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisv
LyBXZSBkb24ndCBoYXZlIGEgTk9fUkVUVVJOX0RVRV9UT19FWElULCBub3Igc2hvdWxkIHdlLiBU
aGF0J3MgcmlkaWN1bG91cy4KK3N0YXRpYyBib29sIGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJu
SXNTdHVwaWQoKSB7IHJldHVybiB0cnVlOyB9CisKK3N0YXRpYyB2b2lkIHVzYWdlKCkKK3sKKyAg
ICBkYXRhTG9nKCJVc2FnZTogdGVzdGIzIFs8ZmlsdGVyPl1cbiIpOworICAgIGlmIChoaWRkZW5U
cnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKCkpCisgICAgICAgIGV4aXQoMSk7Cit9CisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcjsKKworbmFtZXNwYWNlIHsKKworU3RhdGljTG9jayBjcmFzaExvY2s7CisK
Ky8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBh
c3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoISEoeCkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBjcmFzaExvY2subG9jaygpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBXVEZSZXBvcnRBc3Nl
cnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI3gp
OyBcCisgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK1ZNKiB2bTsKKwor
c3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29tcGlsZShCMzo6UHJvY2VkdXJlJiBw
cm9jKQoreworICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MuY29kZSgpKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworCisgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGlsYXRpb24iKSksIHByb2MucmVsZWFzZUJ5cHJvZHVj
dHMoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
K1QgaW52b2tlKGNvbnN0IEIzOjpDb21waWxhdGlvbiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKK3sKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8
VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVuKEIzOjpQcm9jZWR1cmUm
IHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gaW52b2tl
PFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdFNp
bXBsZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQyKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSA9PSA0Mik7Cit9CisKKy8vIFVzZSB0aGlzIHRvIHB1dCBhIGNvbnN0YW50IGludG8gYSBy
ZWdpc3RlciB3aXRob3V0IEFpciBiZWluZyBhYmxlIHRvIHNlZSB0aGUgY29uc3RhbnQuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCBsb2FkQ29uc3RhbnRJbXBsKEJhc2ljQmxvY2sqIGJsb2Nr
LCBUIHZhbHVlLCBCMzo6QWlyOjpPcGNvZGUgbW92ZSwgVG1wIHRtcCwgVG1wIHNjcmF0Y2gpCit7
CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbG9jazsKKyAgICBzdGF0aWMgc3RkOjptYXA8VCwgVCo+
KiBtYXA7IC8vIEknbSBub3QgbWVzc2luZyB3aXRoIEhhc2hNYXAncyBwcm9ibGVtcyB3aXRoIGlu
dGVnZXJzLgorCisgICAgTG9ja0hvbGRlciBsb2NrZXIobG9jayk7CisgICAgaWYgKCFtYXApCisg
ICAgICAgIG1hcCA9IG5ldyBzdGQ6Om1hcDxULCBUKj4oKTsKKworICAgIGlmICghbWFwLT5jb3Vu
dCh2YWx1ZSkpCisgICAgICAgICgqbWFwKVt2YWx1ZV0gPSBuZXcgVCh2YWx1ZSk7CisKKyAgICBU
KiBwdHIgPSAoKm1hcClbdmFsdWVdOworICAgIGJsb2NrLT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCBzY3JhdGNoKTsKKyAgICBi
bG9jay0+YXBwZW5kKG1vdmUsIG51bGxwdHIsIEFyZzo6YWRkcihzY3JhdGNoKSwgdG1wKTsKK30K
Kwordm9pZCBsb2FkQ29uc3RhbnQoQmFzaWNCbG9jayogYmxvY2ssIGludHB0cl90IHZhbHVlLCBU
bXAgdG1wKQoreworICAgIGxvYWRDb25zdGFudEltcGw8aW50cHRyX3Q+KGJsb2NrLCB2YWx1ZSwg
TW92ZSwgdG1wLCB0bXApOworfQorCit2b2lkIGxvYWREb3VibGVDb25zdGFudChCYXNpY0Jsb2Nr
KiBibG9jaywgZG91YmxlIHZhbHVlLCBUbXAgdG1wLCBUbXAgc2NyYXRjaCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnRJbXBsPGRvdWJsZT4oYmxvY2ssIHZhbHVlLCBNb3ZlRG91YmxlLCB0bXAsIHNjcmF0
Y2gpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNF07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdz
KSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpy
ZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVu
ZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNV07CisgICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJn
OjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJl
dDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNl
dCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMpOworICAgIENIRUNL
KHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVMb25nU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25z
dGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRt
cChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5m
bzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCks
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5m
bzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBB
cmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworICAgIENIRUNLKHRoaW5nc1s2
XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNyk7Cit9CisKK3ZvaWQgdGVzdFNodWZm
bGVMb25nU2hpZnRCYWNrd2FyZHMoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25z
dGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRt
cChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5m
bzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZv
OjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiks
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBB
cmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworICAgIENIRUNLKHRoaW5nc1s2
XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNyk7Cit9CisKK3ZvaWQgdGVzdFNodWZm
bGVTaW1wbGVSb3RhdGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChy
b290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAg
IFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNF07
CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdz
KSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNCk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaW1wbGVCcm9hZGNhc3QoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5m
bzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1Qx
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAg
IGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5h
cHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50
MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNl
LCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAw
LCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFd
ID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10g
PT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
Y29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMzUpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICB1bnNpZ25lZCBjb3VudCA9IDE7CisgICAgZm9yIChSZWcgcmVnIDogcmVncykgeworICAgICAg
ICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAgICAgICAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgY291bnQrKywgVG1wKHJlZykpOworICAgIH0KKyAgICBJbnN0JiBzaHVmZmxlID0g
cm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3Mp
IHsKKyAgICAgICAgaWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVnVDApKQorICAgICAgICAgICAg
c2h1ZmZsZS5hcHBlbmQoVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKHJlZyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5h
ZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RL
aW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSks
IEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOworCisgICAgVmVjdG9yPGlu
dDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3
VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkp
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBmb3IgKGludDMyX3QgdGhp
bmcgOiB0aGluZ3MpCisgICAgICAgIENIRUNLKHRoaW5nID09IDM1KTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVRyZWVTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1
LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpy
ZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5n
c1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6
YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s0XSA9
PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09
IDMpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVRy
ZWVTaGlmdEJhY2t3YXJkKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUs
IFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BS
SW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86OnJl
Z1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOwor
ICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdz
WzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjph
ZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjph
ZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjph
ZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09
IDIpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0g
Myk7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDQpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJl
ZVNoaWZ0T3RoZXJCYWNrd2FyZCgpCit7CisgICAgLy8gTk9URTogVGhpcyB0ZXN0IHdhcyBteSBv
cmlnaW5hbCBhdHRlbXB0IGF0IFRyZWVTaGlmdEJhY2t3YXJkIGJ1dCBtaXN0YWtlcyB3ZXJlIG1h
ZGUuIFNvLCB0aGlzCisgICAgLy8gZW5kcyB1cCBiZWluZyBqdXN0IGEgd2VpcmQgdGVzdC4gQnV0
IHdlaXJkIHRlc3RzIGFyZSB1c2VmdWwsIHNvIEkga2VwdCBpdC4KKyAgICAKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJ
bmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgs
IFRtcChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJl
Z1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNyksIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
KTsKKworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBB
cmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXpl
b2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7
CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDgp
OworICAgIENIRUNLKHRoaW5nc1syXSA9PSA4KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNyk7
CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDcpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA2KTsK
KyAgICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDUpOwor
fQorCit2b2lkIHRlc3RTaHVmZmxlTXVsdGlwbGVTaGlmdHMoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikp
OworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
KTsKKworICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBB
cmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDMpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
NF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDEpOworfQorCit2b2lkIHRlc3RTaHVm
ZmxlUm90YXRlV2l0aEZyaW5nZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFk
ZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290
LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1w
KEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzZd
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRy
KGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5n
c1szXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdz
WzVdID09IDMpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRt
cChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUu
bmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFz
ZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFz
ZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7
CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVD
Syh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNL
KHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMSk7CisgICAgQ0hFQ0so
dGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpy
ZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
NiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVm
ZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBU
bXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhp
bmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJl
dDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNl
dCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVD
Syh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNL
KHRoaW5nc1szXSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hFQ0so
dGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRBbmRSb3RhdGUoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRt
cChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BS
SW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJf
dCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAy
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAg
Q0hFQ0sodGhpbmdzWzNdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBD
SEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdEFsbFJlZ3Mo
KQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2Rl
KCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIo
QXJnOjpHUCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAocmVnc1tpXSkpOworICAgIEluc3QmIHNodWZmbGUg
PSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdz
W2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKwor
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAq
IHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2
Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFj
ayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM1KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IDM1
ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgLSAxKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJv
dGF0ZUFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IHJlZ3NJblBy
aW9yaXR5T3JkZXIoQXJnOjpHUCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQor
ICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAocmVnc1tpXSkpOworICAgIElu
c3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0cik7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBw
ZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpKTsKKyAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVncy5sYXN0KCkpLCBUbXAocmVnc1sw
XSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0
YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChy
ZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisKKyAgICBW
ZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIFRtcCBiYXNlID0g
Y29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihp
bnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAzNSArIHN0YXRpY19jYXN0PGludDMyX3Q+KHJlZ3Muc2l6ZSgpKSAtIDEpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBD
SEVDSyh0aGluZ3NbaV0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAtIDEpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcDY0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHBy
b2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9v
dCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAw
MDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIw
MDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRo
aW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjph
ZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdz
KSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSA0MDAw
MDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAw
MDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KCkKK3sKKyAgICBCMzo6
UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAg
IGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQ
UkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUwMDAwMDAwMDAwMDAwMDAw
bGwsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2
NCkpOworCisgICAgaW50NjRfdCB0aGluZ3NbNV07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICog
c2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMzAw
MDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAw
MDAwbGwpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZVN3YXBNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90
IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXpl
b2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhp
bmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAg
ICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSA0
MDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KDMwMDAwMDAwMDAwMDAwMDAwbGwpKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNo
aWZ0TWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25z
dGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzVd
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFz
ZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90
KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAq
IHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAw
MDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNL
KHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0g
PT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDQwMDAwMDAwMDAwMDAwMDAwbGwpKTsKK30KKwordm9p
ZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7Cisg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50MzJfdCBtZW1vcnlbMl07Cisg
ICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZt
ZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAg
IFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1syXTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMzUpOworICAg
IENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9y
eUxvbmcoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJv
Yy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsK
KyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDMp
KTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAg
IAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMCAqIHNpemVvZihpbnQzMl90
KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAwICogc2l6ZW9mKGludDMyX3QpKSwK
KyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDEgKiBzaXplb2YoaW50MzJf
dCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgQXJnOjphZGRyKFRt
cChHUFJJbmZvOjpyZWdUMyksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJf
dCB0aGluZ3NbM107CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAy
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMzYpOworICAg
IENIRUNLKG1lbW9yeVswXSA9PSAyKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50MzJfdCBt
ZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7CisKKyAg
ICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICBy
ZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIGkgKyAxLCBUbXAocmVn
c1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVt
b3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFw
cGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChy
ZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50MzJf
dCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQzMl90KSks
CisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDMy
X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKHJlZ3NbMV0pLAor
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRt
cChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
KTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgK
KyAgICAgICAgICAgIE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
KTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0g
MzYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAg
ICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOworICAgIENI
RUNLKG1lbW9yeVswXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUpOworfQorCit2
b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzNjQoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1l
bW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsx
XSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJp
b3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpy
ZWdUMCkpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENv
bnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBp
IDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAt
IDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAg
VmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAg
ICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJl
Z1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENI
RUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9
PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0
X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMTAwMDAw
MDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9
CisKK2ludDY0X3QgY29tYmluZUhpTG8oaW50NjRfdCBoaWdoLCBpbnQ2NF90IGxvdykKK3sKKyAg
ICB1bmlvbiB7CisgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgIGludDMyX3QgaGFsdmVz
WzJdOworICAgIH0gdTsKKyAgICB1LnZhbHVlID0gaGlnaDsKKyAgICB1LmhhbHZlc1swXSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KGxvdyk7CisgICAgcmV0dXJuIHUudmFsdWU7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRf
dCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1v
cnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJ
blByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5m
bzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxv
YWRDb25zdGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgK
KyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBd
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAor
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAg
ICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoCisgICAg
ICAgICAgICBUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksCisgICAgICAgICAgICAoaSAm
IDEpID8gQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpIDogQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgp
LCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICBy
b290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFy
Zzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
fQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVu
PGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDBsbCk7
CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigzNjAwMDAwMDAw
MDAwMGxsKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAw
MDAwMDAwMDAwMGxsOworICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gKChpICYgMSkgPyBzdGF0
aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpIDogdmFsdWUpKTsKKyAgICB9CisgICAgQ0hFQ0sobWVt
b3J5WzBdID09IGNvbWJpbmVIaUxvKDM1MDAwMDAwMDAwMDAwbGwsIDEwMDAwMDAwMDAwMDBsbCkp
OworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVtb3J5WzJdOworICAg
IG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVt
b3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAw
ICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBz
aXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwg
MSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQzMl90KSks
IFRtcChHUFJJbmZvOjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1syXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6
ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM2KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0g
MSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAz
NSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnk2NCgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0
X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVt
b3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAwMDBsbCwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDBs
bCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5h
cHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGg2NCksCisKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICog
c2l6ZW9mKGludDY0X3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwKKyAgICAgICAgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzJdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVv
ZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgw
KSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0
aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNjAwMDAwMDAwMDAwMGxs
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyht
ZW1vcnlbMF0gPT0gMjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUw
MDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnlNaXhlZFdp
ZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAw
MDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MTAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMjAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpy
ZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAg
ICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSks
CisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAg
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0
aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oMTAwMDAwMDAwMDAwMGxsKSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIw
MDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IGNvbWJpbmVIaUxvKDM2MDAw
MDAwMDAwMDAwbGwsIDM1MDAwMDAwMDAwMDAwbGwpKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJv
dGF0ZU1lbW9yeUFsbFJlZ3M2NCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1l
bW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAw
MDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6
R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgKGkg
KyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0pKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51
bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNp
emVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAorCisgICAgICAgIHJlZ3MubGFzdCgpLCByZWdzWzBdLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGg2NCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChy
ZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIFZlY3RvcjxpbnQ2
NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAgIE1vdmUsIG51
bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBz
aXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVncy5zaXplKCkpICogMTAwMDAwMDAwMDAwMGxs
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMzYwMDAwMDAwMDAwMDBsbCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5n
c1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAg
Q0hFQ0sobWVtb3J5WzBdID09IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFd
ID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5
QWxsUmVnc01peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1v
cnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAw
bGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQ
KTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsg
MSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXpl
b2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKworICAgICAgICByZWdzLmxhc3QoKSwgcmVnc1swXSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUo
KTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVn
c1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBWZWN0b3I8aW50NjRf
dD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBudWxs
cHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWdzLnNpemUo
KSkgKiAxMDAwMDAwMDAwMDAwbGwpKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KDM2MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAy
OyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRp
Y19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlb
MF0gPT0gY29tYmluZUhpTG8oMzUwMDAwMDAwMDAwMDBsbCwgMTAwMDAwMDAwMDAwMGxsKSk7Cisg
ICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlU3dhcERvdWJsZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDEsIFRtcChGUFJJbmZvOjpmcFJl
Z1QwKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3Qs
IDIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9h
ZERvdWJsZUNvbnN0YW50KHJvb3QsIDMsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDQsIFRtcChGUFJJbmZv
OjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRt
cChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAg
ICBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGRvdWJsZSB0aGluZ3NbNF07CisgICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwg
bnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVv
Zihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChG
UFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoZG91YmxlKSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0RG91YmxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMSwg
VG1wKEZQUkluZm86OmZwUmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91
YmxlQ29uc3RhbnQocm9vdCwgMiwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMywgVG1wKEZQUkluZm86OmZw
UmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChGUFJJ
bmZvOjpmcFJlZ1QyKSwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGg2NCkpOworCisgICAgZG91YmxlIHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUu
bmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDApLCBBcmc6OmFk
ZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3Vi
bGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBU
bXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGRvdWJsZSkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZw
UmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworfQorCisjZGVm
aW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlm
ICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVuZCgg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNr
PHZvaWQoKT4oICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgWyZdICgpIHsgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxu
Iik7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICBcCisg
ICAgICAgICAgICAgICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3
aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCit7CisgICAgSlND
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXAp
LmxlYWtSZWYoKTsKKworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNr
czsKKworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4g
Ym9vbCB7CisgICAgICAgIHJldHVybiAhZmlsdGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwg
ZmlsdGVyKTsKKyAgICB9OworCisgICAgUlVOKHRlc3RTaW1wbGUoKSk7CisgICAgCisgICAgUlVO
KHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlm
dCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVMb25nU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVm
ZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0
ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVCcm9hZGNhc3QoKSk7CisgICAgUlVOKHRl
c3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hp
ZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0QmFja3dhcmQoKSk7CisgICAgUlVO
KHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJCYWNrd2FyZCgpKTsKKyAgICBSVU4odGVzdFNodWZm
bGVNdWx0aXBsZVNoaWZ0cygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdl
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlm
dEFuZFJvdGF0ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdEFsbFJlZ3MoKSk7CisgICAg
UlVOKHRlc3RTaHVmZmxlUm90YXRlQWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1w
bGVTd2FwNjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlm
dE1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnkoKSk7CisgICAg
UlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlMb25nKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNo
aWZ0TWVtb3J5QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJl
Z3M2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFdpZHRo
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSgpKTsKKyAgICBSVU4odGVzdFNo
dWZmbGVSb3RhdGVNZW1vcnk2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlN
aXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVTd2FwRG91YmxlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNo
aWZ0RG91YmxlKCkpOworCisgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKKyAgICAgICAgdXNhZ2Uo
KTsKKworICAgIExvY2sgbG9jazsKKworICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJl
YWRzOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJv
Y2Vzc29yQ29yZXMoKTsgaS0tOykgeworICAgICAgICB0aHJlYWRzLmFwcGVuZCgKKyAgICAgICAg
ICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCisgICAg
ICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFz
a3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2tzLnRha2VGaXJzdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT5y
dW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKyAgICB9
CisKKyAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBjcmFzaExvY2subG9jaygpOwor
fQorCit9IC8vIGFub255bW9pcyBuYW1lc3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkK
Kworc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQoreworICAgIGRhdGFMb2coIkIzIEpJVCBp
cyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9
IG51bGxwdHI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2FzZSAxOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFyZ3ZbMV07CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBydW4oZmlsdGVyKTsKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268942</attachid>
            <date>2016-01-13 22:00:14 -0800</date>
            <delta_ts>2016-01-14 11:42:00 -0800</delta_ts>
            <desc>passes testb3</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>189074</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkpOwogCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUw
QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFE
RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLApAQCAtNDAwLDYgKzQwMSwyMSBAQAogCQkwRjVF
RjkxRTE2ODc4RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1
bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVF
RjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8q
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMy
MDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLzsgfTsKKwkJ
MEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjExQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovOyB9OworCQkwRjYxODMyQjFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0
b20uY3BwICovOyB9OworCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLzsgfTsKKwkJMEY2
MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyRW1pdFNodWZmbGUuaCAqLzsgfTsKKwkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcCAqLzsgfTsKKwkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oICovOyB9OworCQkwRjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgz
MjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEY2MTgz
MzExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuaCAqLzsgfTsKKwkJMEY2MTgzMzMxQzQ1RjM1QzAwNzI0NTBCIC8qIEFp
ck9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovOyB9OworCQkwRjYxODMz
NjFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi87IH07CisJCTBGNjE4MzM3MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmgg
Ki87IH07CisJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBF
QjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2
MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkEx
QzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGNjE4MzQ1
MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWly
LmNwcCAqLzsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyB9
OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgfTsKIAkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZh
bHVlLmggKi87IH07CkBAIC0yMDc4LDYgKzIwOTQsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwor
CQkwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
eworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlU
eXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY2MTgzMzgxQzQ1RjYyQTAwNzI0
NTBCOworCQkJcmVtb3RlSW5mbyA9IHRlc3RhaXI7CisJCX07CiAJCTBGOTMyNzVDMUMyMEJGM0Ew
MENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTQxLDYgKzI1NjQsMjAgQEAKIAkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFs
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIwMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5oOyBw
YXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckN1c3RvbS5jcHA7IHBhdGggPSBi
My9haXIvQWlyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI0
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5oOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmg7IHBhdGggPSBiMy9h
aXIvQWlyTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBaXJPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZVV0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzQzMUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0YWlyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjYxODM0
NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB0ZXN0YWlyLmNwcDsgcGF0aCA9IGIzL2Fpci90ZXN0YWlyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMzNzAsOCArMzQwNyw4IEBACiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBK
U0pvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDM1NTg3RDFDNDE4NDE5
MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdGMUM0
MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0UxQzQxODQ1ODAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3
RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5P
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVC
NDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MzA0LDYgKzQzNDEsMTUgQEAKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjYxODMzQjFD
NDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCTBGNjE4MzNDMUM0NUY2MkEwMDcyNDUwQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGNjE4MzNEMUM0NUY2MkEwMDcyNDUwQiAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00NDAxLDYgKzQ0
NDcsNyBAQAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJ
NjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEY5MzI3NTkx
QzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzQzMUM0NUY2MkEwMDcy
NDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NzkxLDEzICs0ODM4LDE4IEBACiAJCQkJMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0
RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRjYxODMyMDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKKwkJCQkwRjYxODMyMTFD
NDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi8sCiAJCQkJMEZFQzg1
NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZFQzg1
NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAogCQkJCTBGRUM4NTUw
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKIAkJCQkwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwICovLAogCQkJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5oICovLAorCQkJCTBGNjE4MzIzMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgKi8sCisJCQkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi8sCiAJCQkJMjYyRDg1QjQxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAgKi8sCiAJCQkJMjYyRDg1QjUxQzBENjUwRjAwNkFDQjYx
IC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oICovLAogCQkJCTBGNEM5MTY3MUMyQjNE
NjgwMDQzNDFBNiAvKiBBaXJGaXhTcGlsbFNsb3RaRGVmLmggKi8sCkBAIC00ODE2LDYgKzQ4Njgs
MTAgQEAKIAkJCQkyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwICovLAogCQkJCTI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovLAogCQkJCTI2ODRENDM3MUMwMDE2MUMwMDgx
RDY2MyAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovLAorCQkJCTBGNjE4MzI2MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLywKKwkJCQkwRjYxODMyNzFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGNjE4MzI4MUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4
NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywKIAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FC
MUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggKi8sCkBAIC00ODQxLDYgKzQ4OTcs
NyBAQAogCQkJCTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLywK
IAkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0g
YWlyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUyOTgsNiArNTM1NSw5IEBACiAJ
CTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjE4MzMyMUM0NUYzNUMwMDcy
NDUwQiAvKiBBaXJPcGNvZGUuaCAqLywKKwkJCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8sCisJCQkJMEY2MTgzMzUxQzQ1RjNCNjAwNzI0NTBCIC8q
IEFpck9wY29kZVV0aWxzLmggKi8sCiAJCQkJOTk2QjczMTUxQkRBMDVBQTAwMzMxQjg0IC8qIEFy
cmF5Q29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2QjczMTYxQkRBMDVBQTAwMzMxQjg0IC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMDcxQkQ5RkEyQzAw
MzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggKi8sCkBAIC02ODk2LDYgKzY5NTYsNyBA
QAogCQkJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBT
YW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzMTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTgsNiArNzAxOSw3IEBACiAJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MTgzMkYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MTUwLDYgKzcyMTIsNyBAQAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDIxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzFGMUIxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjU0LDYgKzczMTcsNyBAQAogCQkJCTBGMkI5Q0VE
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzYxQzQ1RjNCNjAwNzI0NTBCIC8qIEFp
ck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTExQzBDRDcwQzAw
MDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzAsNiArNzMzNCw3IEBACiAJCQkJMEZD
MjBDQkExODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjE4MzM3MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMyMENCNjE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0Nzgx
NURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzYyNCw2ICs3Njg5LDcgQEAKIAkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODExQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21p
c2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE0LDYgKzgwODAsNyBAQAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEw
Q0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMz
MzFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2
QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNDYsNiArODExMywyMiBAQAogLyogRW5kIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8K
KwkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7CisJCQlpc2EgPSBQ
QlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY2MTgzM0UxQzQ1
RjYyQTAwNzI0NTBCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0YWlyIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGNjE4MzM5MUM0NUY2
MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAv
KiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVw
ZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YWlyOworCQkJcHJvZHVjdE5hbWUg
PSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGNjE4MzQzMUM0NUY2MkEwMDcyNDUw
QiAvKiB0ZXN0YWlyICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICov
ID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBGOTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovOwpAQCAtODI1Myw2ICs4MzM2LDcgQEAK
IAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3
MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKKwkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC04NDg5LDYgKzg1NzMsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBG
NjE4MzM5MUM0NUY2MkEwMDcyNDUwQiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtODY5Myw2ICs4Nzg1LDcgQEAKIAkJCQk1MkI3MTdCNTFBMDU5N0UxMDA3QUY0
RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJBREY1
NDFCRDFGNEI4MDBFMDczQzEgLyogQ29waWVkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjczMDBC
ODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NDEsNiArODgzNCw3
IEBACiAJCQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxs
aW5nQ29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBD
NzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUx
MkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4
RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04NzU3LDYgKzg4NTEsNyBAQAogCQkJCUE3OEE5Nzc0MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzYxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYxODMyQzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1
c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA2OCw2ICs5MTYzLDcg
QEAKIAkJCQlFMzNGNTA4NDFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyog
SlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZB
MUIxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFEMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzAx
M0NBOEIxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkyMTAsNiArOTMwNiw3IEBACiAJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNE
OTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYx
OEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05MzYyLDYgKzk0NTksMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAq
LworCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjYxODMzODFD
NDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY2MTgzNDYx
QzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY5MzI3NEUxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovOwpAQCAtOTQ3Myw2ICs5NTc1LDQyIEBACiAJCQl9OwogCQkJ
bmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBE
ZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1
dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPREVfU0lHTl9F
TlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGFpcjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2
OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0
bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworCQkwRjYxODM0MTFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZmls
aW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VO
VElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
NjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9
IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsK
KwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQg
LyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtOTkwMiw2ICsxMDA0MCwxNyBAQAogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0UxQzQ1RjYyQTAwNzI0NTBCIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YWlyIiAqLyA9IHsK
KwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAorCQkJCTBGNjE4MzNGMUM0NUY2MkEwMDcyNDUwQiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjYxODM0
MDFDNDVGNjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjYxODM0MTFDNDVGNjJBMDA3
MjQ1MEIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGNjE4MzQyMUM0NUY2MkEwMDcyNDUwQiAvKiBQ
cm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
OTMyNzU0MUMyMEJDQkEwMENGNjU2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiZHluYmVuY2giICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzYsNiArNzYsMTUgQEAgaW5saW5lIGJvb2wgaXNYODZfNjQoKQogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9v
bCBvcHRpbWl6ZUZvckFSTXY3SURJVlN1cHBvcnRlZCgpCiB7CiAgICAgcmV0dXJuIGlzQVJNdjdJ
RElWU3VwcG9ydGVkKCkgJiYgT3B0aW9uczo6dXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6
YXRpb25zKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKKyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueGNoZ2xfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlKTsK
KyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsNiArNjU1LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KIAorICAgIHZv
aWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dh
cDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAg
IHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSw2ICsxNDMxLDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNy
YywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7CkBAIC0xNDQxLDYgKzE0NDYsMTEgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgZHN0
KTsKICAgICB9CisKKyAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CiAjZW5kaWYKIAogICAg
IHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICB+Q0NhbGxWYWx1ZSgpOwogCi0gICAgRWZmZWN0cyBl
ZmZlY3RzOworICAgIEVmZmVjdHMgZWZmZWN0cyB7IEVmZmVjdHM6OmZvckNhbGwoKSB9OwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CkBAIC00Nyw3ICs0Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKICAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQotICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6
Zm9yQ2FsbCgpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+
PSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsMTIgQEAgQ29tcGlsYXRpb246
OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdQogICAgIG1fYnlwcm9kdWN0cyA9IHByb2MucmVs
ZWFzZUJ5cHJvZHVjdHMoKTsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
Ynlwcm9kdWN0cykKKyAgICA6IG1fY29kZVJlZihjb2RlUmVmKQorICAgICwgbV9ieXByb2R1Y3Rz
KFdURk1vdmUoYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24o
KQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIENvbXBpbGF0aW9uIHsKIAog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJl
JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgYWxs
b3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJyZW50bHkg
b25seSB1c2VkIGJ5IHRlc3QKKyAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQg
dGhhdCB3YXkuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk0ODU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0aXZp
dHkuaCIKQEAgLTk0LDYgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4KKyAg
ICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdoaWxl
IChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1
ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAv
LyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29v
ZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5yZXNp
emUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhibG9j
ayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ikxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0xNTQx
LDM3ICsxNTUzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZh
bHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1
bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAoQmFu
a0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGlsZCks
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNpZiBD
UFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZvbGxv
dyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8gQXJn
dW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVv
ZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9IHNs
b3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5nIHRo
ZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVhc2Vz
IHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYgd2Ug
Y291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBhcyBo
aWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAgICAg
bV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dlcigp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTE5LDE0
ICsxOTAwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKICAgICAgICAg
ICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKLSAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxT
cGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCAtIHdlIGhh
dmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJnOjpDQ2FsbFNwZWNpYWwuIEl0IG1p
Z2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2UgZmFjdG9yZWQgQWlyOjpDQ2FsbFNw
ZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBtYWRlIGl0IGEgQjMKLSAgICAgICAg
ICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAgICAgIEluc3QgaW5zdChtX2lzUmFy
ZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0NhbGwpOwogCiAgICAgICAgICAgICAv
LyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2FyZGluZyB0aGUgY2FsbGVlIGFyZ3Vt
ZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gdXNlIGl0IHlldC4g
SXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5MzksNDggKzE5MTUsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbC0+
Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0ZWxsIEFpciB3aGF0IHJl
Z2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwotCi0gICAgICAgICAgICAvLyBOb3cg
bWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVyZSB3ZSBpbXBsZW1lbnQgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAgICAgLy8gdGhpcywgQWlyIGRvZXMg
bm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQganVzdCB0YWtlcyBvdXIgd29yZCBm
b3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOwotICAgICAg
ICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBj
Q2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGFyZ0No
aWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAgICAgIEFyZyBhcmc7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoYXJn
Q2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6R1A6Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxHUFJJbmZvPihncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwogCi0gICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1l
bnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiksIHRt
cChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyNzIsMTEgKzIyMTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNo
aWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29ya2xpc3Q7CiAKICAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3RvcjxJbnN0PiBtX3Byb2xvZ3VlOwog
CiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2lzUmFyZTsKICAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVCeXByb2R1Y3RzIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVCeXByb2R1Y3RzKCk7Ci0g
ICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlQnlw
cm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ieXByb2R1
Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
MjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAg
ICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02
NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAg
IGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgotICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAgICAgICAgICAmJiBhcmcu
YmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwogCi0g
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0dXJuIGFyZy5jYW5SZXByZXNlbnQo
dmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcChBaXI6
OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNvbnN0IFZhbHVlUmVwJiByZXApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
MzgsNiArNzczOCw2NSBAQCB2b2lkIHRlc3RDYWxsU2ltcGxlKGludCBhLCBpbnQgYikKICAgICBD
SEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSArIGIpOwogfQogCit2b2lk
IHRlc3RDYWxsUmFyZShpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb21t
b24gPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogcmFyZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayhyYXJlLCBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayhjb21tb24pKTsKKworICAgIGNvbW1vbi0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbW1vbi0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAgICAKKyAgICByYXJlLT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgSW50MzIs
IE9yaWdpbigpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uKSksCisgICAg
ICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpKTsK
KworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0cnVlLCBhLCBiKSA9PSBhICsg
Yik7Cit9CisKK3ZvaWQgdGVzdENhbGxSYXJlTGl2ZShpbnQgYSwgaW50IGIsIGludCBjKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29tbW9uID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIHJhcmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApLAorICAgICAgICBGcmVxdWVudGVkQmxvY2socmFyZSwgRnJlcXVlbmN5Q2xh
c3M6OlJhcmUpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2soY29tbW9uKSk7CisKKyAgICBjb21t
b24tPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBjb21tb24tPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CisgICAgCisgICAgcmFyZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAg
ICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAg
ICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKSkpKTsKKwor
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0cnVlLCBhLCBiLCBjKSA9PSBhICsg
YiArIGMpOworfQorCiB2b2lkIHRlc3RDYWxsU2ltcGxlUHVyZShpbnQgYSwgaW50IGIpCiB7CiAg
ICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMDAzMiw2ICsxMDA5MSw4IEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEludDMyVG9Eb3VibGVQYXJ0aWFsUmVnaXN0ZXJX
aXRob3V0U3RhbGwoKSk7CiAKICAgICBSVU4odGVzdENhbGxTaW1wbGUoMSwgMikpOworICAgIFJV
Tih0ZXN0Q2FsbFJhcmUoMSwgMikpOworICAgIFJVTih0ZXN0Q2FsbFJhcmVMaXZlKDEsIDIsIDMp
KTsKICAgICBSVU4odGVzdENhbGxTaW1wbGVQdXJlKDEsIDIpKTsKICAgICBSVU4odGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cygpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwyNiBA
QAogCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BS
SW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CiAKK2Jvb2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6
OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3Rh
Y2s6CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNl
bnRhYmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTYxLDYgKzc4LDMxIEBAIGJvb2wgQXJnOjppc1Jl
cHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwKICAgICB9CiB9CiAKK2Jvb2wgQXJnOjp1c2VzVG1w
KEFpcjo6VG1wIHRtcCkgY29uc3QKK3sKKyAgICBib29sIHVzZXMgPSBmYWxzZTsKKyAgICBjb25z
dF9jYXN0PEFyZyo+KHRoaXMpLT5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgWyZdIChBaXI6OlRt
cCBvdGhlclRtcCkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wID09IHRtcCkKKyAgICAgICAg
ICAgICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHVzZXM7Cit9CisK
K2Jvb2wgQXJnOjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBpc1R5cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Cit9CisKK2Jvb2wgQXJnOjpp
c0NvbXBhdGlibGVUeXBlKGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGhhc1R5
cGUoKSkKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzVHlwZSh0eXBlKCkpOworICAgIGlmIChvdGhl
ci5oYXNUeXBlKCkpCisgICAgICAgIHJldHVybiBpc1R5cGUob3RoZXIudHlwZSgpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTExLDYgKzE1Myw5IEBAIHZvaWQgQXJnOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBv
dXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFdpZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYxLDYg
KzIwNiw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBj
YXNlIEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lk
dGhBcmciKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yMjUsMTYgKzI3MywxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJn
OjpXaWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmlu
dCgiOCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAg
IG91dC5wcmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0
aDMyIik7CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAg
b3V0LnByaW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDExIEBACiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAK
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7
CiAKIGNsYXNzIFNwZWNpYWw7CiBjbGFzcyBTdGFja1Nsb3Q7CkBAIC02OSw3ICs3Myw4IEBAIHB1
YmxpYzoKICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKICAgICAgICAgRG91Ymxl
Q29uZCwKLSAgICAgICAgU3BlY2lhbAorICAgICAgICBTcGVjaWFsLAorICAgICAgICBXaWR0aEFy
ZwogICAgIH07CiAKICAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgewpAQCAtMTU2LDYgKzE2MSwxMyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlw
ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZnVuY3RvcihHUCk7Cisg
ICAgICAgIGZ1bmN0b3IoRlApOworICAgIH0KKwogICAgIGVudW0gV2lkdGggOiBpbnQ4X3Qgewog
ICAgICAgICBXaWR0aDgsCiAgICAgICAgIFdpZHRoMTYsCkBAIC0yMjAsNiArMjMyLDI2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGlzQW55VXNlKHJvbGUpICYmICFpc0NvbGRVc2Uocm9sZSk7
CiAgICAgfQogCisgICAgc3RhdGljIFJvbGUgY29vbGVkKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6
CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNl
QWRkcjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAg
ICAgICAgICAgcmV0dXJuIHJvbGU7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0
dXJuIENvbGRVc2U7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgICAgIHJldHVybiBM
YXRlQ29sZFVzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9p
bmcgYW55dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkK
ICAgICB7CkBAIC00MzUsNiArNDY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIGltbVB0cihjb25zdCB2b2lkKiBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVz
cykpOworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90
IG9mZnNldCA9IDApCiAgICAgewogICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwpAQCAtNTQ5
LDYgKzU4NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisg
ICAgc3RhdGljIEFyZyB3aWR0aEFyZyhXaWR0aCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBXaWR0aEFyZzsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gd2lkdGg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKQEAgLTU4NSw2ICs2MzAsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAgIGJvb2wg
aXNTb21lSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ltbSgpIHx8IGlzSW1t
NjQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWRkcigpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEFkZHI7CkBAIC02MDUsNiArNjU1LDIxIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKICAgICB9CiAKKyAgICBib29sIGlzTWVtb3J5KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlz
U3RhY2tNZW1vcnkoKSBjb25zdDsKKwogICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKQEAgLTYzNyw2ICs3MDIsMTEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CiAgICAgfQogCisgICAg
Ym9vbCBpc1dpZHRoQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
V2lkdGhBcmc7CisgICAgfQorCiAgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKQEAgLTY4MCwxOCArNzUwLDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9iYXNlOwogICAgIH0KIAotICAgIGJvb2wgaGFzT2Zmc2V0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
QWRkcjoKLSAgICAgICAgY2FzZSBTdGFjazoKLSAgICAgICAgY2FzZSBDYWxsQXJnOgotICAgICAg
ICBjYXNlIEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCBo
YXNPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CiAgICAgCiAgICAgaW50MzJf
dCBvZmZzZXQoKSBjb25zdAogICAgIHsKQEAgLTczMCw2ICs3ODksMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKICAgICB9
CiAKKyAgICBXaWR0aCB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFdpZHRoQXJnKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpZHRoPihtX29mZnNl
dCk7CisgICAgfQorCiAgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKQEAgLTc1NCw2ICs4MTksNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CiAgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgp
OwpAQCAtNzcxLDYgKzgzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAg
ICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2Fz
ZSBXaWR0aEFyZzoKICAgICAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIEFkZHI6CkBAIC04MTIsNiArODc5LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgY2FuUmVwcmVzZW50KFZhbHVlKiB2YWx1ZSkgY29u
c3Q7CisKKyAgICBib29sIGlzQ29tcGF0aWJsZVR5cGUoY29uc3QgQXJnJiBvdGhlcikgY29uc3Q7
CisKICAgICBib29sIGlzR1BSKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzR1BSKCk7CkBAIC05NTMsNiArMTAyNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3Bl
Y2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtOTc0LDYgKzEwNDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBib29sIHVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdDsKKwogICAgIC8v
IFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERl
ZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKICAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYg
dGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtNzgsMTUgKzc4LDE3IEBAIHB1YmxpYzoKICAgICBJbnN0TGlzdCYgaW5zdHMoKSB7IHJldHVy
biBtX2luc3RzOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgotICAgIHZvaWQgYXBw
ZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICBJbnN0JiBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQog
ICAgIHsKICAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKTsK
KyAgICAgICAgcmV0dXJuIG1faW5zdHMubGFzdCgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCisgICAgSW5zdCYgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7
CiAgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLikpOworICAgICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAgfQogCiAg
ICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMs
IHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFt
ZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2Fs
bEFyZ3VtZW50SW1wbCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zm
c2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3Vt
ZW50Q291bnQrKzsKKyAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzKQorICAgICAgICByZXR1cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOworCisgICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAg
aWYgKGlzQVJNNjQoKSAmJiBpc0lPUygpKSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFj
a2VkLgorICAgICAgICBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90
U2l6ZSA9IDg7CisgICAgfQorCisgICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsKKyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxs
QXJnKHN0YWNrT2Zmc2V0KTsKKyAgICBzdGFja09mZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVk
JiBncEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBmcEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBz
dGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKSB7CisgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4g
bWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1wbDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNr
T2Zmc2V0LCBjaGlsZCk7CisgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hh
bGxDQ2FsbEFyZ3VtZW50SW1wbDxGUFJJbmZvPihmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
LCBjaGlsZCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIEFyZygpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFy
Zz4gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihDb2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBWZWN0b3I8QXJnPiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0Nh
bGxTcGVjaWFsOjpzY3JhdGNoUmVnaXN0ZXIpKTsKKyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291
bnQgPSAwOworICAgIHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQg
c3RhY2tPZmZzZXQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVt
Q2hpbGRyZW4oKTsgKytpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBt
YXJzaGFsbENDYWxsQXJndW1lbnQoZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0
YWNrT2Zmc2V0LCB2YWx1ZS0+Y2hpbGQoaSkpKTsKKyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2Fs
bEFyZ0FyZWFTaXplKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIHN0YWNrT2Zmc2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVz
dWx0KFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6Cisg
ICAgICAgIHJldHVybiBUbXAoKTsKKyAgICBjYXNlIEludDMyOgorICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgIHJldHVybiBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxv
YXQ6CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFRtcCgpOworfQorCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUq
IG9yaWdpbiwgY29uc3QgVmVjdG9yPEFyZz4mIGFyZ3VtZW50cykKK3sKKyAgICBJbnN0IGluc3Qo
UGF0Y2gsIG9yaWdpbiwgQXJnOjpzcGVjaWFsKGNvZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBp
bnN0LmFyZ3MuYXBwZW5kKGFyZ3VtZW50c1swXSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAg
ICAgaWYgKGFyZy5pc1RtcCgpKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOwor
ICAgIH0KKyAgICByZXR1cm4gaW5zdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9u
X2gKKyNkZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAi
QjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKK1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYs
IENDYWxsVmFsdWUqKTsKKworVG1wIGNDYWxsUmVzdWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0Nh
bGwoQ29kZSYsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMTIgKzU1LDEzIEBAIHB1
YmxpYzoKIAogICAgIFByb2NlZHVyZSYgcHJvYygpIHsgcmV0dXJuIG1fcHJvYzsgfQogCi0gICAg
QmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKIAog
ICAgIC8vIE5vdGUgdGhhdCB5b3UgY2FuIHJlbHkgb24gc3RhY2sgc2xvdHMgYWx3YXlzIGdldHRp
bmcgaW5kaWNlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgaW5kZXgKICAgICAvLyBvZiBhbnkg
cHJpb3Igc3RhY2sgc2xvdC4gSW4gZmFjdCwgYWxsIHN0YWNrIHNsb3RzIHlvdSBjcmVhdGUgaW4g
dGhlIGZ1dHVyZSB3aWxsIGhhdmUgYW4gaW5kZXgKICAgICAvLyB0aGF0IGlzID49IHN0YWNrU2xv
dHMoKS5zaXplKCkuCi0gICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KAorICAgICAgICB1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CiAgICAg
U3RhY2tTbG90KiBhZGRTdGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqKTsKIAogICAgIFNwZWNpYWwq
IGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckN1c3RvbS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworYm9vbCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAg
ICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnN0LmFyZ3Mu
c2l6ZSgpICE9ICh2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBj
YW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFh
cmcuaXNTdGFja01lbW9yeSgpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKworICAgIGlmICgh
aW5zdC5hcmdzWzBdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
dGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1tZWRpYXRlLgorICAgIGlm
ICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1Nv
bWVJbW0oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpbnN0LmFy
Z3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgb2Zmc2V0Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51
bUNoaWxkcmVuKCk7IGktLSA+IDE7KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5j
aGlsZChpKTsKKyAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAg
ICAgaWYgKCFhcmcuY2FuUmVwcmVzZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIEND
YWxsQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9u
Q29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGlu
c3QsICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBD
Q2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworYm9vbCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9y
bShJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICUgMykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gQSBkZXN0aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25j
ZS4gVGhpcyByZXF1aXJlbWVudCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhh
dmlvcgorICAgIC8vIG9mIGhhdmluZyBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8g
Z2V0IG11bHRpcGxlIGlucHV0cyBzaW11bHRhbmVvdXNseS4gSXQgYWxzbworICAgIC8vIGltcG9z
ZXMgc29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1
ZmZsZS4gSWYgd2UgdHJlYXQgYSBzaHVmZmxlIHBhaXIKKyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0
aGUgQXJncyBhcyBub2RlcywgdGhlbiB0aGUgc2luZ2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50
IG1lYW5zIHRoYXQgdGhlCisgICAgLy8gc2h1ZmZsZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2lu
ZHMgb2Ygc3ViZ3JhcGhzOgorICAgIC8vCisgICAgLy8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2Fs
bCB0aGVzZSBzaGlmdHMuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92
ZQorICAgIC8vICAgaW5zdHJ1Y3Rpb25zIGFuZCBkb24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRj
aCByZWdpc3RlcnMuCisgICAgLy8KKyAgICAvLyAtIENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMg
Y29uc2lzdCBvZiBub2RlcyB0aGF0IGhhdmUgb25lIHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vz
c29yLCBzbworICAgIC8vICAgdGhlcmUgaXMgbm8gd2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3Ag
ZnJvbSBvdXRzaWRlIG9mIGl0LiBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAg
ICAvLyAgIG9yIGJ5IHNhdmluZyBvbmUgb2YgdGhlIEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVy
IGFuZCBleGVjdXRpbmcgaXQgYXMgYSBzaGlmdC4KKyAgICBIYXNoU2V0PEFyZz4gZHN0czsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsKKyAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkg
JSAzOworCisgICAgICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgdGhl
IHdpZHRoLgorICAgICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAgICBpZiAoIW1v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGlmICghYXJnLmlzQ29tcGF0aWJsZVR5cGUoaW5zdC5h
cmdzW2kgKyAxXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKG1vZGUgPT0gMSk7CisgICAgICAgICAgICBpZiAoIWRz
dHMuYWRkKGFyZykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYXJnLmlzVG1wKCkgfHwgYXJnLmlzTWVtb3J5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gTm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgbWF5IGFwcGVhciBpbiBhbnkgYWRkcmVzcyBl
eHByZXNzaW9ucy4gVGhlIGxvd2VyaW5nIGNhbid0IGhhbmRsZSBpdAorICAgIC8vIGFuZCBpdCdz
IG5vdCB1c2VmdWwgZm9yIHRoZSB3YXkgd2UgZW5kIHVwIHVzaW5nIFNodWZmbGVzLiBOb3JtYWxs
eSwgU2h1ZmZsZXMgb25seSB1c2VkIGZvcgorICAgIC8vIHN0YWNrIGFkZHJlc3NlcyBhbmQgbm9u
LXN0YWNrIHJlZ2lzdGVycy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAg
ICAgIGlmICghYXJnLmlzTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Ym9vbCBvayA9IHRydWU7CisgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAg
IFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAgIGlmIChkc3RzLmNvbnRhaW5zKHRtcCkp
CisgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRl
KEluc3QmIGluc3QsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBk
YXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIHNodWZmbGU6ICIsIGluc3QsICJcbiIpOworICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAo
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3Rv
bS5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJB
aXJJbnN0LmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCkBAIC01
MSw2ICs1Miw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIC8v
IHlvdSBuZWVkIHRvIGNhcnJ5IGV4dHJhIHN0YXRlIGFyb3VuZCB3aXRoIHRoZSBpbnN0cnVjdGlv
bi4gQWxzbywgU3BlY2lhbHMgbWVhbiB0aGF0IHlvdQogLy8gYWx3YXlzIGhhdmUgYWNjZXNzIHRv
IENvZGUmIGV2ZW4gaW4gbWV0aG9kcyB0aGF0IGRvbid0IHRha2UgYSBHZW5lcmF0aW9uQ29udGV4
dC4KIAorLy8gRGVmaW5pdGlvbiBvZiBQYXRjaCBpbnN0cnVjdGlvbi4gUGF0Y2ggaXMgdXNlZCB0
byBkZWxlZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGluc3RydWN0aW9uIHRvIHRoZQorLy8gU3Bl
Y2lhbCBvYmplY3QsIHdoaWNoIHdpbGwgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBpbnN0
cnVjdGlvbi4KIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KICAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCkBAIC05Niw2ICs5OSwxMTQgQEAgc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAg
ICB9CiB9OwogCisvLyBEZWZpbml0aW9uIG9mIENDYWxsIGluc3RydWN0aW9uLiBDQ2FsbCBpcyB1
c2VkIGZvciBob3QgcGF0aCBDIGZ1bmN0aW9uIGNhbGxzLiBJdCdzIGxvd2VyZWQgdG8gYQorLy8g
UGF0Y2ggd2l0aCBhbiBBaXIgQ0NhbGxTcGVjaWFsIGFsb25nIHdpdGggY29kZSB0byBtYXJzaGFs
IGluc3RydWN0aW9ucy4gVGhlIGxvd2VyaW5nIGhhcHBlbnMKKy8vIGJlZm9yZSByZWdpc3RlciBh
bGxvY2F0aW9uLCBzbyB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3Igc2VlcyB0aGUgY2xvYmJl
cnMuCitzdHJ1Y3QgQ0NhbGxDdXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2lu
ZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNhbGxl
ZQorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAg
ICAgICAgZnVuY3RvcigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6
RGVmLAorICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwK
KyAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKTsgKytpKSB7CisgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQo
aSk7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRl
eCsrXSwgQXJnOjpVc2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxk
LT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5
cGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkRm9ybShJbnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0Jiwg
dW5zaWduZWQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3
ZSBleHBlY3QgQyBjYWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0
YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdl
bmVyYXRpb25Db250ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxD
dXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQg
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4K
KyAgICAgICAgQ0NhbGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBB
cmc6OldpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29v
bGVkKHJvbGUpLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgU2h1ZmZsZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAz
ICogMzsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsK
KyAgICAgICAgICAgIEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFy
ZyYgZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBp
bnN0LmFyZ3NbaSArIDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJn
LndpZHRoKCk7CisgICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0
LmlzR1AoKSA/IEFyZzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFy
Zzo6VXNlLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYs
IHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBB
cmc6OkdQLCBBcmc6OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMo
QXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBh
ZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGluZGV4ICUgMykgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29u
dHJvbEVmZmVjdHMoSW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxw
ZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1
ZmZsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFw
aE5vZGVXb3JrbGlzdC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitU
bXAgZmluZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgeworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsK
KyAgICAgICAgVG1wIHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAg
ICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmlu
ZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBB
cmcmIGFyZzIpIHsKKyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlw
ZSwKKyAgICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAh
YXJnMS51c2VzVG1wKHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30K
KworLy8gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhLCBhID0+IGMsIGIgPT4gZCkKK3N0cnVjdCBS
b3RhdGUgeworICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gbG9vcDsgLy8gaW4gdGhlIGV4YW1wbGUs
IHRoaXMgaXMgdGhlIGxvb3A6IChhID0+IGIsIGIgPT4gYSkKKyAgICBWZWN0b3I8U2h1ZmZsZVBh
aXI+IGZyaW5nZTsgLy8gaW4gdGhlIGV4YW1wbGUsIHRoZXNlIGFyZSB0aGUgYXNzb2NpYXRlZCBz
aGlmdHM6IChhID0+IGMsIGIgPT4gZCkKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9y
PEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6
YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQor
eworICAgIHBhaXJzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKGNvbnN0IFNodWZm
bGVQYWlyJiBwYWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09
IHBhaXIuZHN0KCk7CisgICAgICAgIH0pOworICAgIAorICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRo
YXQgdGhpcyBpcyB0aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3
aXRoLgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBw
YWlyIDogcGFpcnMpIHsKKyAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKTsK
KyAgICAgICAgQVNTRVJUKHBhaXIuZHN0KCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJU
KHBhaXIuZHN0KCkuaXNUbXAoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpOworICAgIH0KKyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxl
IGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBT
aGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIs
IGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSByZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdp
c3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQg
YXMgbWFueSBvZiB0aGVzZSBhcworICAgIC8vICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBj
aGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNhbiBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50
aW9uZWQKKyAgICAvLyAgIG11bHRpcGxlIHRpbWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMs
IGIgPT4gZCwgYiA9PiBlKS4KKyAgICAvLworICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9
PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRo
YXQgaW5zdHJ1Y3Rpb24KKyAgICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBj
YXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5Cisg
ICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywg
YyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBh
LCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmlu
ZyB3aWR0aHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYSByb3RhdGUgY2FuIGhhdmUgImZy
aW5nZSIuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZlIChhID0+IGIsIGIgPT4gYSwgYSA9PmMs
CisgICAgLy8gYiA9PiBkKS4gVGhpcyBoYXMgYSByb3RhdGUgbG9vcCAoYSA9PiBiLCBiID0+IGEp
IGFuZCBzb21lIGZyaW5nZSAoYSA9PiBjLCBiID0+IGQpLiBXZSB0cmVhdAorICAgIC8vIHRoZSB3
aG9sZSB0aGluZyBhcyBhIHNpbmdsZSByb3RhdGUuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIGZp
bmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVt
IGluIGFueSBvcmRlci4KKworICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0
IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRo
ZWlyCisgICAgLy8gc3RhcnRpbmcgc291cmNlLgorICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1
ZmZsZVBhaXI+PiBzaGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMg
b3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3Ig
YSBsaXN0CisgICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCks
IGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisgICAg
Ly8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24n
dCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICAvLyBCdXQsIHByaW9yIHRv
IGV4ZWN1dGluZyBhbGwgb2YgdGhhdCwgd2UgbmVlZCB0byBleGVjdXRlIHRoZSBmcmluZ2U6IHRo
ZSBzaGlmdHMgY29tbWluZyBvZmYgdGhlCisgICAgLy8gcm90YXRlLgorICAgIFZlY3RvcjxSb3Rh
dGU+IHJvdGF0ZXM7CisKKyAgICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+PiBtYXBwaW5nOworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDog
cGFpcnMpCisgICAgICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQocGFpcik7CisKKyAgICAgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7CisKKyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgQXJnIG9yaWdpbmFsU3JjID0gbWFwcGluZy5iZWdpbigpLT5rZXk7CisgICAg
ICAgICAgICBBU1NFUlQoIXNoaWZ0cy5jb250YWlucyhvcmlnaW5hbFNyYykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICB3aGlsZSAoQXJn
IHNyYyA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZl
Y3RvcjxTaHVmZmxlUGFpcj4+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXaXRoIGEgc2hpZnQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkg
YnVpbHQgdGhlIHRhaWwgb2YgdGhpcyBzaGlmdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2Vl
IGlmIHRoYXQncyB0aGUgY2FzZSBub3cuCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWly
cy5hcHBlbmRWZWN0b3Ioc2hpZnRzLnRha2Uoc3JjKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZs
ZVBhaXI+IHBhaXJzID0gV1RGTW92ZShpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFw
cGluZy5yZW1vdmUoaXRlcik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQ
YWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFw
cGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkgPT0gc3Jj
KTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChwYWlyLmRzdCgpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50
UGFpcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnNbMF0uc3JjKCkg
PT0gb3JpZ2luYWxTcmMpOworCisgICAgICAgICAgICBib29sIGlzUm90YXRlID0gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKSB7
CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuZHN0KCkgPT0gb3JpZ2luYWxTcmMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaXNSb3RhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
c1JvdGF0ZSkgeworICAgICAgICAgICAgICAgIFJvdGF0ZSByb3RhdGU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIGNvbW1vbiBjYXNlIGlzIHRoYXQgdGhlIHJvdGF0
ZSBkb2VzIG5vdCBoYXZlIGZyaW5nZS4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZQorICAgICAgICAg
ICAgICAgIC8vIGxhc3QgZGVzdGluYXRpb24gaXMgdGhlIGZpcnN0IHNvdXJjZS4KKyAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxhc3QoKS5kc3QoKSA9PSBvcmlnaW5hbFNyYykKKyAg
ICAgICAgICAgICAgICAgICAgcm90YXRlLmxvb3AgPSBXVEZNb3ZlKGN1cnJlbnRQYWlycyk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IHNsb3cgcGF0aC4gVGhlIHJvdGF0ZSBoYXMgZnJpbmdlLgorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFNodWZmbGVQYWlyPiBkc3RNYXBwaW5n
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3Vy
cmVudFBhaXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5hZGQocGFpci5k
c3QoKSwgcGFpcik7CisKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpciA9IGRz
dE1hcHBpbmcudGFrZShvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wLmFwcGVuZChwYWlyKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gZHN0TWFwcGluZy5maW5kKHBhaXIu
c3JjKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZHN0TWFwcGluZy5l
bmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhaXIgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRz
dE1hcHBpbmcucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgcm90YXRlLmxvb3AucmV2ZXJzZSgpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmcmluZ2UgYXBwZWFycyBpbiB0aGUgc2FtZSBvcmRlciBh
cyBob3cgaXQgYXBwZWFyZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRQ
YWlycywgc2luY2UgdGhhdCdzIHRoZSBERlMgb3JkZXIuCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEJ1dCBvZiBjb3Vyc2Ugd2Ugb25seSBpbmNsdWRlIGl0IGlmIGl0J3Mg
bm90IGluIHRoZSBsb29wLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRzdE1hcHBpbmcu
Y29udGFpbnMocGFpci5kc3QoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRl
LmZyaW5nZS5hcHBlbmQocGFpcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdyYXBo
IHNlYXJjaCB0ZXJtaW5hdGVzIGJlY2F1c2Ugd2UgcmV0dXJuZWQgdG8gdGhlIGZpcnN0IHNvdXJj
ZSwgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBwYWlyIGxpc3QgaGFzIHRvIGhhdmUgYSB2
ZXJ5IHBhcnRpY3VsYXIgc2hhcGUuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
cm90YXRlLmxvb3Auc2l6ZSgpIC0gMTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHJvdGF0ZS5sb29wW2ldLmRzdCgpID09IHJvdGF0ZS5sb29wW2kgKyAxXS5zcmMoKSk7CisgICAg
ICAgICAgICAgICAgcm90YXRlcy5hcHBlbmQoV1RGTW92ZShyb3RhdGUpKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHNoaWZ0cy5hZGQob3JpZ2luYWxTcmMsIFdURk1vdmUo
Y3VycmVudFBhaXJzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJbiB0aGUgd29yc3Qg
Y2FzZSwgd2UgbmVlZCB0d28gc2NyYXRjaCByZWdpc3RlcnMuIFRoZSB3YXkgd2UgZG8gdGhpcyBp
cyB0aGF0IHRoZSBjbGllbnQgcGFzc2VzCisgICAgLy8gdXMgd2hhdCBzY3JhdGNoIHJlZ2lzdGVy
cyBoZSBoYXBwZW5zIHRvIGhhdmUgbGF5aW5nIGFyb3VuZC4gV2Ugd2lsbCBuZWVkIHNjcmF0Y2gg
cmVnaXN0ZXJzIGluCisgICAgLy8gdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAvLworICAgIC8v
IC0gU2h1ZmZsZSBwYWlycyB3aGVyZSBib3RoIHNyYyBhbmQgZHN0IHJlZmVyIHRvIG1lbW9yeS4K
KyAgICAvLyAtIFJvdGF0ZSB3aGVuIG5vIFN3YXAgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLgor
ICAgIC8vCisgICAgLy8gTHVja3kgZm9yIHVzLCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGV4
dHJhIHNjcmF0Y2ggcmVnaXN0ZXJzIGFueXRpbWUgd2UgaGF2ZSBhIFNoaWZ0IHRoYXQKKyAgICAv
LyBlbmRzIHdpdGggYSByZWdpc3Rlci4gV2Ugc2VhcmNoIGZvciBzdWNoIGEgcmVnaXN0ZXIgcmln
aHQgbm93LgorCisgICAgYXV0byBtb3ZlRm9yV2lkdGggPSBbJl0gKEFyZzo6V2lkdGggd2lkdGgp
IC0+IE9wY29kZSB7CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBBcmc6
OldpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDog
TW92ZUZsb2F0OworICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVy
biB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgT3Bjb2RlIGNvbnNlcnZhdGl2ZU1vdmUgPSBtb3ZlRm9yV2lkdGgoQXJnOjpj
b25zZXJ2YXRpdmVXaWR0aCh0eXBlKSk7CisKKyAgICAvLyBXZSB3aWxsIGVtaXQgdGhpbmdzIGlu
IHJldmVyc2UuIFdlIG1haW50YWluIGEgbGlzdCBvZiBwYWNrcyBvZiBpbnN0cnVjdGlvbnMsIGFu
ZCB0aGVuIHdlIGVtaXQKKyAgICAvLyBhcHBlbmQgdGhlbSB0b2dldGhlciBpbiByZXZlcnNlIChm
b3IgZXhhbXBsZSB0aGUgdGhpbmcgYXQgdGhlIGVuZCBvZiByZXN1bHRQYWNrcyBpcyBwbGFjZWQK
KyAgICAvLyBmaXJzdCkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgdGhlIGxhc3QgdGhpbmcgd2Ug
ZW1pdCBmcmVlcyB1cCBpdHMgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBzbworICAgIC8vIGl0IGFm
ZmVjdHMgaG93IHdlIGVtaXQgdGhpbmdzIGJlZm9yZSBpdC4KKyAgICBWZWN0b3I8VmVjdG9yPElu
c3Q+PiByZXN1bHRQYWNrczsKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworCisgICAgYXV0byBj
b21taXRSZXN1bHQgPSBbJl0gKCkgeworICAgICAgICByZXN1bHRQYWNrcy5hcHBlbmQoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICB9OworCisgICAgYXV0byBnZXRTY3JhdGNoID0gWyZdICh1bnNpZ25l
ZCBpbmRleCwgVG1wIHBvc3NpYmxlU2NyYXRjaCkgLT4gVG1wIHsKKyAgICAgICAgaWYgKHNjcmF0
Y2hlc1tpbmRleF0uaXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoZXNbaW5kZXhd
LnRtcCgpOworCisgICAgICAgIGlmICghcG9zc2libGVTY3JhdGNoKQorICAgICAgICAgICAgcmV0
dXJuIFRtcCgpOworICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwg
b3JpZ2luLCBwb3NzaWJsZVNjcmF0Y2gsIHNjcmF0Y2hlc1tpbmRleF0pKTsKKyAgICAgICAgcmV0
dXJuIHBvc3NpYmxlU2NyYXRjaDsKKyAgICB9OworCisgICAgYXV0byByZXR1cm5TY3JhdGNoID0g
WyZdICh1bnNpZ25lZCBpbmRleCwgVG1wIHRtcCkgeworICAgICAgICBpZiAoQXJnKHRtcCkgIT0g
c2NyYXRjaGVzW2luZGV4XSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2
YXRpdmVNb3ZlLCBvcmlnaW4sIHNjcmF0Y2hlc1tpbmRleF0sIHRtcCkpOworICAgIH07CisKKyAg
ICBhdXRvIGhhbmRsZVNoaWZ0UGFpciA9IFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIsIHVu
c2lnbmVkIHNjcmF0Y2hJbmRleCkgeworICAgICAgICBPcGNvZGUgbW92ZSA9IG1vdmVGb3JXaWR0
aChwYWlyLndpZHRoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShtb3Zl
LCBwYWlyLnNyYygpLmtpbmQoKSwgcGFpci5kc3QoKS5raW5kKCkpKSB7CisgICAgICAgICAgICBU
bXAgc2NyYXRjaCA9CisgICAgICAgICAgICAgICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZp
bmRQb3NzaWJsZVNjcmF0Y2godHlwZSwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgcGFp
ci5zcmMoKSwgc2NyYXRjaCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHBhaXIuc3JjKCkuaXNTb21lSW1tKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
b3ZlID09IE1vdmUzMik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUs
IG9yaWdpbiwgQXJnOjppbW02NChwYWlyLnNyYygpLnZhbHVlKCkpLCBzY3JhdGNoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBh
aXIud2lkdGgoKSksIG9yaWdpbiwgc2NyYXRjaCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAg
cmV0dXJuU2NyYXRjaChzY3JhdGNoSW5kZXgsIHNjcmF0Y2gpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZSwg
b3JpZ2luLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFu
ZGxlU2hpZnQgPSBbJl0gKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgc3BpbGwgYmVoYXZpb3Igb2YgdGhlIHNoaWZ0
ZXIgYnkgY2hlY2tpbmcgaWYgYW55IG9mIHRoZQorICAgICAgICAvLyBzaGlmdHMgbmVlZCBzcGls
bHMuIElmIHRoZXkgZG8sIHRoZW4gd2UgY291bGQgdHJ5IHRvIGdldCBhIHJlZ2lzdGVyIG91dCBo
ZXJlLiBOb3RlIHRoYXQKKyAgICAgICAgLy8gdGhpcyBtYXkgZmFpbCB3aGVyZSB0aGUgY3VycmVu
dCBzdHJhdGVneSBzdWNjZWVkczogb3V0IGhlcmUgd2UgbmVlZCBhIHJlZ2lzdGVyIHRoYXQgZG9l
cworICAgICAgICAvLyBub3QgaW50ZXJmZXJlIHdpdGggYW55IG9mIHRoZSBzaGlmdHMsIHdoaWxl
IHRoZSBjdXJyZW50IHN0cmF0ZWd5IG9ubHkgbmVlZHMgdG8gZmluZCBhCisgICAgICAgIC8vIHNj
cmF0Y2ggcmVnaXN0ZXIgdGhhdCBkb2VzIG5vdCBpbnRlcmZlciB3aXRoIGEgcGFydGljdWxhciBz
aGlmdC4gU28sIHRoaXMgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHdpbGwgYmUgb3Bwb3J0dW5p
c3RpYzogaWYgaXQgc3VjY2VlZHMsIHRoZW4gdGhlIGluZGl2aWR1YWwgc2hpZnRzIGNhbiB1c2Ug
dGhhdCBzY3JhdGNoLAorICAgICAgICAvLyBvdGhlcndpc2UgdGhleSB3aWxsIGRvIHdoYXQgdGhl
eSBkbyBub3cuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXpl
KCk7IGktLTspCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisg
ICAgICAgIEFyZyBsYXN0RHN0ID0gc2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFz
dERzdC5pc1RtcCgpKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hl
cykgeworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAg
ICAgICAgICAgIGlmICghc2NyYXRjaC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2ggPSBsYXN0RHN0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3Qg
aGFuZGxlIHNoaWZ0cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhl
c2UgZnJlZSB1cCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBp
biB0aGUgZmluYWwgc2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBz
aGlmdHMgd2lsbCBiZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9y
IGFueXRoaW5nIGVtaXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcg
aW4KKyAgICAvLyByZXZlcnNlKS4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7Cisg
ICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAg
IGlmIChzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0
KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhh
bmRsZSB0aGUgcmVzdCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlm
dHMpIHsKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsK
KyAgICAgICAgaWYgKCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhh
bmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAg
Zm9yIChSb3RhdGUmIHJvdGF0ZSA6IHJvdGF0ZXMpIHsKKyAgICAgICAgaWYgKCFyb3RhdGUuZnJp
bmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIHRoZSBmcmlu
Z2UgZmlyc3QhIFRoaXMgd29uJ3QgY2xvYmJlciBhbnkgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGFy
ZQorICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgcm90YXRpb24uCisgICAgICAgICAgICBoYW5k
bGVTaGlmdChyb3RhdGUuZnJpbmdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBjYW5Td2FwID0gZmFsc2U7CisgICAgICAgIE9wY29kZSBzd2FwID0gT29wczsKKyAgICAgICAg
QXJnOjpXaWR0aCBzd2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8gYm9ndXMgdmFsdWUKKyAgICAg
ICAgCisgICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKKyAgICAgICAgICAgIHN3YXAgPSBT
d2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoMzI7CisgICAgICAgICAg
ICBib29sIGhhc01lbW9yeSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBT
d2FwNjQ7CisgICAgICAgICAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGFz
TWVtb3J5IHw9IHBhaXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCk7
CisgICAgICAgICAgICAgICAgaGFzSW5kZXggfD0gcGFpci5zcmMoKS5pc0luZGV4KCkgfHwgcGFp
ci5kc3QoKS5pc0luZGV4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpUbXApOworCisg
ICAgICAgICAgICBpZiAoaGFzTWVtb3J5KSB7CisgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBp
c1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpBZGRyKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2FwcGluZyBwYXRoIGlmIHRo
ZXJlIGlzIGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAv
LyBzaHVmZmxlcyBpbnZvbHZlIG1lbW9yeS4gVGhhdCBnZXRzIHRvbyBjb25mdXNpbmcuIFdlIG1p
Z2h0IGJlIGFibGUgdG8gcmVsYXggdGhpcworICAgICAgICAgICAgICAgIC8vIHRvIG9ubHkgYmFp
bCBpZiB0aGVyZSBhcmUgc3Vid2lkdGggcGFpcnMgaW52b2x2aW5nIG1lbW9yeSwgYnV0IEkgaGF2
ZW4ndCB0aG91Z2h0CisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaXQgdmVyeSBoYXJkLiBBbnl3
YXksIHRoaXMgY2FzZSBpcyBub3QgY29tbW9uOiByb3RhdGVzIGludm9sdmluZyBtZW1vcnkKKyAg
ICAgICAgICAgICAgICAvLyBkb24ndCBhcmlzZSBmb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGV5
IHdpbGwgb25seSBoYXBwZW4gZm9yIHJvdGF0ZXMgaW4gdXNlciBjb2RlCisgICAgICAgICAgICAg
ICAgLy8gaWYgc29tZSBvZiB0aGUgdmFyaWFibGVzIGdldCBzcGlsbGVkLiBJdCdzIGhhcmQgdG8g
aW1hZ2luZSBhIHByb2dyYW0gdGhhdCByb3RhdGVzCisgICAgICAgICAgICAgICAgLy8gZGF0YSBh
cm91bmQgaW4gdmFyaWFibGVzIHdoaWxlIGFsc28gZG9pbmcgYSBjb21iaW5hdGlvbiBvZiB1aW50
MzItPnVpbnQ2NCBhbmQKKyAgICAgICAgICAgICAgICAvLyBpbnQ2NC0+aW50MzIgY2FzdHMuCisg
ICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKQorICAg
ICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGg7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYXNJbmRleCkKKyAgICAgICAgICAgICAg
ICBjYW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OkluZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
QXJnIGxlZnQgPSByb3RhdGUubG9vcFtpXS5zcmMoKTsKKyAgICAgICAgICAgICAgICBBcmcgcmln
aHQgPSByb3RhdGUubG9vcFtpICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGVm
dC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJlIHJh
cmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEg
YmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1
ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0
U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwg
bGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qo
c3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRjaCwg
bGVmdCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7
CisgICAgICAgICAgICAgICAgaWYgKHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGgpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cGFpci53aWR0aCgpID09IEFyZzo6V2lkdGgzMik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3dhcFdpZHRoID09IEFyZzo6V2lkdGg2NCk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE5lZWQg
dG8gZG8gYW4gZXh0cmEgemVybyBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChJbnN0KE1vdmUzMiwgb3JpZ2luLCBwYWlyLmRzdCgpLCBwYWlyLmRzdCgpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdHJlYXQg
dGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5hdGlvbiAo
aS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJzdC4gVGhl
biB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3RhdGUKKyAg
ICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBkZXN0aW5h
dGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAgICAgLy8g
ZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZlIGEgcm90
YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUgcmVnaXN0
ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVTY3JhdGNo
KAorICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90
YXRlLmxvb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLnVzZXNU
bXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKS51c2VzVG1wKHRtcCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBtb3N0IGxpa2VseSB1c2Ugb2Ygc2Ny
YXRjaCByZWdpc3RlcnMuCisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3Jh
dGNoKTsKKworICAgICAgICAgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGZvdW5kIGEgc2NyYXRjaCBy
ZWdpc3Rlci4gV2hlbiB0aGlzIGhhcHBlbnMsIHdlIGNhbiBqdXN0IHVzZSB0aGUgc3BpbGwKKyAg
ICAgICAgICAgIC8vIHNsb3QgZGlyZWN0bHkuCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2ZSA9
IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihy
b3RhdGUubG9vcC5sYXN0KCkuZHN0KCksIHJvdGF0ZVNhdmUsIHJvdGF0ZS5sb29wWzBdLndpZHRo
KCkpLCAxKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Auc2l6
ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRlLmxv
b3BbaV0sIDEpOworCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoCisgICAgICAgICAgICAg
ICAgU2h1ZmZsZVBhaXIocm90YXRlU2F2ZSwgcm90YXRlLmxvb3BbMF0uZHN0KCksIHJvdGF0ZS5s
b29wWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAgICAg
ICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgpKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNo
dWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0
Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmln
aW4pCit7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBncFBhaXJzOworICAgIFZlY3RvcjxTaHVm
ZmxlUGFpcj4gZnBQYWlyczsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFp
cnMpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlz
TWVtb3J5KCkgJiYgcGFpci53aWR0aCgpID4gQXJnOjpwb2ludGVyV2lkdGgoKSkgeworICAgICAg
ICAgICAgLy8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZv
cm0gYXJlIGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMu
YXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuc3JjKCkuaXNHUCgpICYmIHBh
aXIuZHN0KCkuaXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWly
cyBnZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQg
d2UKKyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BS
cywgZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJz
LmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVu
ZChwYWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5h
cHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQLCBvcmln
aW4pKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGZwUGFpcnMsIGZwU2Ny
YXRjaCwgQXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNk
ZWZpbmUgQWlyRW1pdFNodWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxl
UGFpcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNy
YywgY29uc3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMoc3Jj
KQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9Cisg
ICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhl
IHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNo
b29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlj
a3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3Zl
RmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6V2lk
dGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBv
ZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNo
b3VsZCBwYXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNj
cmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkn
cmUKKy8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBo
YXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0
IHRoZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUg
c2NyYXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtl
IGxvb2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFs
d2F5cyBzYWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVw
bGFjaW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3
ZWQgYXMgYW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1p
emF0aW9uLiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdp
c3RlcnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQg
YXJlIG5vdCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90
IGJlaW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5v
dAorLy8gICBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIHNvdXJjZXMgb2YgdGhlIHNodWZmbGUuCisv
LworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdoZW4geW91
IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3RoCisvLyAgIGFzIHNv
dXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFudGVlZCBub3QgdG8g
bmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2FwIGluc3RydWN0aW9u
IGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBoYXZlIGFueSBtZW1v
cnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9u
IG9mCisvLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2IHdoaWxlIEZQIG5l
dmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5nIG1lbW9yeSBsb2NhdGlvbnMgYXMg
c2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSByZWdpc3RlciBhbGxv
Y2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2UgZW1pdFNodWZmbGUo
KSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9lcyBuZWVkCisvLyAg
IHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2FtZW50IGlzIHRvIGVu
c3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKKy8vICAgcmVnaXN0ZXIgYWxs
b2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZmbGUgaW5zdHJ1Y3Rp
b24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZsaW5ncyB1bnRpbCBhZnRlciByZWdh
bGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkgcGFpcnMgYXJlIG5v
dCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5b3Ugd2FudAorLy8g
ICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBtYWtpbmcgc3VyZSB0
aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KKy8vICAgZ2V0IGFjY2Vw
dGFibGUgcGVyZm9ybWFuY2UuCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiwgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2gsIEFyZzo6VHlwZSwgVmFs
dWUqIG9yaWdpbik7CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxlIHRoYXQgaW52b2x2ZXMgYW55IG51
bWJlciBvZiB0eXBlcy4gUGFzcyBzY3JhdGNoIHJlZ2lzdGVycyBvciBtZW1vcnkgbG9jYXRpb25z
CisvLyBmb3IgZWFjaCB0eXBlIGFjY29yZGluZyB0byB0aGUgcnVsZXMgYWJvdmUuCitWZWN0b3I8
SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQYWlyPiYsCisgICAg
Y29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJn
LCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyRW1pdFNodWZmbGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsOCBAQAog
I2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oIgor
I2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorI2luY2x1ZGUgIkFpckxvd2VyTWFj
cm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNpbmNsdWRlICJBaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmgiCkBAIC02
NSw2ICs2Nyw4IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICAg
ICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CiAKKyAgICBsb3dlck1hY3Jvcyhjb2RlKTsKKwogICAg
IC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1h
dGlvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CkBAIC04MCw2ICs4NCw4
IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29kZSkKICAgICBlbHNlCiAgICAg
ICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwogCisgICAgbG93ZXJBZnRlclJl
Z0FsbG9jKGNvZGUpOworCiAgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUg
YW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNv
CiAgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2Un
cmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCiAgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lv
biAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsMTEgKzM4LDExIEBAIGNsYXNzIENvZGU7CiAKIC8vIFRoaXMgdGFr
ZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQg
b3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQogLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9l
cyBib3RoIG9mIHRob3NlIHRoaW5ncy4KLXZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYp
OworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CiAK
IC8vIFRoaXMgZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbiBDQ2FsbEhlbHBlcnMg
aW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcwogLy8gaW4gdGhlIHN1
cHBsaWVkIGNvZGUgYXMgaXQgaXMgZ2VuZXJhdGluZy4KLXZvaWQgZ2VuZXJhdGUoQ29kZSYsIEND
YWxsSGVscGVycyYpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0Nh
bGxIZWxwZXJzJik7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAko
cmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDE4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAordm9pZCBJbnNlcnRpb25TZXQ6
Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgY29uc3QgVmVjdG9yPEluc3Q+JiBpbnN0cykKK3sK
KyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChp
bmRleCwgaW5zdCk7Cit9CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3Qg
aW5kZXgsIFZlY3RvcjxJbnN0PiYmIGluc3RzKQoreworICAgIGZvciAoSW5zdCYgaW5zdCA6IGlu
c3RzKQorICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBXVEZNb3ZlKGluc3QpKTsKK30KKwogdm9p
ZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxl
U29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSkpOwogICAgIH0KKworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBW
ZWN0b3I8SW5zdD4mKTsKKyAgICB2b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9y
PEluc3Q+JiYpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAg
ICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtODUsNiArODUsMTUgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBvcGNvZGUgIT0gTm9wIHx8IGFyZ3Muc2l6ZSgp
OyB9CiAKKyAgICB2b2lkIGFwcGVuZCgpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgYXBwZW5k
KGFyZ3VtZW50cy4uLik7CisgICAgfQorCiAgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3Jz
IGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3Ig
dGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlm
IHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCiAgICAg
Ly8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5j
bHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
I2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2Vy
QWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShj
b2RlLCAibG93ZXJBZnRlclJlZ0FsbG9jIik7CisKKyAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3Rl
clNldD4gdXNlZFJlZ2lzdGVyczsKKworICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIFJlZ0xpdmVuZXNz
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworCisgICAgICAgICAgICBpZiAoaW5zdC5vcGNv
ZGUgPT0gU2h1ZmZsZSB8fCBpbnN0Lm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiBsb2NhbENhbGMubGl2ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBzZXQuc2V0KHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChzZXQubnVt
YmVyT2ZTZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgm
aW5zdCwgc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0g
WyZdIChSZWdpc3RlclNldCBzZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywg
Mj4geworICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygK
KyAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICBBcmc6OmJ5dGVzKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8g
Tm93IHRyYW5zZm9ybSB0aGUgY29kZS4KKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0
SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBT
aHVmZmxlOiB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVy
cy5nZXQoJmluc3QpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXpl
KCk7IGkgKz0gMykgeworICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW2kg
KyAwXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGluc3QuYXJnc1tpICsgMV07Cisg
ICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndp
ZHRoKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZWQgcmVnaXN0ZXIgc2V0IGNv
bnRhaW5zIHRoaW5ncyBsaXZlIGFmdGVyIHRoZSBzaHVmZmxlLiBCdXQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZW1pdFNodWZmbGUoKSB3YW50cyBhIHNjcmF0Y2ggcmVnaXN0ZXIgdGhhdCBpcyBu
b3QganVzdCBkZWFkIGJ1dCBhbHNvIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIGlu
dGVyZmVyZSB3aXRoIGVpdGhlciBzb3VyY2VzIG9yIGRlc3RpbmF0aW9ucy4KKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBleGNsdWRlUmVnaXN0ZXJzID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICBzcmMuZm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAg
ICAgICAgICAgICAgICAgIGRzdC5mb3JFYWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVm
ZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFy
Zzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBn
ZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUo
cGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAg
ICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1NhdmUgPSB1c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7
CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmVVc2VkID0gcmVnc1RvU2F2ZTsKKyAg
ICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdD
b252ZW50aW9uKGNvZGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0Nh
bGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEgOiBpKSA6IGkg
XTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hp
bGQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFp
cihzcmMsIGRzdCwgd2lkdGgpKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGV4Y2x1ZGVS
ZWdpc3RlcnMgPSBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldCh0bXAu
cmVnKCkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBzcmMu
Zm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgICAgIGRz
dC5mb3JFYWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRj
aGVzKHByZVVzZWQsIEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAy
PiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpGUCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gQWxzbyBuZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVn
aXN0ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1bHQKKyAgICAgICAgICAg
ICAgICAvLyByZWdpc3Rlci4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgICAgICAgICByZWdzVG9TYXZlLmNsZWFyKHJlc3VsdC5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7CisgICAgICAgICAgICAgICAgcmVnc1Rv
U2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgg
PSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgpLCBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWly
KGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90KTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJz
LCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKworICAgICAgICAgICAgICAg
IGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlvbnMpOworCisg
ICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVn
aXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2
ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBB
cmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFja1Nsb3RzW3N0YWNrU2xvdEluZGV4KytdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKEFyZzo6c3Rh
Y2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIFNodWZmbGVQ
YWlyIHBhaXIocmVzdWx0LCBpbnN0LmFyZ3NbMV0sIEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUt
PnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQocGFpcik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICAgICAgcmVnc1RvU2F2ZS5zZXQocmVzdWx0LnJlZygpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJn
OjpHUCk7CisgICAgICAgICAgICAgICAgZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1Nh
dmUsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgZW1p
dFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworCisgICAgICAgIGJsb2NrLT5pbnN0
cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChJbnN0JiBpbnN0KSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAgICAgICB9KTsKKyAg
ICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJBZnRlclJlZ0FsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisjZGVmaW5lIEFpckxvd2Vy
QWZ0ZXJSZWdBbGxvY19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMg
bG93ZXJzIFNodWZmbGUgYW5kIENvbGRDQ2FsbCBpbnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMg
ZGVzaWduZWQgdG8gYmUgcnVuIGFmdGVyIHJlZ2lzdGVyCisvLyBhbGxvY2F0aW9uLgorCit2b2lk
IGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlckFm
dGVyUmVnQWxsb2NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNDQ2Fs
bFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2VyTWFjcm9zKENvZGUm
IGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlck1hY3JvcyIp
OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRj
aCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgICAg
ICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOwor
CisgICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxs
aW5nQ29udmVudGlvbihjb2RlLCB2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBJbnN0IHNodWZm
bGVBcmd1bWVudHMoU2h1ZmZsZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tvZmZzZXQg
KyBpXSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQo
ZGVzdGluYXRpb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5h
cmdzLmFwcGVuZChBcmc6OndpZHRoQXJnKEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUo
KSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydEluc3QoaW5zdEluZGV4LCBXVEZNb3ZlKHNodWZmbGVBcmd1bWVudHMpKTsKKworICAgICAg
ICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgd2UncmUgdXNpbmcgb3VyIG9yaWdpbmFsIGNhbGxl
ZSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbnNbMF0gPSBpbnN0LmFyZ3Nb
MF07CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHdoZXJlIHRoZSBvcmlnaW5hbCBpbnN0cnVj
dGlvbiBwdXQgaXRzIHJlc3VsdC4KKyAgICAgICAgICAgICAgICBBcmcgcmVzdWx0RHN0ID0gdmFs
dWUtPnR5cGUoKSA9PSBWb2lkID8gQXJnKCkgOiBpbnN0LmFyZ3NbMV07CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwgaW5zdC5vcmlnaW4s
IGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1
bHQodmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEZsb2F0OgorICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmVGbG9hdCwgdmFsdWUsIHJlc3VsdCwg
cmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5z
dEluZGV4ICsgMSwgTW92ZURvdWJsZSwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlMzIs
IHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZSwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxvd2VyTWFjcm9zX2gKKyNkZWZpbmUgQWly
TG93ZXJNYWNyb3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBBaXIgaGFz
IHNvbWUgb3Bjb2RlcyB0aGF0IGFyZSB2ZXJ5IGhpZ2gtbGV2ZWwgYW5kIGFyZSBtZWFudCB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiBsb3ctbGV2ZWwKKy8vIGtub3dsZWRnZSBpbiB0aGUgQjMtPkFp
ciBsb3dlcmluZy4gVGhlIGN1cnJlbnQgZXhhbXBsZSBpcyBDQ2FsbC4KKwordm9pZCBsb3dlck1h
Y3JvcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlck1hY3Jvc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2
aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtNDA3LDYgKzQwNywxNCBAQCBNb3ZlIFU6RzpQdHIs
IEQ6RzpQdHIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCiAgICAgeDg2OiBJbW0sIEFkZHIg
YXMgc3RvcmVQdHIKIAoreDg2OiBTd2FwMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgVG1w
CisgICAgVG1wLCBBZGRyCisKK3g4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBU
bXAsIFRtcAorICAgIFRtcCwgQWRkcgorCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1w
LCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02
NzIsNyArNjgwLDE5IEBAIFJldERvdWJsZSBVOkY6NjQgL3JldHVybgogCiBPb3BzIC90ZXJtaW5h
bAogCisjIEEgU2h1ZmZsZSBpcyBhIG11bHRpLXNvdXJjZSwgbXVsdGktZGVzdGluYXRpb24gbW92
ZS4gSXQgc2ltdWx0YW5lb3VzbHkgZG9lcyBtdWx0aXBsZSBtb3ZlcyBhdCBvbmNlLgorIyBUaGUg
bW92ZXMgYXJlIHNwZWNpZmllZCBhcyB0cmlwbGV0cyBvZiBzcmMsIGRzdCwgYW5kIHdpZHRoLiBG
b3IgZXhhbXBsZSB5b3UgY2FuIHJlcXVlc3QgYSBzd2FwIHRoaXMKKyMgd2F5OgorIyAgICAgU2h1
ZmZsZSAldG1wMSwgJXRtcDIsIDY0LCAldG1wMiwgJXRtcDEsIDY0CitjdXN0b20gU2h1ZmZsZQor
CiAjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlz
IGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKICMgd2hpY2ggbXVz
dCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KIGN1c3RvbSBQYXRjaAogCisjIEluc3RydWN0aW9ucyB1
c2VkIGZvciBsb3dlcmluZyBDIGNhbGxzLiBUaGVzZSBkb24ndCBtYWtlIGl0IHRvIEFpciBnZW5l
cmF0aW9uLiBUaGV5IGdldCBsb3dlcmVkIHRvCisjIHNvbWV0aGluZyBlbHNlIGZpcnN0LiBUaGUg
b3JpZ2luIFZhbHVlIG11c3QgYmUgYSBDQ2FsbFZhbHVlLgorY3VzdG9tIENDYWxsCitjdXN0b20g
Q29sZENDYWxsCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUy
LDcgKzUyLDcgQEAgY29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVyVHlwZQogICAg
IHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigp
OwogfQogCi1jb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUp
OworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3Jk
ZXIoQXJnOjpUeXBlKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTcwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0
aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisKKy8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RPX0VY
SVQsIG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgorc3RhdGljIGJvb2wgaGlkZGVu
VHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KKworc3RhdGlj
IHZvaWQgdXNhZ2UoKQoreworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0YjMgWzxmaWx0ZXI+XVxu
Iik7CisgICAgaWYgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAgICAg
ICAgZXhpdCgxKTsKK30KKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOworCituYW1lc3BhY2UgeworCitTdGF0
aWNMb2NrIGNyYXNoTG9jazsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVz
ZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGlmICghISh4KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNyYXNoTG9jay5s
b2NrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLCAjeCk7IFwKKyAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChm
YWxzZSkKKworVk0qIHZtOworCitzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21w
aWxlKEIzOjpQcm9jZWR1cmUmIHByb2MpCit7CisgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJv
Yy5jb2RlKCkpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2Mu
Y29kZSgpLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIpKSwg
cHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVCBpbnZva2UoY29uc3QgQjM6OkNvbXBpbGF0aW9uJiBjb2Rl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRz
Li4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBpbGVB
bmRSdW4oQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
eworICAgIHJldHVybiBpbnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4u
KTsKK30KKwordm9pZCB0ZXN0U2ltcGxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7Cisg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
NDIpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0so
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKworLy8gVXNlIHRoaXMgdG8gcHV0
IGEgY29uc3RhbnQgaW50byBhIHJlZ2lzdGVyIHdpdGhvdXQgQWlyIGJlaW5nIGFibGUgdG8gc2Vl
IHRoZSBjb25zdGFudC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGxvYWRDb25zdGFudElt
cGwoQmFzaWNCbG9jayogYmxvY2ssIFQgdmFsdWUsIEIzOjpBaXI6Ok9wY29kZSBtb3ZlLCBUbXAg
dG1wLCBUbXAgc2NyYXRjaCkKK3sKKyAgICBzdGF0aWMgU3RhdGljTG9jayBsb2NrOworICAgIHN0
YXRpYyBzdGQ6Om1hcDxULCBUKj4qIG1hcDsgLy8gSSdtIG5vdCBtZXNzaW5nIHdpdGggSGFzaE1h
cCdzIHByb2JsZW1zIHdpdGggaW50ZWdlcnMuCisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihsb2Nr
KTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgbWFwID0gbmV3IHN0ZDo6bWFwPFQsIFQqPigpOwor
CisgICAgaWYgKCFtYXAtPmNvdW50KHZhbHVlKSkKKyAgICAgICAgKCptYXApW3ZhbHVlXSA9IG5l
dyBUKHZhbHVlKTsKKworICAgIFQqIHB0ciA9ICgqbWFwKVt2YWx1ZV07CisgICAgYmxvY2stPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRy
KSksIHNjcmF0Y2gpOworICAgIGJsb2NrLT5hcHBlbmQobW92ZSwgbnVsbHB0ciwgQXJnOjphZGRy
KHNjcmF0Y2gpLCB0bXApOworfQorCit2b2lkIGxvYWRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9j
aywgaW50cHRyX3QgdmFsdWUsIFRtcCB0bXApCit7CisgICAgbG9hZENvbnN0YW50SW1wbDxpbnRw
dHJfdD4oYmxvY2ssIHZhbHVlLCBNb3ZlLCB0bXAsIHRtcCk7Cit9CisKK3ZvaWQgbG9hZERvdWJs
ZUNvbnN0YW50KEJhc2ljQmxvY2sqIGJsb2NrLCBkb3VibGUgdmFsdWUsIFRtcCB0bXAsIFRtcCBz
Y3JhdGNoKQoreworICAgIGxvYWRDb25zdGFudEltcGw8ZG91YmxlPihibG9jaywgdmFsdWUsIE1v
dmVEb3VibGUsIHRtcCwgc2NyYXRjaCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTd2Fw
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAz
LCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQ
UkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyks
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQpOworICAgIENIRUNLKHRoaW5n
c1szXSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRt
cChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRo
aW5nc1s1XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFy
Zzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAor
ICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdz
WzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3Nb
Ml0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0
XSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEs
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4
LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6
cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6
ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAx
KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7
CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdTaGlmdEJhY2t3YXJkcygpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEs
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4
LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6
ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAx
KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7
CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJv
b3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiks
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5n
c1szXSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpCit7Cisg
ICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQ
UkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpy
ZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUu
bmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFz
ZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFz
ZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKwor
ICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSygh
Y29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsK
KyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUJyb2FkY2Fz
dEFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0g
cHJvYy5jb2RlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IHJlZ3NJblByaW9y
aXR5T3JkZXIoQXJnOjpHUCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgzNSksIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIHVuc2lnbmVkIGNvdW50ID0gMTsKKyAgICBmb3IgKFJlZyBy
ZWcgOiByZWdzKSB7CisgICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1QwKSkKKyAg
ICAgICAgICAgIGxvYWRDb25zdGFudChyb290LCBjb3VudCsrLCBUbXAocmVnKSk7CisgICAgfQor
ICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0cik7CisgICAg
Zm9yIChSZWcgcmVnIDogcmVncykgeworICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpy
ZWdUMCkpCisgICAgICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAoR1BSSW5mbzo6cmVnVDApLCBU
bXAocmVnKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICB9CisKKyAgICBTdGFj
a1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNp
emUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3Qp
KSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAg
IFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSks
IGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwg
aSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIo
YmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKwor
ICAgIGZvciAoaW50MzJfdCB0aGluZyA6IHRoaW5ncykKKyAgICAgICAgQ0hFQ0sodGhpbmcgPT0g
MzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRt
cChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdU
NiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsK
KworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJn
OjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDQpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0QmFja3dhcmQoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikp
OworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290
LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1w
KEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwor
CisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6
OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6
YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0
aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKwor
ICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAg
IENIRUNLKHRoaW5nc1s2XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisK
K3ZvaWQgdGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKCkKK3sKKyAgICAvLyBOT1RF
OiBUaGlzIHRlc3Qgd2FzIG15IG9yaWdpbmFsIGF0dGVtcHQgYXQgVHJlZVNoaWZ0QmFja3dhcmQg
YnV0IG1pc3Rha2VzIHdlcmUgbWFkZS4gU28sIHRoaXMKKyAgICAvLyBlbmRzIHVwIGJlaW5nIGp1
c3QgYSB3ZWlyZCB0ZXN0LiBCdXQgd2VpcmQgdGVzdHMgYXJlIHVzZWZ1bCwgc28gSSBrZXB0IGl0
LgorICAgIAorICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5j
b2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxv
YWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAo
R1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86
OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkp
OworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwg
QXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gOCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDgpOworICAgIENI
RUNLKHRoaW5nc1szXSA9PSA3KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNyk7CisgICAgQ0hF
Q0sodGhpbmdzWzVdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKKyAgICBDSEVD
Syh0aGluZ3NbN10gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygp
Cit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywg
VG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVn
VDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7Cisg
ICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6
ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAx
KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMSk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKCkKK3sKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNC
bG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJ
bmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQo
CisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisg
ICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQ
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRk
cihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRk
cihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
Mik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAy
KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3Rh
dGVXaXRoTG9uZ0ZyaW5nZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1
LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSks
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzZdOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJh
c2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJh
c2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3Ms
IDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
MV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1sz
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVd
ID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlTXVsdGlwbGVSb3RhdGVzKCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRt
cChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAg
IGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5h
cHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAor
ICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdz
WzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3Nb
Ml0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s0
XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZm
bGVTaGlmdEFuZFJvdGF0ZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1
LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSks
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3
VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwg
MCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwg
MyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1
KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Cisg
ICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRo
aW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNCk7CisgICAgQ0hFQ0sodGhp
bmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVNoaWZ0QWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0g
cmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAzNSArIGksIFRtcChyZWdzW2ldKSk7
CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1
ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMikpOworCisgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Ns
b3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2Nr
ZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAg
ICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3Rh
Y2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOworCisgICAgVmVjdG9yPGludDMyX3Q+IHRo
aW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDAp
LCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNv
bXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzUpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBD
SEVDSyh0aGluZ3NbaV0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAtIDEpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlUm90YXRlQWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxS
ZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAzNSArIGksIFRt
cChyZWdzW2ldKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBu
dWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
KyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdz
Lmxhc3QoKSksIFRtcChyZWdzWzBdKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKwor
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAq
IHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2
Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFj
ayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
cmVncy5zaXplKCkpIC0gMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSAzNSArIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGkpIC0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTd2FwNjQoKQorewor
ICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qx
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQp
KTsKKworICAgIGludDY0X3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNp
emVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFk
ZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxs
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hF
Q0sodGhpbmdzWzJdID09IDQwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sz
XSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNo
aWZ0NjQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJv
Yy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQ
UkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAw
bGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAw
MDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1s1XTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjph
ZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2Yo
aW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBs
bCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQwMDAw
MDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU3dhcE1peGVkV2lkdGgoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAw
MGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNo
dWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
NjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgw
KSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0
aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAw
MGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAg
Q0hFQ0sodGhpbmdzWzJdID09IDQwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5n
c1szXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMzAwMDAwMDAwMDAwMDAwMDBsbCkpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisg
ICAgaW50NjRfdCB0aGluZ3NbNV07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQ
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGlu
dDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNl
LCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCks
IEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAg
IAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhp
bmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAy
MDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMzAwMDAwMDAwMDAw
MDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOwor
ICAgIENIRUNLKHRoaW5nc1s0XSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oNDAwMDAwMDAwMDAw
MDAwMDBsbCkpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnkoKQoreworICAgIEIz
OjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBp
bnQzMl90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAz
NjsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJv
b3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihp
bnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6
ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMy
X3QgdGhpbmdzWzJdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Cisg
ICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKG1l
bW9yeVswXSA9PSAzNSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5TG9uZygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVtb3J5WzJdOwor
ICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSks
IFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMp
LCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAg
KiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qz
KSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKwor
ICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMSAqIHNpemVvZihpbnQzMl90
KSksIFRtcChHUFJJbmZvOjpyZWdUMiksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1szXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3
VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwg
MCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Cisg
ICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRo
aW5nc1syXSA9PSAzNik7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIpOworICAgIENIRUNLKG1l
bW9yeVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3Mo
KQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2Rl
KCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsKKyAgICBt
ZW1vcnlbMV0gPSAzNjsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9y
ZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgaSArIDEsIFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0
JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAg
ICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qw
KSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAw
ICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdU
MCksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisK
KyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50MzJf
dCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdz
LnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZTMyLCBudWxscHRyLCBUbXAocmVn
c1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAzNik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJl
Z3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxp
bnQzMl90PihpKSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDEpOworICAgIENIRUNLKG1lbW9y
eVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgp
Cit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAw
MDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxS
ZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3Zl
Rmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBs
bCwgVG1wKHJlZ3NbaV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUg
PSByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAg
ICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6
ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAg
ICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2Yo
aW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNp
emVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChy
ZWdzWzFdKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxl
LmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSk7CisKKyAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2
NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290
LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgfQor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDBsbCk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzFdID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0g
PT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNL
KG1lbW9yeVswXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAz
NTAwMDAwMDAwMDAwMGxsKTsKK30KKworaW50NjRfdCBjb21iaW5lSGlMbyhpbnQ2NF90IGhpZ2gs
IGludDY0X3QgbG93KQoreworICAgIHVuaW9uIHsKKyAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgaW50MzJfdCBoYWx2ZXNbMl07CisgICAgfSB1OworICAgIHUudmFsdWUgPSBoaWdoOwor
ICAgIHUuaGFsdmVzWzBdID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obG93KTsKKyAgICByZXR1cm4g
dS52YWx1ZTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnc01peGVkV2lk
dGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5j
b2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAw
MDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBWZWN0
b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICByZWdzLnJl
bW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAw
MDAwbGwsIFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVm
ZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAK
KyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAq
IHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6
ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEg
KiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAg
ICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBU
bXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICBz
aHVmZmxlLmFwcGVuZCgKKyAgICAgICAgICAgIFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ld
KSwKKyAgICAgICAgICAgIChpICYgMSkgPyBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikgOiBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworICAgIH0KKworICAgIFZlY3RvcjxpbnQ2NF90
PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAgIE1vdmUsIG51bGxw
dHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXpl
b2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
Q0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0g
PT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KDM2MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBp
IDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICBpbnQ2NF90IHZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGw7CisgICAgICAgIENIRUNLKHRoaW5nc1tp
XSA9PSAoKGkgJiAxKSA/IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgOiB2YWx1ZSkpOwor
ICAgIH0KKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gY29tYmluZUhpTG8oMzUwMDAwMDAwMDAwMDBs
bCwgMTAwMDAwMDAwMDAwMGxsKSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAw
MDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5KCkKK3sKKyAgICBCMzo6
UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50
MzJfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKFRt
cChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAx
ICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwKKyAgICAgICAgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzJdOworICAgIFRt
cCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2Up
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzYpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMik7CisgICAg
Q0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9y
eTY0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAw
MDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MTAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMjAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpy
ZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAg
ICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSks
CisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAg
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0
aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxMDAwMDAwMDAw
MDAwbGwpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyMDAwMDAwMDAwMDAwbGwpOworICAgIENI
RUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVJvdGF0ZU1lbW9yeU1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAg
ICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAw
MDAwMDAwbGw7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVt
b3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAw
ICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQp
LAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBz
aXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwg
MSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSks
IFRtcChHUFJJbmZvOjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0
KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1syXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzYwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDAwMDAwMDAwMDAwbGwpKTsKKyAgICBD
SEVDSyhtZW1vcnlbMF0gPT0gMjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0g
PT0gY29tYmluZUhpTG8oMzYwMDAwMDAwMDAwMDBsbCwgMzUwMDAwMDAwMDAwMDBsbCkpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnczY0KCkKK3sKKyAgICBCMzo6UHJv
Y2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRf
dCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1v
cnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJ
blByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5m
bzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxv
YWRDb25zdGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgK
KyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBd
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAor
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAg
ICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgcmVncy5sYXN0KCksIHJl
Z3NbMF0sIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1w
KHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkp
OworCisgICAgVmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAor
ICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWdzLnNpemUo
KSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAzNjAwMDAwMDAw
MDAwMGxsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
KyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAw
MDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsK
KyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0X3Qg
bWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVtb3J5
WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Q
cmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86
OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0pKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoCisg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1swXSks
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAgICAg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIHJlZ3MubGFzdCgpLCByZWdz
WzBdLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChy
ZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsK
KworICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0
PGludDY0X3Q+KHJlZ3Muc2l6ZSgpKSAqIDEwMDAwMDAwMDAwMDBsbCkpOworICAgIENIRUNLKHRo
aW5nc1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMzYwMDAwMDAwMDAwMDBsbCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVD
Syh0aGluZ3NbaV0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwp
OworICAgIENIRUNLKG1lbW9yeVswXSA9PSBjb21iaW5lSGlMbygzNTAwMDAwMDAwMDAwMGxsLCAx
MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBs
bCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTd2FwRG91YmxlKCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwg
MSwgVG1wKEZQUkluZm86OmZwUmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2Fk
RG91YmxlQ29uc3RhbnQocm9vdCwgMiwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBUbXAoR1BSSW5m
bzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMywgVG1wKEZQUkluZm86
OmZwUmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQo
cm9vdCwgNCwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChG
UFJJbmZvOjpmcFJlZ1QyKSwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGg2NCksCisgICAgICAgIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEZQUkluZm86
OmZwUmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZG91YmxlIHRo
aW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwg
VG1wKEZQUkluZm86OmZwUmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpm
cFJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6
YWRkcihiYXNlLCAyICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURv
dWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENI
RUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNCk7CisgICAgQ0hF
Q0sodGhpbmdzWzNdID09IDMpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnREb3VibGUoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWREb3Vi
bGVDb25zdGFudChyb290LCAxLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCksIFRtcChHUFJJbmZvOjpy
ZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCAyLCBUbXAoRlBSSW5mbzo6ZnBS
ZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290
LCAzLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxv
YWREb3VibGVDb25zdGFudChyb290LCA0LCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKKyAgICAgICAgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBkb3VibGUgdGhpbmdzWzRdOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5m
bzo6ZnBSZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjphZGRyKGJhc2Us
IDIgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxs
cHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGRv
dWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gMyk7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBbJl0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGVzdDsg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVz
dCAiOiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKGNvbnN0IGNoYXIq
IGZpbHRlcikKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZW
TTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgRGVxdWU8UmVmUHRyPFNoYXJl
ZFRhc2s8dm9pZCgpPj4+IHRhc2tzOworCisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0
IGNoYXIqIHRlc3ROYW1lKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuICFmaWx0ZXIgfHwgISFz
dHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOworICAgIH07CisKKyAgICBSVU4odGVzdFNpbXBs
ZSgpKTsKKyAgICAKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTd2FwKCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKSk7CisgICAgUlVOKHRl
c3RTaHVmZmxlU2ltcGxlUm90YXRlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZUJyb2Fk
Y2FzdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZVRyZWVTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnRC
YWNrd2FyZCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKCkp
OworICAgIFJVTih0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVJvdGF0ZVdpdGhGcmluZ2UoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlV2l0aExv
bmdGcmluZ2UoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTXVsdGlwbGVSb3RhdGVzKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNoaWZ0QW5kUm90YXRlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNo
aWZ0QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVN3YXA2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1w
bGVTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVN3YXBNaXhlZFdpZHRoKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVT
aGlmdE1lbW9yeSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUxvbmcoKSk7Cisg
ICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVt
b3J5QWxsUmVnc01peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeTY0KCkpOworICAgIFJVTih0ZXN0
U2h1ZmZsZVJvdGF0ZU1lbW9yeU1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5QWxsUmVnczY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFs
bFJlZ3NNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVN3YXBEb3VibGUoKSk7Cisg
ICAgUlVOKHRlc3RTaHVmZmxlU2hpZnREb3VibGUoKSk7CisKKyAgICBpZiAodGFza3MuaXNFbXB0
eSgpKQorICAgICAgICB1c2FnZSgpOworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRo
cmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8g
MSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVh
ZHMuYXBwZW5kKAorICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0
ZXN0YjMgdGhyZWFkIiwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+PiB0YXNrOworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFz
a3MudGFrZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRhc2stPnJ1bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSkpOworICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQg
OiB0aHJlYWRzKQorICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAg
IGNyYXNoTG9jay5sb2NrKCk7Cit9CisKK30gLy8gYW5vbnltb2lzIG5hbWVzcGFjZQorCisjZWxz
ZSAvLyBFTkFCTEUoQjNfSklUKQorCitzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCit7Cisg
ICAgZGF0YUxvZygiQjMgSklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
Y29uc3QgY2hhciogZmlsdGVyID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGFyZ2MpIHsKKyAgICBj
YXNlIDE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmlsdGVyID0gYXJn
dlsxXTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJ1bihmaWx0ZXIpOworICAgIHJldHVybiAw
OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268982</attachid>
            <date>2016-01-14 11:42:00 -0800</date>
            <delta_ts>2016-01-14 12:52:52 -0800</delta_ts>
            <desc>passes everything</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>201763</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxNi0wMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBuZWVkcyBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbnN0cnVjdGlvbiBjYWxsZWQg
U2h1ZmZsZS4gU2h1ZmZsZSBhbGxvd3MgeW91IHRvIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0KKyAg
ICAgICAgbXVsdGlwbGUgbW92ZXMgdG8gcGVyZm9ybSBhcmJpdHJhcnkgcGVybXV0YXRpb25zIG92
ZXIgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuIFdlIGNhbGwgdGhlc2UKKyAgICAgICAgcm90YXRpb25z
LiBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSAic2hpZnRzIiwgbGlrZSAoYSA9PiBiLCBi
ID0+IGMpOiBhZnRlciB0aGUgc2hpZnQsCisgICAgICAgIGMgd2lsbCBoYXZlIGIncyBvbGQgdmFs
dWUsIGIgd2lsbCBoYXZlIGEncyBvbGQgdmFsdWUsIGFuZCBhIHdpbGwgYmUgdW5jaGFuZ2VkLiBT
aGlmdHMgY2FuCisgICAgICAgIHVzZSBpbW1lZGlhdGVzIGFzIHRoZWlyIHNvdXJjZS4KKworICAg
ICAgICBTaHVmZmxlIGlzIGFkZGVkIGFzIGEgY3VzdG9tIGluc3RydWN0aW9uLCBzaW5jZSBpdCBo
YXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBJdAorICAgICAgICB0YWtlcyBhbnkg
bnVtYmVyIG9mIHRyaXBsZXRzIG9mIGFyZ3VtZW50cywgd2hlcmUgZWFjaCB0cmlwbGV0IGRlc2Ny
aWJlcyBvbmUgbWFwcGluZyBvZiB0aGUKKyAgICAgICAgc2h1ZmZsZS4gRm9yIGV4YW1wbGUsIHRv
IHJlcHJlc2VudCAoYSA9PiBiLCBiID0+IGMpLCB3ZSBtaWdodCBzYXk6CisKKyAgICAgICAgICAg
IFNodWZmbGUgJWEsICViLCA2NCwgJWIsICVjLCA2NAorCisgICAgICAgIE5vdGUgdGhlICI2NCJz
LCB0aG9zZSBhcmUgd2lkdGggYXJndW1lbnRzIHRoYXQgZGVzY3JpYmUgaG93IG1hbnkgYml0cyBv
ZiB0aGUgcmVnaXN0ZXIgYXJlCisgICAgICAgIGJlaW5nIG1vdmVkLiBFYWNoIHRyaXBsZXQgaXMg
cmVmZXJyZWQgdG8gYXMgYSAic2h1ZmZsZSBwYWlyIi4gV2UgY2FsbCBpdCBhIHBhaXIgYmVjYXVz
ZSB0aGUKKyAgICAgICAgbW9zdCByZWxldmFudCBwYXJ0IG9mIGl0IGlzIHRoZSBwYWlyIG9mIHJl
Z2lzdGVycyBvciBtZW1yb3kgbG9jYXRpb25zIChpLmUuICVhLCAlYiBmb3JtIG9uZQorICAgICAg
ICBvZiB0aGUgcGFpcnMgaW4gdGhlIGV4YW1wbGUpLiBGb3IgR1AgYXJndW1lbnRzLCB0aGUgd2lk
dGggZm9sbG93cyBaRGVmIHNlbWFudGljcy4KKworICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSB3
aWxsIGJlIGFibGUgdG8gdXNlIFNodWZmbGUgZm9yIGEgbG90IG9mIHRoaW5ncy4gVGhpcyBwYXRj
aCBpcyBtb2Rlc3QgYWJvdXQKKyAgICAgICAgaG93IHRvIHVzZSBpdDoKKworICAgICAgICAtIEMg
Y2FsbGluZyBjb252ZW50aW9uIGFyZ3VtZW50IG1hcnNoYWxsaW5nLiBQcmV2aW91c2x5IHdlIHVz
ZWQgbW92ZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGF0J3MKKyAgICAgICAgICBwcm9ibGVtYXRpYyBz
aW5jZSBpdCBpbnRyb2R1Y2VzIGFydGlmaWNpYWwgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIGFy
Z3VtZW50IHJlZ2lzdGVycyBhbmQKKyAgICAgICAgICB0aGUgaW5wdXRzLiBVc2luZyBTaHVmZmxl
IHJlbW92ZXMgdGhhdCBpbnRlcmZlcmVuY2UuIFRoaXMgaGVscHMgYSBiaXQuCisKKyAgICAgICAg
LSBDb2xkIEMgY2FsbHMuIFRoaXMgaXMgd2hhdCByZWFsbHkgbW90aXZhdGVkIG1lIHRvIHdyaXRl
IHRoaXMgcGF0Y2guIElmIHdlIGhhdmUgYSBDIGNhbGwgb24KKyAgICAgICAgICBhIGNvbGQgcGF0
aCwgdGhlbiB3ZSB3YW50IGl0IHRvIGFwcGVhciB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGxp
a2UgaXQgZG9lc24ndCBjbG9iYmVyCisgICAgICAgICAgYW55IHJlZ2lzdGVycy4gT25seSBhZnRl
ciByZWdpc3RlciBhbGxvY2F0aW9uIHNob3VsZCB3ZSBoYW5kbGUgdGhlIGNsb2JiZXJpbmcgYnkg
c2ltcGx5CisgICAgICAgICAgc2F2aW5nIGFsbCBvZiB0aGUgbGl2ZSB2b2xhdGlsZSByZWdpc3Rl
cnMgdG8gdGhlIHN0YWNrLiBJZiB5b3UgaW1hZ2luZSB0aGUgc2F2aW5nIGFuZCB0aGUKKyAgICAg
ICAgICBhcmd1bWVudCBtYXJzaGFsbGluZywgeW91IGNhbiBzZWUgaG93IGJlZm9yZSB0aGUgY2Fs
bCwgd2Ugd2FudCB0byBoYXZlIGEgU2h1ZmZsZSB0aGF0IGRvZXMKKyAgICAgICAgICBib3RoIG9m
IHRob3NlIHRoaW5ncy4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGFyZ3VtZW50IG1hcnNoYWxsaW5n
IHdhcyBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgIHNhdmluZywgdGhlbiB3ZSdkIHN0aWxs
IGFwcGVhciB0byBjbG9iYmVyIGFyZ3VtZW50IHJlZ2lzdGVycy4gRG9pbmcgdGhlbSB0b2dldGhl
ciBhcyBvbmUKKyAgICAgICAgICBTaHVmZmxlIG1lYW5zIHRoYXQgdGhlIGNvbGQgY2FsbCBkb2Vz
bid0IGFwcGVhciB0byBldmVuIGNsb2JiZXIgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKworICAg
ICAgICBJJ20gc3RpbGwgdGVzdGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRo
aXMgY2hhbmdlLiBDdXJyZW50bHksIGl0IHBhc3NlcyB0ZXN0cy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6aXNYODZfNjQpOgorICAgICAgICAoSlNDOjppc0lPUyk6CisgICAgICAgIChK
U0M6Om9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Onplcm9FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OnN3YXAzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjptb3ZlQ29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3Jl
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN3YXA2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3Zl
NjRUb0RvdWJsZSk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1i
bGVyOjp4Y2hnbF9ybSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6eGNoZ3FfcnIpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdxX3JtKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjptb3ZsX3JyKToKKyAgICAgICAgKiBiMy9CM0NDYWxsVmFsdWUuaDoKKyAgICAg
ICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9u
OjpDb21waWxhdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6fkNvbXBpbGF0
aW9uKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgIChKU0M6OkIzOjpD
b21waWxhdGlvbjo6Y29kZSk6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6Y3JlYXRlU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJz
aGFsbENDYWxsQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzT3BhcXVlQnlwcm9k
dWN0cy5oOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6Y291bnQpOgorICAg
ICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNTdGFja01lbW9yeSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnVzZXNUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmNhblJl
cHJlc2VudCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNDb21wYXRpYmxlVHlwZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNX
YXJtVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjb29sZWQpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzRWFybHlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW1QdHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpZHRoQXJnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NvbWVJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQWRkcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1v
cnkpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUmVsQ29uZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc1dpZHRoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FsaXZlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5zdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmNvbXB1dGVDQ2Fs
bGluZ0NvbnZlbnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjQ2FsbFJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OmJ1aWxkQ0NhbGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJD
Q2FsbGluZ0NvbnZlbnRpb24uaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cHJvYyk6CisgICAgICAgICogYjMvYWlyL0Fp
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6
aXNWYWxpZEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6Z2VuZXJh
dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206OmdlbmVyYXRlKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBhdGNoQ3Vz
dG9tOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6YWRtaXRzU3RhY2spOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2xkQ0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjpmb3JFYWNoQXJnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZl
Y3RzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjplbWl0U2h1ZmZsZSk6CisgICAgICAgICogYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6U2h1ZmZsZVBhaXIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6c3JjKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmRzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZm
bGVQYWlyOjp3aWR0aCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAqIGIzL2Fp
ci9BaXJHZW5lcmF0ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9h
aXIvQWlySW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNl
dDo6aW5zZXJ0SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5z
ZXJ0KToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpJbnN0OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6YXBw
ZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICog
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJN
YWNyb3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL0FpclJlZ2lz
dGVyUHJpb3JpdHkuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRl
cik6CisgICAgICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGhpZGRl
blRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQpOgorICAgICAgICAodXNhZ2UpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aW52b2tl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OnRlc3RTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkQ29uc3Rh
bnRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG9hZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6bG9hZERvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaW1wbGVTd2FwKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNo
dWZmbGVTaW1wbGVTaGlmdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlTG9u
Z1NoaWZ0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVMb25nU2hpZnRCYWNr
d2FyZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjp0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6dGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OnRlc3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRl
c3RTaHVmZmxlU2hpZnRBbmRSb3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVNoaWZ0QWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlQWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlU3dh
cDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRoKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNZW1vcnlMb25nKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Y29tYmluZUhpTG8pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0
TWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVJvdGF0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5NjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1l
bW9yeU1peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0
ZU1lbW9yeUFsbFJlZ3M2NCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0
U2h1ZmZsZVN3YXBEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNo
aWZ0RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cnVuKToKKyAgICAgICAgKHJ1bik6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdENhbGxTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxSYXJlKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RDYWxsUmFyZUxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENhbGxTaW1wbGVQdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDEt
MTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtDTWFrZV0gRG8gbm90IHVzZSBMTFZNIHN0YXRpYyBsaWJyYXJpZXMgZm9yIEZUTCBKSVQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NDg1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOCArNzMsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWly
QXJnLmNwcAogICAgIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAogICAgIGIzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICBi
My9haXIvQWlyQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyQ3VzdG9tLmNwcAogICAgIGIzL2Fpci9B
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCiAg
ICAgYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAKICAgICBiMy9haXIvQWly
R2VuZXJhdGUuY3BwCiAgICAgYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKQEAgLTgyLDYgKzg1LDgg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlySW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJJbnN0LmNwcAogICAgIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAKKyAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAor
ICAgIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAogICAgIGIzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY2
MTgzNDcxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZF
Qzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2
QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00MDAs
NiArNDAxLDIxIEBACiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIx
Njg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhG
N0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhD
RjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3
MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
Q0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZl
bnRpb24uY3BwICovOyB9OworCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgg
Ki87IH07CisJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjIxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi87IH07CisJCTBGNjE4MzJDMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwICovOyB9OworCQkwRjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovOyB9OworCQkwRjYxODMy
RTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovOyB9OworCQkwRjYxODMyRjFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi87IH07CisJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwICovOyB9OworCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI4
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjYxODMzMzFD
NDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
LmggKi87IH07CisJCTBGNjE4MzM2MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzM0MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJMEY2
MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgfTsKKwkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRjYxODMzRDFDNDVGNjJBMDA3MjQ1MEIgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzNDQxQzQ1RjY2
MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICovOyB9OwogCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3
N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi87IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdC
YXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyB9OwogCQkw
RjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgfTsKQEAgLTIwNzgsNiArMjA5NCwxMyBAQAog
LyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSBzZWN0aW9uICovCisJCTBGNjE4MzQ2MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJ
CQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBv
YmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAw
RjYxODMzODFDNDVGNjJBMDA3MjQ1MEI7CisJCQlyZW1vdGVJbmZvID0gdGVzdGFpcjsKKwkJfTsK
IAkJMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9
IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9
IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1NDEs
NiArMjU2NCwyMCBAQAogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAv
KiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MTgzMjAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
Q3VzdG9tLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRW1pdFNodWZmbGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmg7IHBhdGgg
PSBiMy9haXIvQWlyRW1pdFNodWZmbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJMb3dlck1hY3Jvcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJN
YWNyb3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZUdlbmVy
YXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMzNTFDNDVGM0I2MDA3
MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWlyT3Bjb2RlVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
NDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RhaXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhaXIuY3BwOyBwYXRoID0gYjMv
YWlyL3Rlc3RhaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MDE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdCYXNpY0Jsb2NrLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM3MCw4ICszNDA3LDggQEAKIAkJNzAxM0NBOEEx
QjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSm9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMzU1ODdDMUM0MTg0
MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBNYXBQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90
b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hcFByb3RvdHlw
ZS5sdXQuaDsgcGF0aCA9IE1hcFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzAzNTU4N0YxQzQxODQ1ODAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5sdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2V0UHJvdG90eXBlLmx1dC5oOyBwYXRo
ID0gU2V0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1
NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcwMzU1ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8q
IEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQzMDQsNiArNDM0MSwxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAvKiBGcmFtZXdvcmtzICovID0gewor
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY2MTgzM0QxQzQ1
RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OwogCQkwRjkzMjc1MTFDMjBCQ0JBMDBDRjY1NjQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTQ0MDEsNiArNDQ0Nyw3IEBACiAJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0
IC8qIHRlc3RiMyAqLywKIAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4
cCAqLywKIAkJCQkwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCisJCQkJ
MEY2MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8sCiAJCQkpOwogCQkJbmFtZSA9
IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3OTEsMTMgKzQ4Mzgs
MTggQEAKIAkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
Ki8sCiAJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywK
IAkJCQkwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAor
CQkJCTBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
ICovLAorCQkJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaCAqLywKIAkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCAqLywKIAkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmggKi8sCiAJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAog
CQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEY2MTgz
MjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi8sCiAJCQkJMEYxMEYxQTIxQzQy
MEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovLAogCQkJCTBGNDU3MDM2MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJMEY0NTcwMzcxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCisJCQkJMEY2MTgzMjMxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKKwkJCQkwRjYxODMyNDFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBG
MDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJE
ODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8s
CiAJCQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAq
LywKQEAgLTQ4MTYsNiArNDg2OCwxMCBAQAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5
OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCiAJCQkJ
MjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMEY2MTgz
MjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCisJCQkJ
MEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovLAor
CQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8sCisJ
CQkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCiAJCQkJ
MjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovLAogCQkJCTBG
QjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovLAog
CQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAq
LywKQEAgLTQ4NDEsNiArNDg5Nyw3IEBACiAJCQkJMEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8q
IEFpclVzZUNvdW50cy5oICovLAogCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJW
YWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggKi8sCisJCQkJMEY2MTgzNDQxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICov
LAogCQkJKTsKIAkJCW5hbWUgPSBhaXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NTI5OCw2ICs1MzU1LDkgQEAKIAkJNjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQg
U291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovLAorCQkJCTBGNjE4MzM0
MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLywKKwkJCQkwRjYxODMz
NTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLywKIAkJCQk5OTZCNzMxNTFC
REEwNUFBMDAzMzFCODQgLyogQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMx
NjFCREEwNUFBMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCAqLywKIAkJ
CQk5OTZCNzMwNzFCRDlGQTJDMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCAqLywK
QEAgLTY4OTYsNiArNjk1Niw3IEBACiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFp
ckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAw
MDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1OCw2ICs3MDE5
LDcgQEAKIAkJCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMyRjFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTAsNiArNzIxMiw3IEBACiAJCQkJQTc3QTQyNDAxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzcz
MDhEMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNF
eGl0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAv
KiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzND
RDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNTQsNiArNzMx
Nyw3IEBACiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyog
REZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzNjFD
NDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM3MzA5MTFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtNzI3MCw2
ICs3MzM0LDcgQEAKIAkJCQkwRkMyMENCQTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEYyOUUwMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzIwQ0I2
MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjI0LDYgKzc2ODksNyBAQAogCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTQsNiArODA4MCw3
IEBACiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjE4MzMzMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtODA0Niw2ICs4MTEzLDIyIEBACiAv
KiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRp
dmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFp
ciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAwRjYxODMzRTFDNDVGNjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RhaXIiICovOworCQkJYnVpbGRQaGFzZXMgPSAo
CisJCQkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgz
M0IxQzQ1RjYyQTAwNzI0NTBCIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxl
cyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3Rh
aXI7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY2
MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRjkzMjc0RTFDMjBCQ0JBMDBD
RjY1NjQgLyogZHluYmVuY2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQli
dWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi87CkBA
IC04MjUzLDYgKzgzMzYsNyBAQAogCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi8sCiAJCQkJNUQ2QjJBNDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJ
CQkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzM4
MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KQEAgLTg0ODksNiArODU3MywxNCBAQAogLyogRW5kIFBCWFNoZWxs
U2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KKwkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8g
PSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjYxODM0NTFDNDVGNjYwMDA3MjQ1MEIg
LyogdGVzdGFpci5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NEYxQzIwQkNCQTAwQ0Y2NTY0
IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC04NjkzLDYgKzg3ODUsNyBAQAogCQkJCTUy
QjcxN0I1MUEwNTk3RTEwMDdBRjRGMyAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQkFERjU0MUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3Bh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMzAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckxvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTExMTI0NTE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTYyRTNENUYwMUI4RDBCNzMwMEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODc0MSw2ICs4ODM0LDcgQEAKIAkJCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyog
REZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyOTFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzMzhFMTIxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9k
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NTcsNiArODg1MSw3IEBACiAJCQkJQTc4QTk3
NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJDMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5
Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05MDY4LDYgKzkxNjMsNyBAQAogCQkJCUUzM0Y1MDg0MUI4NDM3QTAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0
MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTAzRkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJFMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMUQx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxMCw2ICs5MzA2LDcgQEAKIAkJCQkw
RjlENEMwQzFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkIxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNjIsNiArOTQ1OSwxMSBAQAogLyog
RW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0
RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhU
YXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJ
CXRhcmdldCA9IDBGNjE4MzM4MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovOworCQkJdGFy
Z2V0UHJveHkgPSAwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovOworCQl9OwogCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVw
ZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQg
PSAwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CkBAIC05NDczLDYgKzk1
NzUsNDIgQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0Yx
QzQ1RjYyQTAwNzI0NTBCIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMw
MEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50
cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBE
ZWJ1ZzsKKwkJfTsKKwkJMEY2MTgzNDAxQzQ1RjYyQTAwNzI0NTBCIC8qIFJlbGVhc2UgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVm
ZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29u
ZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRT
X2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRl
c3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGNjE4MzQxMUM0NUY2
MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRz
LnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFBy
b2ZpbGluZzsKKwkJfTsKKwkJMEY2MTgzNDIxQzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24g
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxl
LnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRM
RU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFN
RSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGOTMy
NzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC05OTAyLDYgKzEw
MDQwLDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjYxODMzRTFDNDVG
NjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RhaXIiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEY2MTgzM0YxQzQ1RjYyQTAwNzI0NTBCIC8qIERl
YnVnICovLAorCQkJCTBGNjE4MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovLAorCQkJ
CTBGNjE4MzQxMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY2MTgzNDIx
QzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKKwkJfTsKIAkJMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi8gPSB7CiAJCQlp
c2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUgYm9vbCBp
c1g4Nl82NCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lmIFBMQVRG
T1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKIGlubGluZSBib29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKCkKIHsK
ICAgICByZXR1cm4gaXNBUk12N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VBcmNoaXRl
Y3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkz
MihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNp
b24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1NSw2ICs2NTUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhp
cyk7CiAgICAgfQogCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNy
YywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDMxLDYgKzE0MzEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJl
dmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVl
KCk7CiAKLSAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0
czo6Zm9yQ2FsbCgpIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
QEAgLTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CiAgICAgQ0NhbGxWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBD
aGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCi0gICAgICAg
ICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChudW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1
MiwxMiBAQCBDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9i
eXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6
Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYp
CisgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsMTEgQEAgY2xh
c3MgQ29tcGlsYXRpb24gewogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGls
YXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworCisgICAgLy8g
VGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0ZSBhIENvbXBpbGF0
aW9uLiBJdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAorICAgIC8vIGNvZGUuIFByb2Jh
Ymx5IGJlc3QgdG8ga2VlcCBpdCB0aGF0IHdheS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXBy
b2R1Y3RzPik7CisgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJl
Zi5jb2RlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFp
clN0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgogI2lu
Y2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgpAQCAtOTQsNiArOTUsMTUgQEAgcHVibGljOgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBibG9j
a3MgYXJlIG5vdCByYXJlLgorICAgICAgICBtX2Zhc3RXb3JrbGlzdC5wdXNoKG1fcHJvY2VkdXJl
WzBdKTsKKyAgICAgICAgd2hpbGUgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA9IG1fZmFzdFdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgICAgICBmb3IgKEIzOjpGcmVxdWVudGVkQmxvY2smIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3Nvci5pc1JhcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChz
dWNjZXNzb3IuYmxvY2soKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBt
X3Byb2NlZHVyZS5yZXNldFZhbHVlT3duZXJzKCk7IC8vIFVzZWQgYnkgY3Jvc3Nlc0ludGVyZmVy
ZW5jZSgpLgogCiAgICAgICAgIC8vIExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwg
bGV2ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQpAQCAtMTAzLDYg
KzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCiAgICAg
ICAgICAgICBtX2luc3RzLnJlc2l6ZSgwKTsKIAorICAgICAgICAgICAgbV9pc1JhcmUgPSAhbV9m
YXN0V29ya2xpc3Quc2F3KGJsb2NrKTsKKwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiTG93ZXJpbmcgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAg
ICAgICAgICAgICAKQEAgLTE1NDEsMzcgKzE1NTMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aW52ZXJ0ZWQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAg
IEFyZyBtYXJzaGFsbENDYWxsQXJndW1lbnQodW5zaWduZWQmIGFyZ3VtZW50Q291bnQsIHVuc2ln
bmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsKLSAgICAgICAgaWYgKGFyZ3VtZW50SW5k
ZXggPCBCYW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgewotICAgICAgICAgICAg
VG1wIHJlc3VsdCA9IFRtcChCYW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5k
ZXgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY2hpbGQtPnR5cGUo
KSksIGltbU9yVG1wKGNoaWxkKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLQotI2lmIENQVShBUk02NCkgJiYgUExBVEZPUk0oSU9TKQotICAgICAgICAv
LyBpT1MgZG9lcyBub3QgZm9sbG93IHRoZSBBUk02NCBBQkkgcmVnYXJkaW5nIGZ1bmN0aW9uIGNh
bGxzLgotICAgICAgICAvLyBBcmd1bWVudHMgbXVzdCBiZSBwYWNrZWQuCi0gICAgICAgIHVuc2ln
bmVkIHNsb3RTaXplID0gc2l6ZW9mVHlwZShjaGlsZC0+dHlwZSgpKTsKLSAgICAgICAgc3RhY2tP
ZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNpemUsIHN0YWNrT2Zmc2V0KTsK
LSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHNsb3RTaXplID0gc2l6ZW9mKHZvaWQqKTsKLSNlbmRp
ZgotICAgICAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zmc2V0KTsKLSAgICAg
ICAgc3RhY2tPZmZzZXQgKz0gc2xvdFNpemU7Ci0gICAgICAgIAotICAgICAgICAvLyBQdXQgdGhl
IGNvZGUgZm9yIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGlz
IHNpZ25pZmljYW50bHkgZWFzZXMgdGhlCi0gICAgICAgIC8vIGJ1cmRlbiBvbiB0aGUgcmVnaXN0
ZXIgYWxsb2NhdG9yLiBJZiB3ZSBjb3VsZCwgd2UnZCBob2lzdCB0aGVzZSBzdG9yZXMgYXMgZmFy
IGFzCi0gICAgICAgIC8vIHBvc3NpYmxlLgotICAgICAgICAvLyBGSVhNRTogQWRkIGEgcGhhc2Ug
dG8gaG9pc3Qgc3RvcmVzIGFzIGhpZ2ggYXMgcG9zc2libGUgdG8gcmVsaWV2ZSByZWdpc3RlciBw
cmVzc3VyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTA2MwotICAgICAgICBtX2luc3RzLmxhc3QoKS5pbnNlcnQoMCwgY3JlYXRlU3RvcmUo
Y2hpbGQsIHJlc3VsdCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KICAgICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bj
b2RlKCkpIHsKQEAgLTE5MTksMTQgKzE5MDAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAgICBjYXNlIEIz
OjpDQ2FsbDogewogICAgICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3ZhbHVlLT5hczxD
Q2FsbFZhbHVlPigpOwotICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2FsbCwgQXJnOjpz
cGVjaWFsKG1fY29kZS5jQ2FsbFNwZWNpYWwoKSkpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlz
IGEgYml0IHdlaXJkIC0gd2UgaGF2ZSBhIHN1cGVyIGludGVuc2UgY29udHJhY3Qgd2l0aCBBcmc6
OkNDYWxsU3BlY2lhbC4gSXQgbWlnaHQKLSAgICAgICAgICAgIC8vIGJlIGJldHRlciBpZiB3ZSBm
YWN0b3JlZCBBaXI6OkNDYWxsU3BlY2lhbCBvdXQgb2YgdGhlIEFpciBuYW1lc3BhY2UgYW5kIG1h
ZGUgaXQgYSBCMwotICAgICAgICAgICAgLy8gdGhpbmcuCi0gICAgICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA0NQorICAgICAgICAg
ICAgSW5zdCBpbnN0KG1faXNSYXJlID8gQWlyOjpDb2xkQ0NhbGwgOiBBaXI6OkNDYWxsLCBjQ2Fs
bCk7CiAKICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSB0b24gb2YgZmxleGliaWxpdHkgcmVnYXJk
aW5nIHRoZSBjYWxsZWUgYXJndW1lbnQsIGJ1dCBjdXJyZW50bHksIHdlIGRvbid0CiAgICAgICAg
ICAgICAvLyB1c2UgaXQgeWV0LiBJdCBnZXRzIHdlaXJkIGZvciByZWFzb25zOgpAQCAtMTkzOSw0
OCArMTkxNSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNTIKICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQodG1wKGNDYWxsLT5jaGlsZCgwKSkpOwogCi0gICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHRlbGwgQWlyIHdoYXQgcmVnaXN0ZXJzIHRoaXMgZGVmaW5lcy4KLSAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpKTsKLSAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKSk7Ci0K
LSAgICAgICAgICAgIC8vIE5vdyBtYXJzaGFsbCB0aGUgYXJndW1lbnRzLiBUaGlzIGlzIHdoZXJl
IHdlIGltcGxlbWVudCB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIEFmdGVyCi0gICAgICAgICAg
ICAvLyB0aGlzLCBBaXIgZG9lcyBub3Qga25vdyB3aGF0IHRoZSBjb252ZW50aW9uIGlzOyBpdCBq
dXN0IHRha2VzIG91ciB3b3JkIGZvciBpdC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGdwQXJndW1l
bnRDb3VudCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmcEFyZ3VtZW50Q291bnQgPSAwOwot
ICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGNDYWxsLT5udW1DaGlsZHJlbigpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBWYWx1ZSogYXJnQ2hpbGQgPSBjQ2FsbC0+Y2hpbGQoaSk7Ci0gICAgICAgICAgICAg
ICAgQXJnIGFyZzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKEFy
Zzo6dHlwZUZvckIzVHlwZShhcmdDaGlsZC0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpHUDoKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gbWFyc2hhbGxDQ2FsbEFyZ3Vt
ZW50PEdQUkluZm8+KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGFyZ0NoaWxkKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY0NhbGwtPnR5cGUoKSAh
PSBWb2lkKQorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKGNDYWxsKSk7CiAK
LSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RlA6Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9
IG1hcnNoYWxsQ0NhbGxBcmd1bWVudDxGUFJJbmZvPihmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zm
c2V0LCBhcmdDaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hp
bGRyZW4oKTsgKytpKQorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoaW1tT3JUbXAo
Y0NhbGwtPmNoaWxkKGkpKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURk1vdmUo
aW5zdCkpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNDYWxsLT50eXBlKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SW50MzI6Ci0gICAgICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCB0bXAoY0NhbGwpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmxvYXQ6Ci0gICAgICAgICAgICBjYXNl
IERvdWJsZToKLSAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgVG1wKEZQUkluZm86
OnJldHVyblZhbHVlRlBSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI3Miwx
MSArMjIxMywxMyBAQCBwcml2YXRlOgogCiAgICAgVXNlQ291bnRzIG1fdXNlQ291bnRzOwogICAg
IFBoaUNoaWxkcmVuIG1fcGhpQ2hpbGRyZW47CisgICAgQmxvY2tXb3JrbGlzdCBtX2Zhc3RXb3Jr
bGlzdDsKIAogICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVjdG9y
PEluc3Q+IG1fcHJvbG9ndWU7CiAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBi
b29sIG1faXNSYXJlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3Rz
LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1
ZUJ5cHJvZHVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIE9wYXF1ZUJ5
cHJvZHVjdHMgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9w
YXF1ZUJ5cHJvZHVjdHMoKTsKLSAgICB+T3BhcXVlQnlwcm9kdWN0cygpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5PcGFxdWVCeXByb2R1Y3RzKCk7CiAKICAgICBzaXplX3QgY291bnQoKSBjb25z
dCB7IHJldHVybiBtX2J5cHJvZHVjdHMuc2l6ZSgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NDg1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCwyMSArMjAwLDE0IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c0FyZ1ZhbGlkRm9yVmFsdWUKICAgICBjYXNlIEFyZzo6VG1wOgogICAgIGNhc2UgQXJnOjpJbW06
CiAgICAgY2FzZSBBcmc6OkltbTY0OgotICAgIGNhc2UgQXJnOjpTdGFjazoKLSAgICBjYXNlIEFy
Zzo6Q2FsbEFyZzoKLSAgICAgICAgYnJlYWs7IC8vIE9LCi0gICAgY2FzZSBBcmc6OkFkZHI6Ci0g
ICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikK
LSAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFhcmcu
aXNTdGFja01lbW9yeSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgCi0gICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSk7CiAKLSAgICByZXR1cm4gYXJnLmlzVHlwZSh0eXBlKTsKKyAgICByZXR1
cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7CiB9CiAKIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYgY29kZSwgY29uc3QgQWlyOjpBcmcmIGFyZywgY29u
c3QgVmFsdWVSZXAmIHJlcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShy
ZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzczOCw2ICs3NzM4LDY1IEBAIHZvaWQgdGVzdENhbGxTaW1wbGUo
aW50IGEsIGludCBiKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9
PSBhICsgYik7CiB9CiAKK3ZvaWQgdGVzdENhbGxSYXJlKGludCBhLCBpbnQgYikKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGNvbW1vbiA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiByYXJlID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJhcmUsIEZyZXF1ZW5jeUNsYXNzOjpS
YXJlKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGNvbW1vbikpOworCisgICAgY29tbW9uLT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
Y29tbW9uLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworICAg
IAorICAgIHJhcmUtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByYXJlLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICByYXJlLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2lt
cGxlRnVuY3Rpb24pKSwKKyAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAg
IHJhcmUtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Ms
IHRydWUsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0ZXN0Q2FsbFJhcmVMaXZlKGludCBh
LCBpbnQgYiwgaW50IGMpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb21tb24gPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogcmFyZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9y
aWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayhyYXJlLCBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhj
b21tb24pKTsKKworICAgIGNvbW1vbi0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbW1vbi0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKKyAgICAKKyAgICByYXJlLT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcmFyZS0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByYXJlLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
SW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5jdGlv
bikpLAorICAgICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgICAgICBy
YXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMikpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcmFy
ZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjMpKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHRy
dWUsIGEsIGIsIGMpID09IGEgKyBiICsgYyk7Cit9CisKIHZvaWQgdGVzdENhbGxTaW1wbGVQdXJl
KGludCBhLCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTEwMDMyLDYgKzEwMDkx
LDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0SW50MzJUb0Rv
dWJsZVBhcnRpYWxSZWdpc3RlcldpdGhvdXRTdGFsbCgpKTsKIAogICAgIFJVTih0ZXN0Q2FsbFNp
bXBsZSgxLCAyKSk7CisgICAgUlVOKHRlc3RDYWxsUmFyZSgxLCAyKSk7CisgICAgUlVOKHRlc3RD
YWxsUmFyZUxpdmUoMSwgMiwgMykpOwogICAgIFJVTih0ZXN0Q2FsbFNpbXBsZVB1cmUoMSwgMikp
OwogICAgIFJVTih0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRzKCkpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDI2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQUklu
Zm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25zdAor
eworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBBZGRyOgorICAgICAgICByZXR1cm4g
YmFzZSgpID09IEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAg
ICAgfHwgYmFzZSgpID09IEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgY2FzZSBTdGFjazoKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IGJvb2wgQXJnOjppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBzaWdu
ZWRuZXNzKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgewpAQCAtNjEsNiArNzgs
MzEgQEAgYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLAogICAgIH0KIH0K
IAorYm9vbCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wgdXNl
cyA9IGZhbHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0KAor
ICAgICAgICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3RoZXJU
bXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsKKyAg
ICByZXR1cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFsdWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkp
KTsKK30KKworYm9vbCBBcmc6OmlzQ29tcGF0aWJsZVR5cGUoY29uc3QgQXJnJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoaGFzVHlwZSgpKQorICAgICAgICByZXR1cm4gb3RoZXIuaXNUeXBlKHR5
cGUoKSk7CisgICAgaWYgKG90aGVyLmhhc1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGlzVHlwZShv
dGhlci50eXBlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEFyZzo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xMTEsNiAr
MTUzLDkgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNl
IFNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgV2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCh3aWR0
aCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0xNjEsNiArMjA2LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQo
IlNwZWNpYWwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpXaWR0aEFyZzoKKyAg
ICAgICAgb3V0LnByaW50KCJXaWR0aEFyZyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyNSwxNiArMjczLDE2IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKIHsKICAgICBzd2l0Y2ggKHdp
ZHRoKSB7CiAgICAgY2FzZSBBcmc6OldpZHRoODoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDgi
KTsKKyAgICAgICAgb3V0LnByaW50KCI4Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFy
Zzo6V2lkdGgxNjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDE2Iik7CisgICAgICAgIG91dC5w
cmludCgiMTYiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDMyOgotICAg
ICAgICBvdXQucHJpbnQoIldpZHRoMzIiKTsKKyAgICAgICAgb3V0LnByaW50KCIzMiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Ci0gICAgICAgIG91dC5wcmludCgi
V2lkdGg2NCIpOworICAgICAgICBvdXQucHJpbnQoIjY0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24g
MTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVl
OworCituYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgU3BlY2lhbDsKIGNsYXNzIFN0YWNrU2xvdDsK
QEAgLTY5LDcgKzczLDggQEAgcHVibGljOgogICAgICAgICBSZWxDb25kLAogICAgICAgICBSZXND
b25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBTcGVjaWFsCisgICAgICAgIFNwZWNp
YWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7
CkBAIC0xNTYsNiArMTYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0
YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihGUCk7CisgICAgfQorCiAgICAgZW51
bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwKICAgICAgICAgV2lkdGgxNiwKQEAg
LTIyMCw2ICsyMzIsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9sZSkg
JiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUm9sZSBjb29sZWQoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVz
ZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlz
RWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTQzNSw2ICs0NjcsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgaW1tUHRyKGNv
bnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gaW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PihhZGRyZXNzKSk7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBhZGRyKEFp
cjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIEFTU0VSVChi
YXNlLmlzR1AoKSk7CkBAIC01NDksNiArNTg2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRoKQor
ICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdpZHRo
QXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB3aWR0aDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApAQCAt
NTg1LDYgKzYzMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7
CiAgICAgfQogCisgICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzSW1tKCkgfHwgaXNJbW02NCgpOworICAgIH0KKwogICAgIGJvb2wgaXNBZGRyKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTYwNSw2ICs2NTUs
MjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAor
ICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGJvb2wgaXNTdGFja01lbW9yeSgpIGNvbnN0OworCiAgICAgYm9vbCBpc1Jl
bENvbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpA
QCAtNjM3LDYgKzcwMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3Bl
Y2lhbDsKICAgICB9CiAKKyAgICBib29sIGlzV2lkdGhBcmcoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9CisKICAgICBib29sIGlzQWxpdmUo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpAQCAt
NjgwLDE4ICs3NTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQog
Ci0gICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKLSAgICAgICAgY2FzZSBBZGRyOgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAgICBj
YXNlIENhbGxBcmc6Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTWVtb3J5KCk7
IH0KICAgICAKICAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtNzMwLDYgKzc4
OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFs
Kj4obV9vZmZzZXQpOwogICAgIH0KIAorICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gV2lkdGhBcmcpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2lkdGg+KG1fb2Zmc2V0KTsKKyAgICB9CisKICAgICBib29sIGlzR1BUbXAoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAtNzU0
LDYgKzgxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNl
IERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFy
ZzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAg
ICAgIHJldHVybiBpc0dQVG1wKCk7CkBAIC03NzEsNiArODM3LDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBT
cGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTgxMiw2ICs4
NzksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBjYW5SZXByZXNl
bnQoVmFsdWUqIHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaXNDb21wYXRpYmxlVHlwZShjb25z
dCBBcmcmIG90aGVyKSBjb25zdDsKKwogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKQEAgLTk1Myw2ICsxMDI0LDcg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29u
ZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC05NzQsNiArMTA0Niw4IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgdXNlc1RtcChBaXI6OlRtcCB0
bXApIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFu
IGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cwogICAgIC8v
IHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKICAgICAvLwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNSArNzgsMTcgQEAgcHVibGljOgogICAgIEluc3RM
aXN0JiBpbnN0cygpIHsgcmV0dXJuIG1faW5zdHM7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEluc3Q+Ci0gICAgdm9pZCBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAgIEluc3QmIGFwcGVu
ZEluc3QoSW5zdCYmIGluc3QpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZv
cndhcmQ8SW5zdD4oaW5zdCkpOworICAgICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQgYXBwZW5k
KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICBJbnN0JiBhcHBlbmQoQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgICAgIHJldHVybiBtX2luc3Rz
Lmxhc3QoKTsKICAgICB9CiAKICAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hp
Y2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMg
dGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVu
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5m
bz4KK0FyZyBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsKHVuc2lnbmVkJiBhcmd1bWVudENvdW50
LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sKKyAgICB1bnNpZ25lZCBh
cmd1bWVudEluZGV4ID0gYXJndW1lbnRDb3VudCsrOworICAgIGlmIChhcmd1bWVudEluZGV4IDwg
QmFua0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpCisgICAgICAgIHJldHVybiBUbXAo
QmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7CisKKyAgICB1bnNp
Z25lZCBzbG90U2l6ZTsKKyAgICBpZiAoaXNBUk02NCgpICYmIGlzSU9TKCkpIHsKKyAgICAgICAg
Ly8gQXJndW1lbnRzIGFyZSBwYWNrZWQuCisgICAgICAgIHNsb3RTaXplID0gc2l6ZW9mVHlwZShj
aGlsZC0+dHlwZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFs
aWduZWQuCisgICAgICAgIHNsb3RTaXplID0gODsKKyAgICB9CisKKyAgICBzdGFja09mZnNldCA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworICAgIEFy
ZyByZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOworICAgIHN0YWNrT2Zmc2V0ICs9
IHNsb3RTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FyZyBtYXJzaGFsbENDYWxsQXJn
dW1lbnQoCisgICAgdW5zaWduZWQmIGdwQXJndW1lbnRDb3VudCwgdW5zaWduZWQmIGZwQXJndW1l
bnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSogY2hpbGQpCit7CisgICAgc3dp
dGNoIChBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpIHsKKyAgICBjYXNlIEFyZzo6
R1A6CisgICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEdQUkluZm8+KGdw
QXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKKyAgICBjYXNlIEFyZzo6RlA6Cisg
ICAgICAgIHJldHVybiBtYXJzaGFsbENDYWxsQXJndW1lbnRJbXBsPEZQUkluZm8+KGZwQXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQsIGNoaWxkKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQXJnKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitWZWN0b3I8QXJnPiBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUmIGNv
ZGUsIENDYWxsVmFsdWUqIHZhbHVlKQoreworICAgIFZlY3RvcjxBcmc+IHJlc3VsdDsKKyAgICBy
ZXN1bHQuYXBwZW5kKFRtcChDQ2FsbFNwZWNpYWw6OnNjcmF0Y2hSZWdpc3RlcikpOworICAgIHVu
c2lnbmVkIGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50
ID0gMDsKKyAgICB1bnNpZ25lZCBzdGFja09mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgKKyAgICAgICAgICAgIG1hcnNoYWxsQ0NhbGxBcmd1bWVudChncEFyZ3VtZW50Q291bnQs
IGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHZhbHVlLT5jaGlsZChpKSkpOworICAgIH0K
KyAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZzZXQpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitUbXAgY0NhbGxSZXN1bHQoVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgcmV0dXJuIFRtcCgpOworICAgIGNhc2UgSW50MzI6
CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgcmV0dXJuIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgY2FzZSBGbG9hdDoKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJu
IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVG1wKCk7Cit9CisKK0luc3QgYnVpbGRDQ2Fs
bChDb2RlJiBjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBWZWN0b3I8QXJnPiYgYXJndW1lbnRz
KQoreworICAgIEluc3QgaW5zdChQYXRjaCwgb3JpZ2luLCBBcmc6OnNwZWNpYWwoY29kZS5jQ2Fs
bFNwZWNpYWwoKSkpOworICAgIGluc3QuYXJncy5hcHBlbmQoYXJndW1lbnRzWzBdKTsKKyAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIGluc3Qu
YXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOworICAgIGluc3QuYXJn
cy5hcHBlbmQoVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0g
YXJndW1lbnRzW2ldOworICAgICAgICBpZiAoYXJnLmlzVG1wKCkpCisgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAgfQorICAgIHJldHVybiBpbnN0OworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJDQ2FsbGluZ0NvbnZlbnRpb25faAorI2RlZmluZSBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFp
ckluc3QuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDQ2FsbFZhbHVlOworCitu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworVmVjdG9yPEFyZz4gY29tcHV0ZUNDYWxs
aW5nQ29udmVudGlvbihDb2RlJiwgQ0NhbGxWYWx1ZSopOworCitUbXAgY0NhbGxSZXN1bHQoVHlw
ZSk7CisKK0luc3QgYnVpbGRDQ2FsbChDb2RlJiwgVmFsdWUqIG9yaWdpbiwgY29uc3QgVmVjdG9y
PEFyZz4mKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAxOTQ4NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NSwxMiArNTUsMTMgQEAgcHVibGljOgogCiAgICAgUHJvY2VkdXJlJiBwcm9jKCkgeyByZXR1
cm4gbV9wcm9jOyB9CiAKLSAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
ID0gMSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91Ymxl
IGZyZXF1ZW5jeSA9IDEpOwogCiAgICAgLy8gTm90ZSB0aGF0IHlvdSBjYW4gcmVseSBvbiBzdGFj
ayBzbG90cyBhbHdheXMgZ2V0dGluZyBpbmRpY2VzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBp
bmRleAogICAgIC8vIG9mIGFueSBwcmlvciBzdGFjayBzbG90LiBJbiBmYWN0LCBhbGwgc3RhY2sg
c2xvdHMgeW91IGNyZWF0ZSBpbiB0aGUgZnV0dXJlIHdpbGwgaGF2ZSBhbiBpbmRleAogICAgIC8v
IHRoYXQgaXMgPj0gc3RhY2tTbG90cygpLnNpemUoKS4KLSAgICBTdGFja1Nsb3QqIGFkZFN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0g
bnVsbHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3Qo
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1
ZSogPSBudWxscHRyKTsKICAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdChTdGFja1Nsb3RWYWx1
ZSopOwogCiAgICAgU3BlY2lhbCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
Q3VzdG9tLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitib29sIENDYWxsQ3VzdG9tOjppc1ZhbGlkRm9y
bShJbnN0JiBpbnN0KQoreworICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFz
PENDYWxsVmFsdWU+KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgIT0gKHZhbHVlLT50eXBlKCkgPT0gVm9pZCA/IDAg
OiAxKSArIHZhbHVlLT5udW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgYXJndW1lbnRzIGNhbiBvbmx5IHJlZmVyIHRvIHRoZSBzdGFjaywgdG1wcywgb3Ig
aW1tZWRpYXRlcy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlm
ICghYXJnLmlzVG1wKCkgJiYgIWFyZy5pc1N0YWNrTWVtb3J5KCkgJiYgIWFyZy5pc1NvbWVJbW0o
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSAwOworCisgICAgaWYgKCFpbnN0LmFyZ3NbMF0uaXNHUCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIHJlc3VsdCB0aGVuIGl0IGNhbm5vdCBiZSBh
biBpbW1lZGlhdGUuCisgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBp
ZiAoaW5zdC5hcmdzWzFdLmlzU29tZUltbSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWluc3QuYXJnc1sxXS5jYW5SZXByZXNlbnQodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBvZmZzZXQrKzsKKyAgICB9CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgaS0tID4gMTspIHsKKyAgICAgICAgVmFs
dWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdz
W29mZnNldCArIGldOworICAgICAgICBpZiAoIWFyZy5jYW5SZXByZXNlbnQoY2hpbGQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitD
Q2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxs
SGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRBTDogVW5s
b3dlcmVkIEMgY2FsbDogIiwgaW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitib29sIFNodWZm
bGVDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5z
aXplKCkgJSAzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBIGRlc3RpbmF0aW9u
IG1heSBvbmx5IGFwcGVhciBvbmNlLiBUaGlzIHJlcXVpcmVtZW50IGFsbG93cyB1cyB0byBhdm9p
ZCB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yCisgICAgLy8gb2YgaGF2aW5nIGEgZGVzdGluYXRpb24g
dGhhdCBpcyBzdXBwb3NlZCB0byBnZXQgbXVsdGlwbGUgaW5wdXRzIHNpbXVsdGFuZW91c2x5LiBJ
dCBhbHNvCisgICAgLy8gaW1wb3NlcyBzb21lIGludGVyZXN0aW5nIGNvbnN0cmFpbnRzIG9uIHRo
ZSAic2hhcGUiIG9mIHRoZSBzaHVmZmxlLiBJZiB3ZSB0cmVhdCBhIHNodWZmbGUgcGFpcgorICAg
IC8vIGFzIGFuIGVkZ2UgYW5kIHRoZSBBcmdzIGFzIG5vZGVzLCB0aGVuIHRoZSBzaW5nbGUtZGVz
dGluYXRpb24gcmVxdWlyZW1lbnQgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyBzaHVmZmxlIGdyYXBo
IGNvbnNpc3RzIG9mIHR3byBraW5kcyBvZiBzdWJncmFwaHM6CisgICAgLy8KKyAgICAvLyAtIFNw
YW5uaW5nIHRyZWVzLiBXZSBjYWxsIHRoZXNlIHNoaWZ0cy4gVGhleSBjYW4gYmUgZXhlY3V0ZWQg
YXMgYSBzZXF1ZW5jZSBvZiBNb3ZlCisgICAgLy8gICBpbnN0cnVjdGlvbnMgYW5kIGRvbid0IHVz
dWFsbHkgcmVxdWlyZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLworICAgIC8vIC0gQ2xvc2Vk
IGxvb3BzLiBUaGVzZSBsb29wcyBjb25zaXN0IG9mIG5vZGVzIHRoYXQgaGF2ZSBvbmUgc3VjY2Vz
c29yIGFuZCBvbmUgcHJlZGVjZXNzb3IsIHNvCisgICAgLy8gICB0aGVyZSBpcyBubyB3YXkgdG8g
ImdldCBpbnRvIiB0aGUgbG9vcCBmcm9tIG91dHNpZGUgb2YgaXQuIFRoZXNlIGNhbiBiZSBleGVj
dXRlZCB1c2luZyBzd2FwcworICAgIC8vICAgb3IgYnkgc2F2aW5nIG9uZSBvZiB0aGUgQXJncyB0
byBhIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIGV4ZWN1dGluZyBpdCBhcyBhIHNoaWZ0LgorICAgIEhh
c2hTZXQ8QXJnPiBkc3RzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJn
cy5zaXplKCk7ICsraSkgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAg
ICB1bnNpZ25lZCBtb2RlID0gaSAlIDM7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gMikgeworICAg
ICAgICAgICAgLy8gSXQncyB0aGUgd2lkdGguCisgICAgICAgICAgICBpZiAoIWFyZy5pc1dpZHRo
QXJnKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc291cmNlIGNhbiBiZSBhbiBpbW1lZGlh
dGUuCisgICAgICAgIGlmICghbW9kZSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1NvbWVJbW0o
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFhcmcuaXND
b21wYXRpYmxlVHlwZShpbnN0LmFyZ3NbaSArIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobW9kZSA9PSAxKTsK
KyAgICAgICAgICAgIGlmICghZHN0cy5hZGQoYXJnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcuaXNUbXAoKSB8
fCBhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBObyBkZXN0aW5hdGlvbiByZWdpc3RlciBtYXkgYXBw
ZWFyIGluIGFueSBhZGRyZXNzIGV4cHJlc3Npb25zLiBUaGUgbG93ZXJpbmcgY2FuJ3QgaGFuZGxl
IGl0CisgICAgLy8gYW5kIGl0J3Mgbm90IHVzZWZ1bCBmb3IgdGhlIHdheSB3ZSBlbmQgdXAgdXNp
bmcgU2h1ZmZsZXMuIE5vcm1hbGx5LCBTaHVmZmxlcyBvbmx5IHVzZWQgZm9yCisgICAgLy8gc3Rh
Y2sgYWRkcmVzc2VzIGFuZCBub24tc3RhY2sgcmVnaXN0ZXJzLgorICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgaWYgKCFhcmcuaXNNZW1vcnkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgYXJnLmZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgaWYg
KGRzdHMuY29udGFpbnModG1wKSkKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgU2h1
ZmZsZUN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlv
bkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZBVEFMOiBVbmxvd2VyZWQgc2h1ZmZsZTogIiwg
aW5zdCwgIlxuIik7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CiAKQEAgLTUxLDYgKzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZQogLy8geW91IG5lZWQgdG8gY2FycnkgZXh0cmEgc3RhdGUgYXJvdW5k
IHdpdGggdGhlIGluc3RydWN0aW9uLiBBbHNvLCBTcGVjaWFscyBtZWFuIHRoYXQgeW91CiAvLyBh
bHdheXMgaGF2ZSBhY2Nlc3MgdG8gQ29kZSYgZXZlbiBpbiBtZXRob2RzIHRoYXQgZG9uJ3QgdGFr
ZSBhIEdlbmVyYXRpb25Db250ZXh0LgogCisvLyBEZWZpbml0aW9uIG9mIFBhdGNoIGluc3RydWN0
aW9uLiBQYXRjaCBpcyB1c2VkIHRvIGRlbGVnYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5zdHJ1
Y3Rpb24gdG8gdGhlCisvLyBTcGVjaWFsIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB0aGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGluc3RydWN0aW9uLgogc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKQEAgLTk2LDYgKzk5LDExNCBAQCBzdHJ1
Y3QgUGF0Y2hDdXN0b20gewogICAgIH0KIH07CiAKKy8vIERlZmluaXRpb24gb2YgQ0NhbGwgaW5z
dHJ1Y3Rpb24uIENDYWxsIGlzIHVzZWQgZm9yIGhvdCBwYXRoIEMgZnVuY3Rpb24gY2FsbHMuIEl0
J3MgbG93ZXJlZCB0byBhCisvLyBQYXRjaCB3aXRoIGFuIEFpciBDQ2FsbFNwZWNpYWwgYWxvbmcg
d2l0aCBjb2RlIHRvIG1hcnNoYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgbG93ZXJpbmcgaGFwcGVucwor
Ly8gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciBzZWVzIHRoZSBjbG9iYmVycy4KK3N0cnVjdCBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbjsKKworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICAgICAg
ZnVuY3RvcihpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OnBvaW50
ZXJXaWR0aCgpKTsgLy8gY2FsbGVlCisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUtPnR5cGUo
KSAhPSBWb2lkKSB7CisgICAgICAgICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3Qu
YXJnc1tpbmRleCsrXSwgQXJnOjpEZWYsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKKyAgICAgICAgICAgIFZhbHVlKiBj
aGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAgICAg
ICAgICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwKKyAgICAgICAgICAgICAgICBBcmc6
OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3aWR0
aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1T
dGF0aWMoQXJndW1lbnRzLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsKKworICAgIHN0YXRpYyBib29s
IGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKElu
c3QmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gVGhpcyBq
dXN0IGNyYXNoZXMsIHNpbmNlIHdlIGV4cGVjdCBDIGNhbGxzIHRvIGJlIGxvd2VyZWQgYmVmb3Jl
IGdlbmVyYXRpb24uCisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0
JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKK307CisKK3N0cnVjdCBDb2xk
Q0NhbGxDdXN0b20gOiBDQ2FsbEN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgbGlrZSBhIGNhbGwsIGJ1
dCB1c2VzIGJlY29tZSBjb2xkLgorICAgICAgICBDQ2FsbEN1c3RvbTo6Zm9yRWFjaEFyZygKKyAg
ICAgICAgICAgIGluc3QsCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBm
dW5jdG9yKGFyZywgQXJnOjpjb29sZWQocm9sZSksIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0g
aW5zdC5hcmdzLnNpemUoKSAvIDMgKiAzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGltaXQ7IGkgKz0gMykgeworICAgICAgICAgICAgQXJnJiBzcmMgPSBpbnN0LmFyZ3NbaSAr
IDBdOworICAgICAgICAgICAgQXJnJiBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAgICAg
ICAgQXJnJiB3aWR0aEFyZyA9IGluc3QuYXJnc1tpICsgMl07CisgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoID0gd2lkdGhBcmcud2lkdGgoKTsKKyAgICAgICAgICAgIEFyZzo6VHlwZSB0eXBl
ID0gc3JjLmlzR1AoKSAmJiBkc3QuaXNHUCgpID8gQXJnOjpHUCA6IEFyZzo6RlA7CisgICAgICAg
ICAgICBmdW5jdG9yKHNyYywgQXJnOjpVc2UsIHR5cGUsIHdpZHRoKTsKKyAgICAgICAgICAgIGZ1
bmN0b3IoZHN0LCBBcmc6OkRlZiwgdHlwZSwgd2lkdGgpOworICAgICAgICAgICAgZnVuY3Rvcih3
aWR0aEFyZywgQXJnOjpVc2UsIEFyZzo6R1AsIEFyZzo6V2lkdGg4KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworICAg
IAorICAgIHN0YXRpYyBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXggJSAzKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKwogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0
U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5Lmgi
CisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBl
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJp
b3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgIGlmIChm
dW5jdG9yKHRtcCkpCisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKyAgICByZXR1cm4g
VG1wKCk7Cit9CisKK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBlLCBjb25z
dCBBcmcmIGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgeworICAgIHJldHVybiBmaW5kUG9zc2libGVT
Y3JhdGNoKAorICAgICAgICB0eXBlLAorICAgICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuICFhcmcxLnVzZXNUbXAodG1wKSAmJiAhYXJnMi51c2VzVG1wKHRt
cCk7CisgICAgICAgIH0pOworfQorCisvLyBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEsIGEgPT4g
YywgYiA9PiBkKQorc3RydWN0IFJvdGF0ZSB7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBsb29w
OyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhpcyBpcyB0aGUgbG9vcDogKGEgPT4gYiwgYiA9PiBhKQor
ICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnJpbmdlOyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhlc2Ug
YXJlIHRoZSBhc3NvY2lhdGVkIHNoaWZ0czogKGEgPT4gYywgYiA9PiBkKQorfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+Iiwg
ZHN0KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNodWZm
bGVQYWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBlIHR5
cGUsIFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAg
ICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAg
cmV0dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
Ly8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhhdCB3
ZSBrbm93IGhvdyB0byBkZWFsIHdpdGguCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGZvciAo
Y29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFpci5z
cmMoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5cGUodHlw
ZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpIHx8IHBhaXIuZHN0KCkuaXNN
ZW1vcnkoKSk7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworICAgIC8vIFRo
ZXJlIGFyZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdpbGwgZG86
CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMpLiBXZSBl
bWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVpcmVzCisg
ICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1vcnkgbW92
ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBwb3NzaWJs
ZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFwZXIuIE5vdGUgdGhhdCBzaGlmdHMgY2FuIGludm9sdmUg
dGhlIHNhbWUgc291cmNlIG1lbnRpb25lZAorICAgIC8vICAgbXVsdGlwbGUgdGltZXMuIEV4YW1w
bGU6IChhID0+IGIsIGEgPT4gYywgYiA9PiBkLCBiID0+IGUpLgorICAgIC8vCisgICAgLy8gLSBS
b3RhdGUuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQgdG8gZW1pdCB0aGlzIGFz
ICJTd2FwIGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8vICAgbWF5IG5vdCBiZSBh
dmFpbGFibGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyIG9y
IGEgc2NyYXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGduYXJsaWVyIGV4YW1wbGUg
aXMgKGEgPT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0aGlzIGFzICJTd2FwIGIs
IGM7CisgICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBpbmcgaGFzIHRvIGJlIGNh
cmVmdWwgYWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBh
IHJvdGF0ZSBjYW4gaGF2ZSAiZnJpbmdlIi4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGhhdmUgKGEg
PT4gYiwgYiA9PiBhLCBhID0+YywKKyAgICAvLyBiID0+IGQpLiBUaGlzIGhhcyBhIHJvdGF0ZSBs
b29wIChhID0+IGIsIGIgPT4gYSkgYW5kIHNvbWUgZnJpbmdlIChhID0+IGMsIGIgPT4gZCkuIFdl
IHRyZWF0CisgICAgLy8gdGhlIHdob2xlIHRoaW5nIGFzIGEgc2luZ2xlIHJvdGF0ZS4KKyAgICAv
LworICAgIC8vIFdlIHdpbGwgZmluZCBtdWx0aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJhdGlvbnMu
IFdlIGNhbiBleGVjdXRlIHRoZW0gaW4gYW55IG9yZGVyLgorCisgICAgLy8gV2UgaW50ZXJwcmV0
IHRoZXNlIGFzIE1vdmVzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4gQWxsIHNo
aWZ0cyBhcmUga2V5ZWQgYnkgdGhlaXIKKyAgICAvLyBzdGFydGluZyBzb3VyY2UuCisgICAgSGFz
aE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IHNoaWZ0czsKKworICAgIC8vIFdlIGludGVy
cHJldCB0aGVzZSBhcyBTd2FwcyBvdmVyIHNyYygpJ3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQg
YmFja3dhcmRzLCBpLmUuIGZvciBhIGxpc3QKKyAgICAvLyBvZiBzaXplIDMgd2Ugd291bGQgZG8g
IlN3YXAgbGlzdFsxXS5zcmMoKSwgbGlzdFsyXS5zcmMoKTsgU3dhcCBsaXN0WzBdLnNyYygpLCBs
aXN0WzFdLnNyYygpIi4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgY2FuJ3QgZG8gdGhh
dCBpZiB0aGUgd2lkdGhzIGRvbid0IG1hdGNoIG9yIG90aGVyIGJhZCB0aGluZ3MgaGFwcGVuLgor
ICAgIC8vIEJ1dCwgcHJpb3IgdG8gZXhlY3V0aW5nIGFsbCBvZiB0aGF0LCB3ZSBuZWVkIHRvIGV4
ZWN1dGUgdGhlIGZyaW5nZTogdGhlIHNoaWZ0cyBjb21taW5nIG9mZiB0aGUKKyAgICAvLyByb3Rh
dGUuCisgICAgVmVjdG9yPFJvdGF0ZT4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFzaE1h
cDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29uc3Qg
U2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBhaXIu
c3JjKCksIFZlY3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChwYWly
KTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAgICAg
ICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFBhaXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBtYXBwaW5n
LmJlZ2luKCktPmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5zKG9yaWdp
bmFsU3JjKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEFy
Zz4gd29ya2xpc3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3JjKTsKKyAg
ICAgICAgICAgIHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBt
YXBwaW5nLmZpbmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVu
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxl
IHRoYXQgd2UgcHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAg
ICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShzcmMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXItPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKKworICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50UGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocGFpci5zcmMoKSA9PSBzcmMpOworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
KHBhaXIuZHN0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRQYWlyc1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7CisKKyAgICAgICAgICAgIGJvb2wg
aXNSb3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBh
aXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKSA9PSBv
cmlnaW5hbFNyYykgeworICAgICAgICAgICAgICAgICAgICBpc1JvdGF0ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlzUm90YXRlKSB7CisgICAgICAgICAgICAgICAgUm90YXRlIHJv
dGF0ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29tbW9uIGNh
c2UgaXMgdGhhdCB0aGUgcm90YXRlIGRvZXMgbm90IGhhdmUgZnJpbmdlLiBXaGVuIHRoaXMgaGFw
cGVucywgdGhlCisgICAgICAgICAgICAgICAgLy8gbGFzdCBkZXN0aW5hdGlvbiBpcyB0aGUgZmly
c3Qgc291cmNlLgorICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFpcnMubGFzdCgpLmRzdCgp
ID09IG9yaWdpbmFsU3JjKQorICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcCA9IFdURk1v
dmUoY3VycmVudFBhaXJzKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgc2xvdyBwYXRoLiBUaGUgcm90YXRlIGhhcyBmcmluZ2UuCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPEFyZywgU2h1
ZmZsZVBhaXI+IGRzdE1hcHBpbmc7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2h1
ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpCisgICAgICAgICAgICAgICAgICAgICAgICBk
c3RNYXBwaW5nLmFkZChwYWlyLmRzdCgpLCBwYWlyKTsKKworICAgICAgICAgICAgICAgICAgICBT
aHVmZmxlUGFpciBwYWlyID0gZHN0TWFwcGluZy50YWtlKG9yaWdpbmFsU3JjKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlLmxv
b3AuYXBwZW5kKHBhaXIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBk
c3RNYXBwaW5nLmZpbmQocGFpci5zcmMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlciA9PSBkc3RNYXBwaW5nLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpciA9IGl0ZXItPnZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5yZW1vdmUoaXRlcik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcC5yZXZlcnNlKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyaW5nZSBhcHBlYXJz
IGluIHRoZSBzYW1lIG9yZGVyIGFzIGhvdyBpdCBhcHBlYXJlZCBpbiB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gY3VycmVudFBhaXJzLCBzaW5jZSB0aGF0J3MgdGhlIERGUyBvcmRlci4KKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJlbnRQ
YWlycykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG9mIGNvdXJzZSB3ZSBvbmx5
IGluY2x1ZGUgaXQgaWYgaXQncyBub3QgaW4gdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZHN0TWFwcGluZy5jb250YWlucyhwYWlyLmRzdCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByb3RhdGUuZnJpbmdlLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1pbmF0ZXMgYmVjYXVzZSB3ZSByZXR1cm5l
ZCB0byB0aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHBhaXIg
bGlzdCBoYXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxhciBzaGFwZS4KKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KQorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocm90YXRlLmxvb3BbaV0uZHN0KCkgPT0gcm90YXRlLmxvb3Bb
aSArIDFdLnNyYygpKTsKKyAgICAgICAgICAgICAgICByb3RhdGVzLmFwcGVuZChXVEZNb3ZlKHJv
dGF0ZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2hpZnRzLmFkZChv
cmlnaW5hbFNyYywgV1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlLCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4g
VGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRoYXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3
aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhlIGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBX
ZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNh
c2VzOgorICAgIC8vCisgICAgLy8gLSBTaHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBk
c3QgcmVmZXIgdG8gbWVtb3J5LgorICAgIC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVj
dGlvbiBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBn
dWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEgc2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZl
IGEgU2hpZnQgdGhhdAorICAgIC8vIGVuZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9y
IHN1Y2ggYSByZWdpc3RlciByaWdodCBub3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsm
XSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4gT3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkg
eworICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09
IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0
OgorICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91Ymxl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92ZSA9
IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8vIFdl
IHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tz
IG9mIGluc3RydWN0aW9ucywgYW5kIHRoZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVtIHRv
Z2V0aGVyIGluIHJldmVyc2UgKGZvciBleGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJl
c3VsdFBhY2tzIGlzIHBsYWNlZAorICAgIC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVz
ZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdpc3Rl
cnMsIHNvCisgICAgLy8gaXQgYWZmZWN0cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0Lgor
ICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0PiBy
ZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1pdFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJlc3Vs
dFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdldFNj
cmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBUbXAg
eworICAgICAgICBpZiAoc2NyYXRjaGVzW2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0
dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1wKCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0
Y2gpCisgICAgICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5z
dChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVzW2lu
ZGV4XSkpOworICAgICAgICByZXR1cm4gcG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAgICBh
dXRvIHJldHVyblNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAg
ICAgIGlmIChBcmcodG1wKSAhPSBzY3JhdGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4XSwg
dG1wKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25zdCBT
aHVmZmxlUGFpciYgcGFpciwgdW5zaWduZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9wY29k
ZSBtb3ZlID0gbW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtpbmQo
KSkpIHsKKyAgICAgICAgICAgIFRtcCBzY3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRTY3Jh
dGNoKHNjcmF0Y2hJbmRleCwgZmluZFBvc3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygpLCBw
YWlyLmRzdCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpUbXAp
KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53
aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNyYygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG1vdmUgPT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFsdWUo
KSksIHNjcmF0Y2gpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
SW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWlyLmRz
dCgpKSk7CisgICAgICAgICAgICByZXR1cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRjaCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoSW5zdChtb3ZlLCBvcmlnaW4sIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsKKyAg
ICB9OworCisgICAgYXV0byBoYW5kbGVTaGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWlyPiYg
c2hpZnQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG9wdGltaXplIHRoZSBzcGlsbCBi
ZWhhdmlvciBvZiB0aGUgc2hpZnRlciBieSBjaGVja2luZyBpZiBhbnkgb2YgdGhlCisgICAgICAg
IC8vIHNoaWZ0cyBuZWVkIHNwaWxscy4gSWYgdGhleSBkbywgdGhlbiB3ZSBjb3VsZCB0cnkgdG8g
Z2V0IGEgcmVnaXN0ZXIgb3V0IGhlcmUuIE5vdGUgdGhhdAorICAgICAgICAvLyB0aGlzIG1heSBm
YWlsIHdoZXJlIHRoZSBjdXJyZW50IHN0cmF0ZWd5IHN1Y2NlZWRzOiBvdXQgaGVyZSB3ZSBuZWVk
IGEgcmVnaXN0ZXIgdGhhdCBkb2VzCisgICAgICAgIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCBhbnkg
b2YgdGhlIHNoaWZ0cywgd2hpbGUgdGhlIGN1cnJlbnQgc3RyYXRlZ3kgb25seSBuZWVkcyB0byBm
aW5kIGEKKyAgICAgICAgLy8gc2NyYXRjaCByZWdpc3RlciB0aGF0IGRvZXMgbm90IGludGVyZmVy
IHdpdGggYSBwYXJ0aWN1bGFyIHNoaWZ0LiBTbywgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgICAg
Ly8gd2lsbCBiZSBvcHBvcnR1bmlzdGljOiBpZiBpdCBzdWNjZWVkcywgdGhlbiB0aGUgaW5kaXZp
ZHVhbCBzaGlmdHMgY2FuIHVzZSB0aGF0IHNjcmF0Y2gsCisgICAgICAgIC8vIG90aGVyd2lzZSB0
aGV5IHdpbGwgZG8gd2hhdCB0aGV5IGRvIG5vdy4KKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHNoaWZ0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFp
cihzaGlmdFtpXSwgMCk7CisKKyAgICAgICAgQXJnIGxhc3REc3QgPSBzaGlmdC5sYXN0KCkuZHN0
KCk7CisgICAgICAgIGlmIChsYXN0RHN0LmlzVG1wKCkpIHsKKyAgICAgICAgICAgIGZvciAoQXJn
JiBzY3JhdGNoIDogc2NyYXRjaGVzKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2gg
IT0gbGFzdERzdCk7CisgICAgICAgICAgICAgICAgaWYgKCFzY3JhdGNoLmlzVG1wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2NyYXRjaCA9IGxhc3REc3Q7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvLyBGaXJzdCBoYW5kbGUgc2hpZnRzIHdob3NlIGxhc3QgZGVzdGluYXRpb24g
aXMgYSB0bXAgYmVjYXVzZSB0aGVzZSBmcmVlIHVwIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIC8v
IFRoZXNlIGVuZCB1cCBsYXN0IGluIHRoZSBmaW5hbCBzZXF1ZW5jZSwgc28gdGhlIGZpbmFsIGRl
c3RpbmF0aW9uIG9mIHRoZXNlIHNoaWZ0cyB3aWxsIGJlCisgICAgLy8gYXZhaWxhYmxlIGFzIGEg
c2NyYXRjaCBsb2NhdGlvbiBmb3IgYW55dGhpbmcgZW1pdHRlZCBwcmlvciAoc28sIGFmdGVyLCBz
aW5jZSB3ZSdyZSBlbWl0dGluZyBpbgorICAgIC8vIHJldmVyc2UpLgorICAgIGZvciAoYXV0byYg
ZW50cnkgOiBzaGlmdHMpIHsKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBl
bnRyeS52YWx1ZTsKKyAgICAgICAgaWYgKHNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1RtcCgpKQorICAg
ICAgICAgICAgaGFuZGxlU2hpZnQoc2hpZnQpOworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAg
ICB9CisKKyAgICAvLyBOb3cgaGFuZGxlIHRoZSByZXN0IG9mIHRoZSBzaGlmdHMuCisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHNoaWZ0cykgeworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBz
aGlmdCA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1Rt
cCgpKQorICAgICAgICAgICAgaGFuZGxlU2hpZnQoc2hpZnQpOworICAgICAgICBjb21taXRSZXN1
bHQoKTsKKyAgICB9CisKKyAgICBmb3IgKFJvdGF0ZSYgcm90YXRlIDogcm90YXRlcykgeworICAg
ICAgICBpZiAoIXJvdGF0ZS5mcmluZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2UgZG8gdGhlIGZyaW5nZSBmaXJzdCEgVGhpcyB3b24ndCBjbG9iYmVyIGFueSBvZiB0
aGUgcmVnaXN0ZXJzIHRoYXQgYXJlCisgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSByb3RhdGlv
bi4KKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHJvdGF0ZS5mcmluZ2UpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGNhblN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3
YXAgPSBPb3BzOworICAgICAgICBBcmc6OldpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAv
LyBib2d1cyB2YWx1ZQorCisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHN3YXAgaW5zdHJ1Y3Rp
b24gaXMgbm90IGF2YWlsYWJsZSBmb3IgZmxvYXRpbmcgcG9pbnQgb24gYW55IGFyY2hpdGVjdHVy
ZSB3ZQorICAgICAgICAvLyBzdXBwb3J0LgorICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7
CisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgd2Ugd2lsbCBiZSBkb2luZyA2NC1i
aXQgc3dhcHMgb3IgMzItYml0IHN3YXBzLiBJZiB3ZSBoYXZlIGEgbWl4IG9mCisgICAgICAgICAg
ICAvLyB3aWR0aHMgd2UgaGFuZGxlIHRoYXQgYnkgZml4aW5nIHVwIHRoZSByZWxldmFudCByZWdp
c3RlciB3aXRoIHplcm8tZXh0ZW5kcy4KKyAgICAgICAgICAgIHN3YXAgPSBTd2FwMzI7CisgICAg
ICAgICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoMzI7CisgICAgICAgICAgICBib29sIGhhc01l
bW9yeSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChwYWlyLndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7CisgICAg
ICAgICAgICAgICAgICAgIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGFzTWVtb3J5IHw9IHBh
aXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCk7CisgICAgICAgICAg
ICAgICAgaGFzSW5kZXggfD0gcGFpci5zcmMoKS5pc0luZGV4KCkgfHwgcGFpci5kc3QoKS5pc0lu
ZGV4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhblN3YXAg
PSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpUbXApOworCisgICAgICAgICAgICAv
LyBXZSBjYW4gdG90YWxseSB1c2Ugc3dhcHMgZXZlbiBpZiB0aGVyZSBhcmUgc2h1ZmZsZXMgaW52
b2x2aW5nIG1lbW9yeS4gQnV0LCB3ZSBwbGF5IGl0CisgICAgICAgICAgICAvLyBzYWZlIGluIHRo
YXQgY2FzZS4gVGhlcmUgYXJlIGNvcm5lciBjYXNlcyB3ZSBkb24ndCBoYW5kbGUsIGFuZCBvdXIg
YWJpbGl0eSB0byBkbyBpdCBpcworICAgICAgICAgICAgLy8gY29udGluZ2VudCB1cG9uIHN3YXAg
Zm9ybSBhdmFpbGFiaWxpdHkuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYXNNZW1v
cnkpIHsKKyAgICAgICAgICAgICAgICBjYW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6
VG1wLCBBcmc6OkFkZHIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IHRha2UgdGhlIHN3YXBwaW5nIHBhdGggaWYgdGhlcmUgaXMgYSBtaXggb2Ygd2lkdGhz
IGFuZCBzb21lIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHNodWZmbGVzIGludm9sdmUgbWVt
b3J5LiBUaGF0IGdldHMgdG9vIGNvbmZ1c2luZy4gV2UgbWlnaHQgYmUgYWJsZSB0byByZWxheCB0
aGlzCisgICAgICAgICAgICAgICAgLy8gdG8gb25seSBiYWlsIGlmIHRoZXJlIGFyZSBzdWJ3aWR0
aCBwYWlycyBpbnZvbHZpbmcgbWVtb3J5LCBidXQgSSBoYXZlbid0IHRob3VnaHQKKyAgICAgICAg
ICAgICAgICAvLyBhYm91dCBpdCB2ZXJ5IGhhcmQuIEFueXdheSwgdGhpcyBjYXNlIGlzIG5vdCBj
b21tb246IHJvdGF0ZXMgaW52b2x2aW5nIG1lbW9yeQorICAgICAgICAgICAgICAgIC8vIGRvbid0
IGFyaXNlIGZvciBmdW5jdGlvbiBjYWxscywgYW5kIHRoZXkgd2lsbCBvbmx5IGhhcHBlbiBmb3Ig
cm90YXRlcyBpbiB1c2VyIGNvZGUKKyAgICAgICAgICAgICAgICAvLyBpZiBzb21lIG9mIHRoZSB2
YXJpYWJsZXMgZ2V0IHNwaWxsZWQuIEl0J3MgaGFyZCB0byBpbWFnaW5lIGEgcHJvZ3JhbSB0aGF0
IHJvdGF0ZXMKKyAgICAgICAgICAgICAgICAvLyBkYXRhIGFyb3VuZCBpbiB2YXJpYWJsZXMgd2hp
bGUgYWxzbyBkb2luZyBhIGNvbWJpbmF0aW9uIG9mIHVpbnQzMi0+dWludDY0IGFuZAorICAgICAg
ICAgICAgICAgIC8vIGludDY0LT5pbnQzMiBjYXN0cy4KKyAgICAgICAgICAgICAgICBmb3IgKFNo
dWZmbGVQYWlyJiBwYWlyIDogcm90YXRlLmxvb3ApCisgICAgICAgICAgICAgICAgICAgIGNhblN3
YXAgJj0gcGFpci53aWR0aCgpID09IHN3YXBXaWR0aDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGhhc0luZGV4KQorICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZv
cm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGNhblN3YXApIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZS5sb29wLnNp
emUoKSAtIDE7IGktLTspIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZS5sb29w
W2ldLnNyYygpOworICAgICAgICAgICAgICAgIEFyZyByaWdodCA9IHJvdGF0ZS5sb29wW2kgKyAx
XS5zcmMoKTsKKworICAgICAgICAgICAgICAgIGlmIChsZWZ0LmlzTWVtb3J5KCkgJiYgcmlnaHQu
aXNNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBh
IHN1cGVyIHJhcmUgb3V0Y29tZS4gUm90YXRlcyBhcmUgcmFyZS4gU3BpbGxzIGFyZSByYXJlLgor
ICAgICAgICAgICAgICAgICAgICAvLyBNb3ZpbmcgZGF0YSBiZXR3ZWVuIHR3byBzcGlsbHMgaXMg
cmFyZS4gVG8gZ2V0IGhlcmUgYSBsb3Qgb2YgcmFyZSBzdHVmZiBoYXMgdG8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gYWxsIGhhcHBlbiBhdCBvbmNlLgorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBnZXRTY3JhdGNoKDAsIGZpbmRQb3NzaWJs
ZVNjcmF0Y2godHlwZSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5z
dChtb3ZlRm9yV2lkdGgoc3dhcFdpZHRoKSwgb3JpZ2luLCBsZWZ0LCBzY3JhdGNoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIHNjcmF0Y2gs
IHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9y
V2lkdGgoc3dhcFdpZHRoKSwgb3JpZ2luLCBzY3JhdGNoLCBsZWZ0KSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChsZWZ0Lmlz
TWVtb3J5KCkpCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KHN3YXAs
IG9yaWdpbiwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlLmxvb3ApIHsKKyAgICAgICAgICAgICAgICBpZiAo
cGFpci53aWR0aCgpID09IHN3YXBXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpX
aWR0aDMyKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJn
OjpXaWR0aDY0KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlz
VG1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4
dGVuc2lvbi4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmln
aW4sIHBhaXIuZHN0KCksIHBhaXIuZHN0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiB0cmVhdCB0aGlzIGFzIGEgc2hpZnQgc28gbG9u
ZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRlc3RpbmF0aW9uIChpLmUuIGZpcnN0CisgICAgICAgICAg
ICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0IGZpcnN0LiBUaGVuIHdlIGhhbmRsZSB0aGUgZmlyc3Qg
ZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhlIHJvdGF0ZQorICAgICAgICAgICAgLy8gc3BlY2lhbGx5
LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBsYXN0IGRlc3RpbmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNv
bWUgc3BlY2lhbCBjYXJlIHRvCisgICAgICAgICAgICAvLyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rl
ci4gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgYSByb3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRp
cmUKKyAgICAgICAgICAgIC8vIGF2YWlsYWJsZSByZWdpc3RlciBmaWxlLgorCisgICAgICAgICAg
ICBUbXAgc2NyYXRjaCA9IGZpbmRQb3NzaWJsZVNjcmF0Y2goCisgICAgICAgICAgICAgICAgdHlw
ZSwKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKFNodWZmbGVQYWlyIHBhaXIgOiByb3RhdGUubG9vcCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhaXIuc3JjKCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWlyLmRzdCgpLnVzZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5PVEU6
IFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IHVzZSBvZiBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAg
ICAgICAgIHNjcmF0Y2ggPSBnZXRTY3JhdGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICAv
LyBXZSBtYXkgbm90IGhhdmUgZm91bmQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXaGVuIHRoaXMgaGFw
cGVucywgd2UgY2FuIGp1c3QgdXNlIHRoZSBzcGlsbAorICAgICAgICAgICAgLy8gc2xvdCBkaXJl
Y3RseS4KKyAgICAgICAgICAgIEFyZyByb3RhdGVTYXZlID0gc2NyYXRjaCA/IEFyZyhzY3JhdGNo
KSA6IHNjcmF0Y2hlc1swXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlU2hpZnRQ
YWlyKAorICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyKHJvdGF0ZS5sb29wLmxhc3QoKS5kc3Qo
KSwgcm90YXRlU2F2ZSwgcm90YXRlLmxvb3BbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCk7IGktLSA+IDE7KQorICAgICAg
ICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihyb3RhdGUubG9vcFtpXSwgMSk7CisKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihyb3RhdGVT
YXZlLCByb3RhdGUubG9vcFswXS5kc3QoKSwgcm90YXRlLmxvb3BbMF0ud2lkdGgoKSksIDEpOwor
CisgICAgICAgICAgICBpZiAoc2NyYXRjaCkKKyAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNo
KDAsIHNjcmF0Y2gpOworICAgICAgICB9CisKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAg
fQorCisgICAgQVNTRVJUKHJlc3VsdC5pc0VtcHR5KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gcmVzdWx0UGFja3Muc2l6ZSgpOyBpLS07KQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9y
KHJlc3VsdFBhY2tzW2ldKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxJbnN0
PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWlycywKKyAg
ICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjphcnJheTxB
cmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbikKK3sKKyAgICBWZWN0b3I8U2h1
ZmZsZVBhaXI+IGdwUGFpcnM7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBmcFBhaXJzOworICAg
IGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBpZiAocGFp
ci5zcmMoKS5pc01lbW9yeSgpICYmIHBhaXIuZHN0KCkuaXNNZW1vcnkoKSAmJiBwYWlyLndpZHRo
KCkgPiBBcmc6OnBvaW50ZXJXaWR0aCgpKSB7CisgICAgICAgICAgICAvLyA4LWJ5dGUgbWVtb3J5
LXRvLW1lbW9yeSBtb3ZlcyBvbiBhIDMyLWJpdCBwbGF0Zm9ybSBhcmUgYmVzdCBoYW5kbGVkIGFz
IGZsb2F0IG1vdmVzLgorICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgICAg
IH0gZWxzZSBpZiAocGFpci5zcmMoKS5pc0dQKCkgJiYgcGFpci5kc3QoKS5pc0dQKCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBncFBhaXJzIGdldHMgbWVtb3J5LXRvLW1lbW9y
eSBzaHVmZmxlcy4gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZQorICAgICAgICAgICAgLy8gY2Fu
IGRvIHRoYXQgbW9yZSBlZmZpY2llbnRseSB1c2luZyBHUFJzLCBleGNlcHQgaW4gdGhlIHNwZWNp
YWwgY2FzZSBhYm92ZS4KKyAgICAgICAgICAgIGdwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgIH0KKworICAg
IFZlY3RvcjxJbnN0PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZs
ZShncFBhaXJzLCBncFNjcmF0Y2gsIEFyZzo6R1AsIG9yaWdpbikpOworICAgIHJlc3VsdC5hcHBl
bmRWZWN0b3IoZW1pdFNodWZmbGUoZnBQYWlycywgZnBTY3JhdGNoLCBBcmc6OkZQLCBvcmlnaW4p
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQWlyRW1pdFNodWZmbGVfaAorI2RlZmluZSBBaXJFbWl0U2h1ZmZsZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAi
QWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
U2h1ZmZsZVBhaXIgeworcHVibGljOgorICAgIFNodWZmbGVQYWlyKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFNodWZmbGVQYWlyKGNvbnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgQXJn
OjpXaWR0aCB3aWR0aCkKKyAgICAgICAgOiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0
KQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFy
ZyYgc3JjKCkgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZHN0OyB9CisKKyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUg
a2luZCBvZiBtb3ZlIHdlIGRvLiBZb3UgY2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2
NCByaWdodCBub3cuCisgICAgLy8gRm9yIEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQg
TW92ZS4gRm9yIEZQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4K
KyAgICBBcmc6OldpZHRoIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBt
X3NyYzsKKyAgICBBcmcgbV9kc3Q7CisgICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0
aDggfTsKK307CisKKy8vIFBlcmZvcm0gYSBzaHVmZmxlIG9mIGEgZ2l2ZW4gdHlwZS4gVGhlIHNj
cmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0b3J5LiBZb3Ugc2hvdWxkIHBhc3MgaXQgYXMKKy8vIGZv
bGxvd3M6IElmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgb3IgdGVt
cG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhhdCBpcywgdGhleSdyZQorLy8gcmVnaXN0ZXJzIHRoYXQg
YXJlIG5vdCBtZW50aW9uZWQgaW4gdGhlIHNodWZmbGUsIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0
aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QKKy8vIGxpdmUgYXQgdGhlIHNodWZmbGUgLSB0aGVuIHlv
dSBjYW4gcGFzcyB0aGVtLiBJZiB5b3UgZG9uJ3QgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBhdmFp
bGFibGUgb3IgaWYKKy8vIHlvdSBkb24ndCBmZWVsIGxpa2UgbG9va2luZyBmb3IgdGhlbSwgeW91
IGNhbiBwYXNzIG1lbW9yeSBsb2NhdGlvbnMuIEl0J3MgYWx3YXlzIHNhZmUgdG8gcGFzcyBhCisv
LyBwYWlyIG9mIG1lbW9yeSBsb2NhdGlvbnMsIGFuZCByZXBsYWNpbmcgZWl0aGVyIG1lbW9yeSBs
b2NhdGlvbiB3aXRoIGEgcmVnaXN0ZXIgY2FuIGJlIHZpZXdlZCBhcyBhbgorLy8gb3B0aW1pemF0
aW9uLiBJdCdzIGEgcHJldHR5IGltcG9ydGFudCBvcHRpbWl6YXRpb24uIFNvbWUgbW9yZSBub3Rl
czoKKy8vCisvLyAtIFdlIGRlZmluZSBzY3JhdGNoIHJlZ2lzdGVycyBhcyB0aGluZ3MgdGhhdCBh
cmUgbm90IGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFuZCBhcmUgbm90IG9uZSBvZgorLy8gICB0
aGUgZGVzdGluYXRpb25zIG9mIHRoZSBzaHVmZmxlLiBOb3QgYmVpbmcgbGl2ZSBiZWZvcmUgdGhl
IHNodWZmbGUgYWxzbyBtZWFucyB0aGF0IHRoZXkgY2Fubm90CisvLyAgIGJlIHVzZWQgZm9yIGFu
eSBvZiB0aGUgc291cmNlcyBvZiB0aGUgc2h1ZmZsZS4KKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0
Y2ggbG9jYXRpb24gaXMgb25seSBuZWVkZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdo
ZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgKKy8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4K
Ky8vCisvLyAtIFlvdSdyZSBndWFyYW50ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0
aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0
aGUgdHlwZSBhbmQgeW91IGRvbid0IGhhdmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUg
Ym90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4g
R1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYgd2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8v
CisvLyAtIFBhc3NpbmcgbWVtb3J5IGxvY2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5n
IGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHks
IHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBlbWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZp
YyByZWdpc3RlcnMgd2hlbiBpdCBkb2VzIG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5
IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1lbnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1p
dFNodWZmbGUoKSBhZnRlcgorLy8gICByZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFz
b24gd2UgY291bGQgYWRkIGEgU2h1ZmZsZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZl
cgorLy8gICBzaHVmZmxpbmdzIHVudGlsIGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZs
ZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBwYWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91
IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlvdSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3Ug
bmVlZCB0byBkbyB0aGVtLCB0aGVuIG1ha2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1w
b3JhcnkgaXMgb25lIHdheSB0bworLy8gICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KK1Zl
Y3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFy
cmF5PEFyZywgMj4gc2NyYXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVy
Zm9ybSBhIHNodWZmbGUgdGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNj
cmF0Y2ggcmVnaXN0ZXJzIG9yIG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNj
b3JkaW5nIHRvIHRoZSBydWxlcyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAg
ICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywg
Mj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAg
VmFsdWUqIG9yaWdpbik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZp
c2lvbiAxOTQ4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUg
IkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJP
cGNvZGVVdGlscy5oIgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1
ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAg
IH0KIAorICAgIGxvd2VyTWFjcm9zKGNvZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBy
dW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTog
QWRkIEFpciBvcHRpbWl6YXRpb25zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA0NTYKQEAgLTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2Vu
ZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcoY29kZSk7CiAKKyAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAv
LyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGlj
aXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBs
aWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhl
bS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSAr
MzgsMTEgQEAgY2xhc3MgQ29kZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBo
YXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQg
YW55CiAvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdz
Lgotdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhl
IGNvZGUgdXNpbmcgdGhlIGdpdmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRo
aXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBn
ZW5lcmF0aW5nLgotdm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CitKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsNiArMzMsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgewogCit2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGlu
ZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4mIGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYg
aW5zdCA6IGluc3RzKQorICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9p
ZCBJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYg
aW5zdHMpCit7CisgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydElu
c3QoaW5kZXgsIFdURk1vdmUoaW5zdCkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0
ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5
LDYgKzU5LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2Vy
dGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9p
ZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZv
aWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBp
bmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NDg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxNSBAQCBw
dWJsaWM6CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3Jp
Z2luIHx8IG9wY29kZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5k
KCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9
CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25z
dCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVk
aXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3Vu
ZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3
cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVu
dGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5o
IgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgi
CisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNv
ZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxs
b2MiKTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOwor
CisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMo
bGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJs
b2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJs
b2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWdpc3RlclNl
dCBzZXQ7CisKKyAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qu
b3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxv
Y2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dEluZGV4KTsKKworICAgICAgICAgICAgaWYgKHNldC5udW1iZXJPZlNldFJlZ2lzdGVycygpKQor
ICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZpbnN0LCBzZXQpOworICAgICAgICB9
CisgICAgfQorCisgICAgYXV0byBnZXRTY3JhdGNoZXMgPSBbJl0gKFJlZ2lzdGVyU2V0IHNldCwg
QXJnOjpUeXBlIHR5cGUpIC0+IHN0ZDo6YXJyYXk8QXJnLCAyPiB7CisgICAgICAgIHN0ZDo6YXJy
YXk8QXJnLCAyPiByZXN1bHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyAr
K2kpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXNldC5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBUbXAo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcpOworICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAg
ICAgICAgICAgICByZXN1bHRbaV0gPSBBcmc6OnN0YWNrKAorICAgICAgICAgICAgICAgICAgICBj
b2RlLmFkZFN0YWNrU2xvdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJn
Ojpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3RLaW5kOjpBbm9ueW1vdXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICAvLyBOb3cgdHJhbnNmb3JtIHRoZSBjb2Rl
LgorICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2gg
KGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNodWZmbGU6IHsKKyAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCBzZXQgPSB1c2VkUmVnaXN0ZXJzLmdldCgmaW5zdCk7CisgICAgICAg
ICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgaSArPSAzKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbaSArIDBdOworICAgICAgICAgICAgICAg
ICAgICBBcmcgZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCA9IGluc3QuYXJnc1tpICsgMl0ud2lkdGgoKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgdXNlZCByZWdpc3RlciBzZXQgY29udGFpbnMgdGhpbmdzIGxpdmUgYWZ0
ZXIgdGhlIHNodWZmbGUuIEJ1dAorICAgICAgICAgICAgICAgICAgICAvLyBlbWl0U2h1ZmZsZSgp
IHdhbnRzIGEgc2NyYXRjaCByZWdpc3RlciB0aGF0IGlzIG5vdCBqdXN0IGRlYWQgYnV0IGFsc28g
ZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJmZXJlIHdpdGggZWl0aGVyIHNv
dXJjZXMgb3IgZGVzdGluYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBhdXRvIGV4Y2x1ZGVS
ZWdpc3RlcnMgPSBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHRtcC5yZWco
KSk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHNyYy5mb3JF
YWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgZHN0LmZv
ckVhY2hUbXBGYXN0KGV4Y2x1ZGVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0
aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywg
Mj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpHUCk7CisgICAgICAgICAgICAg
ICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6
RlApOworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNj
cmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBD
b2xkQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVn
c1RvU2F2ZSA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKworICAgICAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHByZVVzZWQgPSByZWdzVG9TYXZlOworICAgICAgICAgICAgICAgIFZlY3RvcjxB
cmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFsdWUp
OworICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+
IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXN0aW5h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdz
W3Jlc3VsdCA/IChpID49IDEgPyBpICsgMSA6IGkpIDogaSBdOworICAgICAgICAgICAgICAgICAg
ICBBcmcgZHN0ID0gZGVzdGluYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNodWZmbGVQYWlyKHNyYywgZHN0LCB3aWR0aCkpOwor
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXhjbHVkZVJlZ2lzdGVycyA9IFsmXSAoVG1wIHRt
cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByZVVzZWQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHNyYy5mb3JFYWNoVG1wRmFzdChleGNsdWRl
UmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgZHN0LmZvckVhY2hUbXBGYXN0KGV4Y2x1
ZGVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpHUCk7
CisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGZwU2NyYXRjaCA9IGdldFNjcmF0
Y2hlcyhwcmVVc2VkLCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBBbHNvIG5lZWQgdG8gc2F2ZSBhbGwgbGl2ZSByZWdpc3RlcnMuIERvbid0IG5lZWQgdG8g
d29ycnkgYWJvdXQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyLgorICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
Y2xlYXIocmVzdWx0LnJlZygpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKKyAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lk
dGgoYXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNr
U2xvdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJn
OjpieXRlcyh3aWR0aCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNr
U2xvdCksIHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVu
ZChzdGFja1Nsb3QpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoCisgICAgICAgICAgICAg
ICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNo
LCBpbnN0Lm9yaWdpbikpOworCisgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29k
ZSwgaW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cg
d2UgbmVlZCB0byBlbWl0IGNvZGUgdG8gcmVzdG9yZSByZWdpc3RlcnMuCisgICAgICAgICAgICAg
ICAgcGFpcnMucmVzaXplKDApOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrU2xvdElu
ZGV4ID0gMDsKKyAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgVG1wIHRt
cChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgo
YXJnLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IHN0YWNrU2xvdHNbc3RhY2tTbG90SW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoQXJnOjpzdGFjayhzdGFja1Nsb3QpLCBhcmcsIHdp
ZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpcihyZXN1bHQsIGluc3Qu
YXJnc1sxXSwgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZWdzVG9TYXZlLnNl
dChyZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdwU2Ny
YXRjaCA9IGdldFNjcmF0Y2hlcyhyZWdzVG9TYXZlLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAg
ICBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpGUCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAg
ICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3Jh
dGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisKKyAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmco
CisgICAgICAgICAgICBbJl0gKEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiAhaW5zdDsKKyAgICAgICAgICAgIH0pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlckFmdGVyUmVnQWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTG93
ZXJBZnRlclJlZ0FsbG9jX2gKKyNkZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1ZmZsZSBhbmQgQ29s
ZENDYWxsIGluc3RydWN0aW9ucy4gVGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0byBiZSBydW4gYWZ0
ZXIgcmVnaXN0ZXIKKy8vIGFsbG9jYXRpb24uCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENv
ZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJMb3dlck1hY3Jvcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUoY29kZSwgImxvd2VyTWFjcm9zIik7CisKKyAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAg
ICAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBWZWN0
b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZh
bHVlKTsKKworICAgICAgICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxlLCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUoKSA9
PSBWb2lkID8gMCA6IDE7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
Y2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1
bWVudHMuYXJncy5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOworICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhB
cmcoQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgsIFdU
Rk1vdmUoc2h1ZmZsZUFyZ3VtZW50cykpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUg
dGhhdCB3ZSdyZSB1c2luZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uc1swXSA9IGluc3QuYXJnc1swXTsKKworICAgICAgICAgICAgICAg
IC8vIFNhdmUgd2hlcmUgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0Lgor
ICAgICAgICAgICAgICAgIEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyBB
cmcoKSA6IGluc3QuYXJnc1sxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
bnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKworICAg
ICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdElu
ZGV4ICsgMSwgTW92ZUZsb2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91Ymxl
LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0
RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgg
KyAxLCBNb3ZlLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyTG93ZXJNYWNyb3NfaAorI2RlZmluZSBBaXJMb3dlck1hY3Jvc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFpciBoYXMgc29tZSBvcGNvZGVzIHRoYXQgYXJl
IHZlcnkgaGlnaC1sZXZlbCBhbmQgYXJlIG1lYW50IHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGxv
dy1sZXZlbAorLy8ga25vd2xlZGdlIGluIHRoZSBCMy0+QWlyIGxvd2VyaW5nLiBUaGUgY3VycmVu
dCBleGFtcGxlIGlzIENDYWxsLgorCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckxvd2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTQ4NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkp
CkBAIC00MDcsNiArNDA3LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIFRtcCwgSW5k
ZXggYXMgc3RvcmVQdHIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCit4ODY6IFN3
YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKworeDg2
XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgVG1wLCBBZGRy
CisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJU
b1B0cgogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY3Miw3ICs2ODAsMTkgQEAgUmV0RG91
YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBTaHVmZmxlIGlzIGEg
bXVsdGktc291cmNlLCBtdWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11bHRhbmVvdXNseSBk
b2VzIG11bHRpcGxlIG1vdmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUgc3BlY2lmaWVkIGFz
IHRyaXBsZXRzIG9mIHNyYywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxlIHlvdSBjYW4gcmVx
dWVzdCBhIHN3YXAgdGhpcworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAxLCAldG1wMiwgNjQs
ICV0bXAyLCAldG1wMSwgNjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFsbG93cyBmb3IgZXhv
dGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBi
eSB0aGUgU3BlY2lhbCBvcGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5k
LgogY3VzdG9tIFBhdGNoCiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxvd2VyaW5nIEMgY2Fs
bHMuIFRoZXNlIGRvbid0IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRoZXkgZ2V0IGxvd2Vy
ZWQgdG8KKyMgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFsdWUgbXVzdCBiZSBh
IENDYWxsVmFsdWUuCitjdXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwKKworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
aAkocmV2aXNpb24gMTk0ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBjb25zdCBWZWN0
b3I8dHlwZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBlCiAgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJp
b3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7CiB9CiAKLWNvbnN0IFZlY3RvcjxS
ZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CitKU19FWFBPUlRfUFJJVkFURSBj
b25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOwogCiB9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzA3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5o
IgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlv
cml0eS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgorI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlB1cmVOYU4uaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUg
PG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRl
IDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworLy8g
V2UgZG9uJ3QgaGF2ZSBhIE5PX1JFVFVSTl9EVUVfVE9fRVhJVCwgbm9yIHNob3VsZCB3ZS4gVGhh
dCdzIHJpZGljdWxvdXMuCitzdGF0aWMgYm9vbCBoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklz
U3R1cGlkKCkgeyByZXR1cm4gdHJ1ZTsgfQorCitzdGF0aWMgdm9pZCB1c2FnZSgpCit7CisgICAg
ZGF0YUxvZygiVXNhZ2U6IHRlc3RiMyBbPGZpbHRlcj5dXG4iKTsKKyAgICBpZiAoaGlkZGVuVHJ1
dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpKQorICAgICAgICBleGl0KDEpOworfQorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXI7CisKK25hbWVzcGFjZSB7CisKK1N0YXRpY0xvY2sgY3Jhc2hMb2NrOworCisv
LyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNz
ZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2soKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0
aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsg
XAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitWTSogdm07CisKK3N0
ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUoQjM6OlByb2NlZHVyZSYgcHJv
YykKK3sKKyAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLmNvZGUoKSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvYy5jb2RlKCksIGppdCk7CisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKworICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgKCJ0ZXN0YWlyIGNvbXBpbGF0aW9uIikpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3Rz
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitU
IGludm9rZShjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQo
KikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihCMzo6UHJvY2VkdXJlJiBw
cm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIGludm9rZTxU
PigqY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3RTaW1w
bGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5j
b2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0MiksIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJv
YykgPT0gNDIpOworfQorCisvLyBVc2UgdGhpcyB0byBwdXQgYSBjb25zdGFudCBpbnRvIGEgcmVn
aXN0ZXIgd2l0aG91dCBBaXIgYmVpbmcgYWJsZSB0byBzZWUgdGhlIGNvbnN0YW50LgordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQgbG9hZENvbnN0YW50SW1wbChCYXNpY0Jsb2NrKiBibG9jaywg
VCB2YWx1ZSwgQjM6OkFpcjo6T3Bjb2RlIG1vdmUsIFRtcCB0bXAsIFRtcCBzY3JhdGNoKQorewor
ICAgIHN0YXRpYyBTdGF0aWNMb2NrIGxvY2s7CisgICAgc3RhdGljIHN0ZDo6bWFwPFQsIFQqPiog
bWFwOyAvLyBJJ20gbm90IG1lc3Npbmcgd2l0aCBIYXNoTWFwJ3MgcHJvYmxlbXMgd2l0aCBpbnRl
Z2Vycy4KKworICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgIGlmICghbWFwKQorICAg
ICAgICBtYXAgPSBuZXcgc3RkOjptYXA8VCwgVCo+KCk7CisKKyAgICBpZiAoIW1hcC0+Y291bnQo
dmFsdWUpKQorICAgICAgICAoKm1hcClbdmFsdWVdID0gbmV3IFQodmFsdWUpOworCisgICAgVCog
cHRyID0gKCptYXApW3ZhbHVlXTsKKyAgICBibG9jay0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgc2NyYXRjaCk7CisgICAgYmxv
Y2stPmFwcGVuZChtb3ZlLCBudWxscHRyLCBBcmc6OmFkZHIoc2NyYXRjaCksIHRtcCk7Cit9CisK
K3ZvaWQgbG9hZENvbnN0YW50KEJhc2ljQmxvY2sqIGJsb2NrLCBpbnRwdHJfdCB2YWx1ZSwgVG1w
IHRtcCkKK3sKKyAgICBsb2FkQ29uc3RhbnRJbXBsPGludHB0cl90PihibG9jaywgdmFsdWUsIE1v
dmUsIHRtcCwgdG1wKTsKK30KKwordm9pZCBsb2FkRG91YmxlQ29uc3RhbnQoQmFzaWNCbG9jayog
YmxvY2ssIGRvdWJsZSB2YWx1ZSwgVG1wIHRtcCwgVG1wIHNjcmF0Y2gpCit7CisgICAgbG9hZENv
bnN0YW50SW1wbDxkb3VibGU+KGJsb2NrLCB2YWx1ZSwgTW92ZURvdWJsZSwgdG1wLCBzY3JhdGNo
KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86
OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikp
OworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRdOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJh
c2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworfQorCit2b2lk
IHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRD
b25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQo
CisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiks
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzVdOworICAgIFRtcCBiYXNl
ID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQo
dGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRS
dW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0so
dGhpbmdzWzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVDSyh0
aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworfQorCit2b2lkIHRl
c3RTaHVmZmxlTG9uZ1NoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxv
YWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAo
R1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86
OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykp
OworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBU
bXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86
OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhp
bmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJn
OjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRd
ID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3NbNl0g
PT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVmZmxl
TG9uZ1NoaWZ0QmFja3dhcmRzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxv
YWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAo
R1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86
OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykp
OworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6
cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhp
bmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJn
OjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJn
OjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRd
ID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3NbNl0g
PT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVmZmxl
U2ltcGxlUm90YXRlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRdOwor
ICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJh
c2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDQpOworfQorCit2b2lk
IHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMy
X3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwg
c2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJv
YykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09
IDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDM1KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
dW5zaWduZWQgY291bnQgPSAxOworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3MpIHsKKyAgICAgICAg
aWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVnVDApKQorICAgICAgICAgICAgbG9hZENvbnN0YW50
KHJvb3QsIGNvdW50KyssIFRtcChyZWcpKTsKKyAgICB9CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJv
b3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7
CisgICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAgIHNo
dWZmbGUuYXBwZW5kKFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMikpOworICAgIH0KKworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRk
U3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2lu
ZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsr
aSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBB
cmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQz
Ml90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgZm9yIChpbnQzMl90IHRoaW5n
IDogdGhpbmdzKQorICAgICAgICBDSEVDSyh0aGluZyA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNo
dWZmbGVUcmVlU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChy
b290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJ
bmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVn
VDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7Cisg
ICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QxKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChH
UFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVn
VDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3Nb
OF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFk
ZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFk
ZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFk
ZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
cm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9
PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0g
Mik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s2XSA9PSAz
KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVUcmVl
U2hpZnRCYWNrd2FyZCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAg
IGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBU
bXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUklu
Zm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdU
NikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q2
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdU
MSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRk
cihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
MSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAy
KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDMp
OworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVRyZWVT
aGlmdE90aGVyQmFja3dhcmQoKQoreworICAgIC8vIE5PVEU6IFRoaXMgdGVzdCB3YXMgbXkgb3Jp
Z2luYWwgYXR0ZW1wdCBhdCBUcmVlU2hpZnRCYWNrd2FyZCBidXQgbWlzdGFrZXMgd2VyZSBtYWRl
LiBTbywgdGhpcworICAgIC8vIGVuZHMgdXAgYmVpbmcganVzdCBhIHdlaXJkIHRlc3QuIEJ1dCB3
ZWlyZCB0ZXN0cyBhcmUgdXNlZnVsLCBzbyBJIGtlcHQgaXQuCisgICAgCisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBU
bXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUs
IG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdU
NyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChH
UFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUNyksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFy
Zzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJn
OjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJn
OjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9m
KHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwor
CisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSA4KTsK
KyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gOCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDcpOwor
ICAgIENIRUNLKHRoaW5nc1s0XSA9PSA3KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA1KTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAg
ICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFy
Zzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJn
OjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJn
OjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisg
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRd
ID09IDMpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAxKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZs
ZVJvdGF0ZVdpdGhGcmluZ2UoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
NSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChH
UFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsK
KyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykp
LCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihi
YXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s1
XSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAo
R1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2Us
IDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90
KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2Us
IDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90
KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
NSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOwor
ICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0so
dGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0
aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOworICAgIENIRUNLKHRo
aW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVNdWx0aXBsZVJvdGF0ZXMoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRD
b25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYs
IFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZs
ZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5n
c1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQo
dGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRS
dW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0so
dGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0
aGluZ3NbM10gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRo
aW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0QW5kUm90YXRlKCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAo
R1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86
OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkp
OworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBy
b290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUklu
Zm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3Qg
dGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENI
RUNLKHRoaW5nc1szXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hF
Q0sodGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdzKCkK
K3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFy
Zzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENv
bnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJlZ3NbaV0pKTsKKyAgICBJbnN0JiBzaHVmZmxlID0g
cm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tp
IC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiBy
ZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYp
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
WzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2so
c2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
KTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSAzNSAr
IHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIC0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3Rh
dGVBbGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9
IHByb2MuY29kZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlv
cml0eU9yZGVyKEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbG9hZENvbnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJlZ3NbaV0pKTsKKyAgICBJbnN0
JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVu
ZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSk7CisgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3MubGFzdCgpKSwgVG1wKHJlZ3NbMF0p
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgU3RhY2tTbG90KiBzbG90ID0g
Y29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNp
emUoKTsgKytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVn
c1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOworCisgICAgVmVj
dG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50
MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290
LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
CisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGlu
Z3NbMF0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihyZWdzLnNpemUoKSkgLSAxKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hF
Q0sodGhpbmdzW2ldID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgLSAxKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXA2NCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9j
OworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAwMDAw
MDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAw
MDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMykp
OworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0aGlu
Z3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNDAwMDAw
MDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAwMDAw
bGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQ2NCgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEw
MDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpy
ZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQp
KTsKKworICAgIGludDY0X3QgdGhpbmdzWzVdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNp
emVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFk
ZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3Mp
KTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENI
RUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3Nb
MV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMwMDAw
MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAwMDAw
MGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNDAwMDAwMDAwMDAwMDAwMDBsbCk7Cit9CisK
K3ZvaWQgdGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAy
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
MykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0
aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNDAw
MDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IHN0YXRpY19jYXN0PHVp
bnQzMl90PigzMDAwMDAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlm
dE1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygp
OworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5m
bzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwg
VG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAg
cm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1s1XTsK
KyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykp
LCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2Us
IDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwg
QXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBz
aXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAw
MDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0
aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09
IHN0YXRpY19jYXN0PHVpbnQzMl90Pig0MDAwMDAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVTaGlmdE1lbW9yeSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVtb3J5WzJdOworICAg
IG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVt
b3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBT
aHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIEFyZzo6YWRk
cihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbMl07CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDM1KTsKKyAgICBD
SEVDSyhtZW1vcnlbMV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlM
b25nKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOworCisgICAgaW50MzJfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7Cisg
ICAgbWVtb3J5WzFdID0gMzY7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QzKSk7
CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAgKiBzaXplb2YoaW50MzJfdCkp
LAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisg
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAxICogc2l6ZW9mKGludDMyX3Qp
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDMpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3Qg
dGhpbmdzWzNdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1l
bXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDM2KTsKKyAgICBD
SEVDSyhtZW1vcnlbMF0gPT0gMik7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVt
b3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAg
VmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVn
cy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCBpICsgMSwgVG1wKHJlZ3Nb
aV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9y
eSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVn
c1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDMyX3Qp
KSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAg
ICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50MzJfdCkpLAor
ICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQzMl90
KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChyZWdzWzFdKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAo
cmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisg
ICAgICAgICAgICBNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7
CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDM2
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICBDSEVD
SyhtZW1vcnlbMF0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwordm9p
ZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBtZW1v
cnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0g
PSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9y
aXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVn
VDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25z
dGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAg
ICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAg
ICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBBcmc6OmFk
ZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFy
Zzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAx
XSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIFZl
Y3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
WzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAg
IE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdU
MCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVD
Syh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0g
MzYwMDAwMDAwMDAwMDBsbCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90
PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDEwMDAwMDAw
MDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQor
CitpbnQ2NF90IGNvbWJpbmVIaUxvKGludDY0X3QgaGlnaCwgaW50NjRfdCBsb3cpCit7CisgICAg
dW5pb24geworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICBpbnQzMl90IGhhbHZlc1sy
XTsKKyAgICB9IHU7CisgICAgdS52YWx1ZSA9IGhpZ2g7CisgICAgdS5oYWx2ZXNbMF0gPSBzdGF0
aWNfY2FzdDxpbnQzMl90Pihsb3cpOworICAgIHJldHVybiB1LnZhbHVlOworfQorCit2b2lkIHRl
c3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0X3Qg
bWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVtb3J5
WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Q
cmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86
OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0pKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoCisg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1swXSks
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAgICAg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7
IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNodWZmbGUuYXBwZW5kKAorICAgICAg
ICAgICAgVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLAorICAgICAgICAgICAgKGkgJiAx
KSA/IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSA6IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDY0KSk7CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwg
NjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9v
dC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIH0K
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwbGwpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMzYwMDAwMDAwMDAw
MDBsbCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEwMDAw
MDAwMDAwMDBsbDsKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09ICgoaSAmIDEpID8gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSA6IHZhbHVlKSk7CisgICAgfQorICAgIENIRUNLKG1lbW9y
eVswXSA9PSBjb21iaW5lSGlMbygzNTAwMDAwMDAwMDAwMGxsLCAxMDAwMDAwMDAwMDAwbGwpKTsK
KyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVSb3RhdGVNZW1vcnkoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAgICBt
ZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9y
eSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAq
IHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6
ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEg
KiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAg
ICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBU
bXAoR1BSSW5mbzo6cmVnVDApLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNik7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEp
OworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUp
OworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5NjQoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90
IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9y
eVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwbGws
IFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpLAorCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNp
emVvZihpbnQ2NF90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1syXTsKKyAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2Yo
aW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzYwMDAwMDAwMDAwMDBsbCk7
CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVt
b3J5WzBdID09IDIwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAw
MDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5TWl4ZWRXaWR0
aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNv
ZGUoKTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAw
MDAwMDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEw
MDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDIwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAg
ICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAor
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwK
KyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhp
bmdzWzJdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFk
ZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
cm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9
PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KDEwMDAwMDAwMDAwMDBsbCkpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyMDAw
MDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSBjb21iaW5lSGlMbygzNjAwMDAw
MDAwMDAwMGxsLCAzNTAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3Rh
dGVNZW1vcnlBbGxSZWdzNjQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1v
cnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAw
bGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQ
KTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFz
aWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsg
MSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXpl
b2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSwKKworICAgICAgICByZWdzLmxhc3QoKSwgcmVnc1swXSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoNjQpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUo
KTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVn
c1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBWZWN0b3I8aW50NjRf
dD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBudWxs
cHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IHN0YXRpY19jYXN0PGludDY0X3Q+KHJlZ3Muc2l6ZSgpKSAqIDEwMDAwMDAwMDAwMDBsbCk7
CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3Nb
aV0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAgIENI
RUNLKG1lbW9yeVswXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsxXSA9
PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFs
bFJlZ3NNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5
WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxs
OworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7
CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAoaSArIDEp
ICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJl
Z1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
NjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9m
KGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisKKyAgICAgICAgcmVncy5sYXN0KCksIHJlZ3NbMF0sIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7
ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3Nb
aV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgVmVjdG9yPGludDY0X3Q+
IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVsbHB0
ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVv
ZihpbnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVncy5zaXplKCkp
ICogMTAwMDAwMDAwMDAwMGxsKSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0YXRpY19jYXN0
PHVpbnQzMl90PigzNjAwMDAwMDAwMDAwMGxsKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsg
aSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzBd
ID09IGNvbWJpbmVIaUxvKDM1MDAwMDAwMDAwMDAwbGwsIDEwMDAwMDAwMDAwMDBsbCkpOworICAg
IENIRUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1
ZmZsZVN3YXBEb3VibGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCAxLCBUbXAoRlBSSW5mbzo6ZnBSZWdU
MCksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCAy
LCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRE
b3VibGVDb25zdGFudChyb290LCAzLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCA0LCBUbXAoRlBSSW5mbzo6
ZnBSZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAg
ICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBUbXAo
RlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAg
VG1wKEZQUkluZm86OmZwUmVnVDMpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBkb3VibGUgdGhpbmdzWzRdOworICAgIFRtcCBiYXNl
ID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBBcmc6OmFkZHIoYmFz
ZSwgMSAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51
bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
ZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBS
SW5mbzo6ZnBSZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cit9
CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdERvdWJsZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDEsIFRt
cChGUFJJbmZvOjpmcFJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJs
ZUNvbnN0YW50KHJvb3QsIDIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDMsIFRtcChGUFJJbmZvOjpmcFJl
Z1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3Qs
IDQsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9v
dC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoRlBSSW5m
bzo6ZnBSZWdUMiksIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpKTsKKworICAgIGRvdWJsZSB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgQXJnOjphZGRy
KGJhc2UsIDAgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91Ymxl
LCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1w
KEZQUkluZm86OmZwUmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihkb3VibGUpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJl
Z1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsK
KyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNL
KHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0so
dGhpbmdzWzJdID09IDMpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKK30KKworI2RlZmlu
ZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAo
IXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0YXNrcy5hcHBlbmQoICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY3JlYXRlU2hhcmVkVGFzazx2
b2lkKCk+KCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFsmXSAoKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCN0ZXN0ICIuLi5cbiIp
OyAgICAgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6IE9LIVxuIik7ICAgXAorICAg
ICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKTsKKwordm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQoreworICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CisKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7
CisKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdE5hbWUpIC0+IGJv
b2wgeworICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNhc2VzdHIodGVzdE5hbWUsIGZp
bHRlcik7CisgICAgfTsKKworICAgIFJVTih0ZXN0U2ltcGxlKCkpOworICAgIAorICAgIFJVTih0
ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQo
KSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZs
ZUxvbmdTaGlmdEJhY2t3YXJkcygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVSb3RhdGUo
KSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkpOworICAgIFJVTih0ZXN0
U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0
KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZVRyZWVTaGlmdE90aGVyQmFja3dhcmQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxl
TXVsdGlwbGVTaGlmdHMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVXaXRoTG9uZ0ZyaW5nZSgpKTsKKyAgICBSVU4o
dGVzdFNodWZmbGVNdWx0aXBsZVJvdGF0ZXMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRB
bmRSb3RhdGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdzKCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZVJvdGF0ZUFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxl
U3dhcDY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKSk7CisgICAgUlVO
KHRlc3RTaHVmZmxlU3dhcE1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRN
aXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5TG9uZygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlm
dE1lbW9yeUFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdz
NjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnkoKSk7CisgICAgUlVOKHRlc3RTaHVm
ZmxlUm90YXRlTWVtb3J5NjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5TWl4
ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzNjQoKSk7
CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKSk7Cisg
ICAgUlVOKHRlc3RTaHVmZmxlU3dhcERvdWJsZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlm
dERvdWJsZSgpKTsKKworICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdlKCk7
CisKKyAgICBMb2NrIGxvY2s7CisKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nl
c3NvckNvcmVzKCk7IGktLTspIHsKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoCisgICAgICAgICAg
ICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAorICAgICAg
ICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrcy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+cnVu
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisgICAgfQor
CisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgY3Jhc2hMb2NrLmxvY2soKTsKK30K
KworfSAvLyBhbm9ueW1vaXMgbmFtZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisK
K3N0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFyKikKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMg
bm90IGVuYWJsZWQuXG4iKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBu
dWxscHRyOworICAgIHN3aXRjaCAoYXJnYykgeworICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAyOgorICAgICAgICBmaWx0ZXIgPSBhcmd2WzFdOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICB1c2FnZSgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgcnVuKGZpbHRlcik7CisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268990</attachid>
            <date>2016-01-14 12:52:52 -0800</date>
            <delta_ts>2016-01-14 13:41:33 -0800</delta_ts>
            <desc>fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>203046</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxNi0wMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBuZWVkcyBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbnN0cnVjdGlvbiBjYWxsZWQg
U2h1ZmZsZS4gU2h1ZmZsZSBhbGxvd3MgeW91IHRvIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0KKyAg
ICAgICAgbXVsdGlwbGUgbW92ZXMgdG8gcGVyZm9ybSBhcmJpdHJhcnkgcGVybXV0YXRpb25zIG92
ZXIgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuIFdlIGNhbGwgdGhlc2UKKyAgICAgICAgcm90YXRpb25z
LiBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSAic2hpZnRzIiwgbGlrZSAoYSA9PiBiLCBi
ID0+IGMpOiBhZnRlciB0aGUgc2hpZnQsCisgICAgICAgIGMgd2lsbCBoYXZlIGIncyBvbGQgdmFs
dWUsIGIgd2lsbCBoYXZlIGEncyBvbGQgdmFsdWUsIGFuZCBhIHdpbGwgYmUgdW5jaGFuZ2VkLiBT
aGlmdHMgY2FuCisgICAgICAgIHVzZSBpbW1lZGlhdGVzIGFzIHRoZWlyIHNvdXJjZS4KKworICAg
ICAgICBTaHVmZmxlIGlzIGFkZGVkIGFzIGEgY3VzdG9tIGluc3RydWN0aW9uLCBzaW5jZSBpdCBo
YXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBJdAorICAgICAgICB0YWtlcyBhbnkg
bnVtYmVyIG9mIHRyaXBsZXRzIG9mIGFyZ3VtZW50cywgd2hlcmUgZWFjaCB0cmlwbGV0IGRlc2Ny
aWJlcyBvbmUgbWFwcGluZyBvZiB0aGUKKyAgICAgICAgc2h1ZmZsZS4gRm9yIGV4YW1wbGUsIHRv
IHJlcHJlc2VudCAoYSA9PiBiLCBiID0+IGMpLCB3ZSBtaWdodCBzYXk6CisKKyAgICAgICAgICAg
IFNodWZmbGUgJWEsICViLCA2NCwgJWIsICVjLCA2NAorCisgICAgICAgIE5vdGUgdGhlICI2NCJz
LCB0aG9zZSBhcmUgd2lkdGggYXJndW1lbnRzIHRoYXQgZGVzY3JpYmUgaG93IG1hbnkgYml0cyBv
ZiB0aGUgcmVnaXN0ZXIgYXJlCisgICAgICAgIGJlaW5nIG1vdmVkLiBFYWNoIHRyaXBsZXQgaXMg
cmVmZXJyZWQgdG8gYXMgYSAic2h1ZmZsZSBwYWlyIi4gV2UgY2FsbCBpdCBhIHBhaXIgYmVjYXVz
ZSB0aGUKKyAgICAgICAgbW9zdCByZWxldmFudCBwYXJ0IG9mIGl0IGlzIHRoZSBwYWlyIG9mIHJl
Z2lzdGVycyBvciBtZW1yb3kgbG9jYXRpb25zIChpLmUuICVhLCAlYiBmb3JtIG9uZQorICAgICAg
ICBvZiB0aGUgcGFpcnMgaW4gdGhlIGV4YW1wbGUpLiBGb3IgR1AgYXJndW1lbnRzLCB0aGUgd2lk
dGggZm9sbG93cyBaRGVmIHNlbWFudGljcy4KKworICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSB3
aWxsIGJlIGFibGUgdG8gdXNlIFNodWZmbGUgZm9yIGEgbG90IG9mIHRoaW5ncy4gVGhpcyBwYXRj
aCBpcyBtb2Rlc3QgYWJvdXQKKyAgICAgICAgaG93IHRvIHVzZSBpdDoKKworICAgICAgICAtIEMg
Y2FsbGluZyBjb252ZW50aW9uIGFyZ3VtZW50IG1hcnNoYWxsaW5nLiBQcmV2aW91c2x5IHdlIHVz
ZWQgbW92ZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGF0J3MKKyAgICAgICAgICBwcm9ibGVtYXRpYyBz
aW5jZSBpdCBpbnRyb2R1Y2VzIGFydGlmaWNpYWwgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIGFy
Z3VtZW50IHJlZ2lzdGVycyBhbmQKKyAgICAgICAgICB0aGUgaW5wdXRzLiBVc2luZyBTaHVmZmxl
IHJlbW92ZXMgdGhhdCBpbnRlcmZlcmVuY2UuIFRoaXMgaGVscHMgYSBiaXQuCisKKyAgICAgICAg
LSBDb2xkIEMgY2FsbHMuIFRoaXMgaXMgd2hhdCByZWFsbHkgbW90aXZhdGVkIG1lIHRvIHdyaXRl
IHRoaXMgcGF0Y2guIElmIHdlIGhhdmUgYSBDIGNhbGwgb24KKyAgICAgICAgICBhIGNvbGQgcGF0
aCwgdGhlbiB3ZSB3YW50IGl0IHRvIGFwcGVhciB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGxp
a2UgaXQgZG9lc24ndCBjbG9iYmVyCisgICAgICAgICAgYW55IHJlZ2lzdGVycy4gT25seSBhZnRl
ciByZWdpc3RlciBhbGxvY2F0aW9uIHNob3VsZCB3ZSBoYW5kbGUgdGhlIGNsb2JiZXJpbmcgYnkg
c2ltcGx5CisgICAgICAgICAgc2F2aW5nIGFsbCBvZiB0aGUgbGl2ZSB2b2xhdGlsZSByZWdpc3Rl
cnMgdG8gdGhlIHN0YWNrLiBJZiB5b3UgaW1hZ2luZSB0aGUgc2F2aW5nIGFuZCB0aGUKKyAgICAg
ICAgICBhcmd1bWVudCBtYXJzaGFsbGluZywgeW91IGNhbiBzZWUgaG93IGJlZm9yZSB0aGUgY2Fs
bCwgd2Ugd2FudCB0byBoYXZlIGEgU2h1ZmZsZSB0aGF0IGRvZXMKKyAgICAgICAgICBib3RoIG9m
IHRob3NlIHRoaW5ncy4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGFyZ3VtZW50IG1hcnNoYWxsaW5n
IHdhcyBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgIHNhdmluZywgdGhlbiB3ZSdkIHN0aWxs
IGFwcGVhciB0byBjbG9iYmVyIGFyZ3VtZW50IHJlZ2lzdGVycy4gRG9pbmcgdGhlbSB0b2dldGhl
ciBhcyBvbmUKKyAgICAgICAgICBTaHVmZmxlIG1lYW5zIHRoYXQgdGhlIGNvbGQgY2FsbCBkb2Vz
bid0IGFwcGVhciB0byBldmVuIGNsb2JiZXIgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKworICAg
ICAgICBJJ20gc3RpbGwgdGVzdGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRo
aXMgY2hhbmdlLiBDdXJyZW50bHksIGl0IHBhc3NlcyB0ZXN0cy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6aXNYODZfNjQpOgorICAgICAgICAoSlNDOjppc0lPUyk6CisgICAgICAgIChK
U0M6Om9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Onplcm9FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OnN3YXAzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjptb3ZlQ29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3Jl
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN3YXA2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3Zl
NjRUb0RvdWJsZSk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1i
bGVyOjp4Y2hnbF9ybSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6eGNoZ3FfcnIpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdxX3JtKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjptb3ZsX3JyKToKKyAgICAgICAgKiBiMy9CM0NDYWxsVmFsdWUuaDoKKyAgICAg
ICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9u
OjpDb21waWxhdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6fkNvbXBpbGF0
aW9uKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgIChKU0M6OkIzOjpD
b21waWxhdGlvbjo6Y29kZSk6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6Y3JlYXRlU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJz
aGFsbENDYWxsQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzT3BhcXVlQnlwcm9k
dWN0cy5oOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6Y291bnQpOgorICAg
ICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNTdGFja01lbW9yeSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnVzZXNUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmNhblJl
cHJlc2VudCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNDb21wYXRpYmxlVHlwZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNX
YXJtVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjb29sZWQpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzRWFybHlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW1QdHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpZHRoQXJnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NvbWVJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQWRkcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1v
cnkpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUmVsQ29uZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc1dpZHRoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FsaXZlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5zdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmNvbXB1dGVDQ2Fs
bGluZ0NvbnZlbnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjQ2FsbFJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OmJ1aWxkQ0NhbGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJD
Q2FsbGluZ0NvbnZlbnRpb24uaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cHJvYyk6CisgICAgICAgICogYjMvYWlyL0Fp
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6
aXNWYWxpZEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6Z2VuZXJh
dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206OmdlbmVyYXRlKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBhdGNoQ3Vz
dG9tOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6YWRtaXRzU3RhY2spOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2xkQ0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjpmb3JFYWNoQXJnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZl
Y3RzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjplbWl0U2h1ZmZsZSk6CisgICAgICAgICogYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6U2h1ZmZsZVBhaXIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6c3JjKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmRzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZm
bGVQYWlyOjp3aWR0aCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAqIGIzL2Fp
ci9BaXJHZW5lcmF0ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9h
aXIvQWlySW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNl
dDo6aW5zZXJ0SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5z
ZXJ0KToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpJbnN0OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6YXBw
ZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICog
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJN
YWNyb3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL0FpclJlZ2lz
dGVyUHJpb3JpdHkuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRl
cik6CisgICAgICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGhpZGRl
blRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQpOgorICAgICAgICAodXNhZ2UpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aW52b2tl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OnRlc3RTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkQ29uc3Rh
bnRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG9hZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6bG9hZERvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaW1wbGVTd2FwKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNo
dWZmbGVTaW1wbGVTaGlmdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlTG9u
Z1NoaWZ0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVMb25nU2hpZnRCYWNr
d2FyZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjp0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6dGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OnRlc3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRl
c3RTaHVmZmxlU2hpZnRBbmRSb3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVNoaWZ0QWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlQWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlU3dh
cDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRoKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNZW1vcnlMb25nKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Y29tYmluZUhpTG8pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0
TWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVJvdGF0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5NjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1l
bW9yeU1peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0
ZU1lbW9yeUFsbFJlZ3M2NCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0
U2h1ZmZsZVN3YXBEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNo
aWZ0RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cnVuKToKKyAgICAgICAgKHJ1bik6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdENhbGxTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxSYXJlKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RDYWxsUmFyZUxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENhbGxTaW1wbGVQdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDEt
MTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtDTWFrZV0gRG8gbm90IHVzZSBMTFZNIHN0YXRpYyBsaWJyYXJpZXMgZm9yIEZUTCBKSVQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTA2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOCArNzMsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWly
QXJnLmNwcAogICAgIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAogICAgIGIzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICBi
My9haXIvQWlyQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyQ3VzdG9tLmNwcAogICAgIGIzL2Fpci9B
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCiAg
ICAgYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAKICAgICBiMy9haXIvQWly
R2VuZXJhdGUuY3BwCiAgICAgYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKQEAgLTgyLDYgKzg1LDgg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlySW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJJbnN0LmNwcAogICAgIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAKKyAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAor
ICAgIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAogICAgIGIzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY2
MTgzNDcxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZF
Qzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2
QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00MDAs
NiArNDAxLDIxIEBACiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIx
Njg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhG
N0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhD
RjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3
MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
Q0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZl
bnRpb24uY3BwICovOyB9OworCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgg
Ki87IH07CisJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjIxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi87IH07CisJCTBGNjE4MzJDMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwICovOyB9OworCQkwRjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovOyB9OworCQkwRjYxODMy
RTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovOyB9OworCQkwRjYxODMyRjFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi87IH07CisJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwICovOyB9OworCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI4
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjYxODMzMzFD
NDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
LmggKi87IH07CisJCTBGNjE4MzM2MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzM0MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJMEY2
MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgfTsKKwkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRjYxODMzRDFDNDVGNjJBMDA3MjQ1MEIgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzNDQxQzQ1RjY2
MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICovOyB9OwogCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3
N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi87IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdC
YXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyB9OwogCQkw
RjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgfTsKQEAgLTIwNzksNiArMjA5NSwxMyBAQAog
LyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSBzZWN0aW9uICovCisJCTBGNjE4MzQ2MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJ
CQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBv
YmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAw
RjYxODMzODFDNDVGNjJBMDA3MjQ1MEI7CisJCQlyZW1vdGVJbmZvID0gdGVzdGFpcjsKKwkJfTsK
IAkJMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9
IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9
IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1NDIs
NiArMjU2NSwyMCBAQAogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAv
KiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MTgzMjAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
Q3VzdG9tLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRW1pdFNodWZmbGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmg7IHBhdGgg
PSBiMy9haXIvQWlyRW1pdFNodWZmbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJMb3dlck1hY3Jvcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJN
YWNyb3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZUdlbmVy
YXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMzNTFDNDVGM0I2MDA3
MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWlyT3Bjb2RlVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
NDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RhaXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhaXIuY3BwOyBwYXRoID0gYjMv
YWlyL3Rlc3RhaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MDE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdCYXNpY0Jsb2NrLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM3Miw4ICszNDA5LDggQEAKIAkJNzAxM0NBOEEx
QjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSm9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMzU1ODdDMUM0MTg0
MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBNYXBQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90
b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hcFByb3RvdHlw
ZS5sdXQuaDsgcGF0aCA9IE1hcFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzAzNTU4N0YxQzQxODQ1ODAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5sdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2V0UHJvdG90eXBlLmx1dC5oOyBwYXRo
ID0gU2V0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1
NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcwMzU1ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8q
IEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQzMDYsNiArNDM0MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAvKiBGcmFtZXdvcmtzICovID0gewor
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY2MTgzM0QxQzQ1
RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OwogCQkwRjkzMjc1MTFDMjBCQ0JBMDBDRjY1NjQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTQ0MDMsNiArNDQ0OSw3IEBACiAJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0
IC8qIHRlc3RiMyAqLywKIAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4
cCAqLywKIAkJCQkwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCisJCQkJ
MEY2MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8sCiAJCQkpOwogCQkJbmFtZSA9
IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3OTMsMTMgKzQ4NDAs
MTggQEAKIAkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
Ki8sCiAJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywK
IAkJCQkwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAor
CQkJCTBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
ICovLAorCQkJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaCAqLywKIAkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCAqLywKIAkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmggKi8sCiAJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAog
CQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEY2MTgz
MjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi8sCiAJCQkJMEYxMEYxQTIxQzQy
MEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovLAogCQkJCTBGNDU3MDM2MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJMEY0NTcwMzcxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCisJCQkJMEY2MTgzMjMxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKKwkJCQkwRjYxODMyNDFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBG
MDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJE
ODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8s
CiAJCQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAq
LywKQEAgLTQ4MTgsNiArNDg3MCwxMCBAQAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5
OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCiAJCQkJ
MjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMEY2MTgz
MjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCisJCQkJ
MEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovLAor
CQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8sCisJ
CQkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCiAJCQkJ
MjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovLAogCQkJCTBG
QjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovLAog
CQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAq
LywKQEAgLTQ4NDMsNiArNDg5OSw3IEBACiAJCQkJMEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8q
IEFpclVzZUNvdW50cy5oICovLAogCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJW
YWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggKi8sCisJCQkJMEY2MTgzNDQxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICov
LAogCQkJKTsKIAkJCW5hbWUgPSBhaXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NTMwMCw2ICs1MzU3LDkgQEAKIAkJNjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQg
U291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovLAorCQkJCTBGNjE4MzM0
MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLywKKwkJCQkwRjYxODMz
NTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLywKIAkJCQk5OTZCNzMxNTFC
REEwNUFBMDAzMzFCODQgLyogQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMx
NjFCREEwNUFBMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCAqLywKIAkJ
CQk5OTZCNzMwNzFCRDlGQTJDMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCAqLywK
QEAgLTY4OTksNiArNjk1OSw3IEBACiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFp
ckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAw
MDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjk2MSw2ICs3MDIy
LDcgQEAKIAkJCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMyRjFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTQsNiArNzIxNiw3IEBACiAJCQkJQTc3QTQyNDAxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzcz
MDhEMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNF
eGl0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAv
KiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzND
RDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNTgsNiArNzMy
MSw3IEBACiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyog
REZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzNjFD
NDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM3MzA5MTFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtNzI3NCw2
ICs3MzM4LDcgQEAKIAkJCQkwRkMyMENCQTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEYyOUUwMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzIwQ0I2
MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjI4LDYgKzc2OTMsNyBAQAogCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTgsNiArODA4NCw3
IEBACiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjE4MzMzMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MCw2ICs4MTE3LDIyIEBACiAv
KiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRp
dmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFp
ciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAwRjYxODMzRTFDNDVGNjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RhaXIiICovOworCQkJYnVpbGRQaGFzZXMgPSAo
CisJCQkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgz
M0IxQzQ1RjYyQTAwNzI0NTBCIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxl
cyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3Rh
aXI7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY2
MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRjkzMjc0RTFDMjBCQ0JBMDBD
RjY1NjQgLyogZHluYmVuY2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQli
dWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi87CkBA
IC04MjU3LDYgKzgzNDAsNyBAQAogCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi8sCiAJCQkJNUQ2QjJBNDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJ
CQkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzM4
MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KQEAgLTg0OTMsNiArODU3NywxNCBAQAogLyogRW5kIFBCWFNoZWxs
U2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KKwkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8g
PSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjYxODM0NTFDNDVGNjYwMDA3MjQ1MEIg
LyogdGVzdGFpci5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NEYxQzIwQkNCQTAwQ0Y2NTY0
IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC04Njk3LDYgKzg3ODksNyBAQAogCQkJCTUy
QjcxN0I1MUEwNTk3RTEwMDdBRjRGMyAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQkFERjU0MUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3Bh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMzAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckxvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTExMTI0NTE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTYyRTNENUYwMUI4RDBCNzMwMEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODc0NSw2ICs4ODM4LDcgQEAKIAkJCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyog
REZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyOTFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzMzhFMTIxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9k
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NjEsNiArODg1NSw3IEBACiAJCQkJQTc4QTk3
NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJDMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5
Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05MDcyLDYgKzkxNjcsNyBAQAogCQkJCUUzM0Y1MDg0MUI4NDM3QTAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0
MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTAzRkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJFMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMUQx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxNCw2ICs5MzEwLDcgQEAKIAkJCQkw
RjlENEMwQzFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkIxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNjYsNiArOTQ2MywxMSBAQAogLyog
RW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0
RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhU
YXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJ
CXRhcmdldCA9IDBGNjE4MzM4MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovOworCQkJdGFy
Z2V0UHJveHkgPSAwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovOworCQl9OwogCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVw
ZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQg
PSAwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CkBAIC05NDc3LDYgKzk1
NzksNDIgQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0Yx
QzQ1RjYyQTAwNzI0NTBCIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMw
MEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50
cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBE
ZWJ1ZzsKKwkJfTsKKwkJMEY2MTgzNDAxQzQ1RjYyQTAwNzI0NTBCIC8qIFJlbGVhc2UgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVm
ZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29u
ZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRT
X2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRl
c3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGNjE4MzQxMUM0NUY2
MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRz
LnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFBy
b2ZpbGluZzsKKwkJfTsKKwkJMEY2MTgzNDIxQzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24g
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxl
LnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRM
RU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFN
RSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGOTMy
NzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC05OTA2LDYgKzEw
MDQ0LDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjYxODMzRTFDNDVG
NjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RhaXIiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEY2MTgzM0YxQzQ1RjYyQTAwNzI0NTBCIC8qIERl
YnVnICovLAorCQkJCTBGNjE4MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovLAorCQkJ
CTBGNjE4MzQxMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY2MTgzNDIx
QzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKKwkJfTsKIAkJMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi8gPSB7CiAJCQlp
c2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUgYm9vbCBp
c1g4Nl82NCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lmIFBMQVRG
T1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKIGlubGluZSBib29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKCkKIHsK
ICAgICByZXR1cm4gaXNBUk12N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VBcmNoaXRl
Y3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkz
MihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNp
b24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1NSw2ICs2NTUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhp
cyk7CiAgICAgfQogCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNy
YywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDMxLDYgKzE0MzEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVl
KCk7CiAKLSAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0
czo6Zm9yQ2FsbCgpIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
QEAgLTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CiAgICAgQ0NhbGxWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBD
aGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCi0gICAgICAg
ICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChudW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1
MiwxMiBAQCBDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9i
eXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6
Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYp
CisgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsMTEgQEAgY2xh
c3MgQ29tcGlsYXRpb24gewogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGls
YXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworCisgICAgLy8g
VGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0ZSBhIENvbXBpbGF0
aW9uLiBJdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAorICAgIC8vIGNvZGUuIFByb2Jh
Ymx5IGJlc3QgdG8ga2VlcCBpdCB0aGF0IHdheS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXBy
b2R1Y3RzPik7CisgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJl
Zi5jb2RlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFp
clN0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgogI2lu
Y2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgpAQCAtOTksNiArMTAwLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxv
Y2tzIGFyZSBub3QgcmFyZS4KKyAgICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVy
ZVswXSk7CisgICAgICAgIHdoaWxlIChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3Jr
bGlzdC5wb3AoKSkgeworICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzb3IuaXNSYXJlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2go
c3VjY2Vzc29yLmJsb2NrKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAg
bV9wcm9jZWR1cmUucmVzZXRWYWx1ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZl
cmVuY2UoKS4KIAogICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFs
IGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwOCw2
ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAg
ICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1f
ZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwog
ICAgICAgICAgICAgCkBAIC0xNTUyLDM3ICsxNTY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGludmVydGVkKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAg
ICBBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNp
Z25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXggPSBhcmd1bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudElu
ZGV4IDwgQmFua0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAg
IFRtcCByZXN1bHQgPSBUbXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudElu
ZGV4KSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBl
KCkpLCBpbW1PclRtcChjaGlsZCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0KLSNpZiBDUFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAg
Ly8gaU9TIGRvZXMgbm90IGZvbGxvdyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBj
YWxscy4KLSAgICAgICAgLy8gQXJndW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNr
T2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7
Ci0jZWxzZQotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5k
aWYKLSAgICAgICAgQXJnIHJlc3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAg
ICAgIHN0YWNrT2Zmc2V0ICs9IHNsb3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRo
ZSBjb2RlIGZvciBzdG9yaW5nIHRoZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhp
cyBzaWduaWZpY2FudGx5IGVhc2VzIHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lz
dGVyIGFsbG9jYXRvci4gSWYgd2UgY291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZh
ciBhcwotICAgICAgICAvLyBwb3NzaWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNl
IHRvIGhvaXN0IHN0b3JlcyBhcyBoaWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIg
cHJlc3N1cmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTEwNjMKLSAgICAgICAgbV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3Jl
KGNoaWxkLCByZXN1bHQpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9w
Y29kZSgpKSB7CkBAIC0xOTM0LDE0ICsxOTE1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBC
Mzo6Q0NhbGw6IHsKICAgICAgICAgICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8
Q0NhbGxWYWx1ZT4oKTsKLSAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6
c3BlY2lhbChtX2NvZGUuY0NhbGxTcGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIGJpdCB3ZWlyZCAtIHdlIGhhdmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJn
OjpDQ2FsbFNwZWNpYWwuIEl0IG1pZ2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2Ug
ZmFjdG9yZWQgQWlyOjpDQ2FsbFNwZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBt
YWRlIGl0IGEgQjMKLSAgICAgICAgICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAg
ICAgIEluc3QgaW5zdChtX2lzUmFyZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0Nh
bGwpOwogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2Fy
ZGluZyB0aGUgY2FsbGVlIGFyZ3VtZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAg
ICAgICAgLy8gdXNlIGl0IHlldC4gSXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5NTQs
NDggKzE5MzAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKHRtcChjQ2FsbC0+Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byB0ZWxsIEFpciB3aGF0IHJlZ2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAg
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwot
Ci0gICAgICAgICAgICAvLyBOb3cgbWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVy
ZSB3ZSBpbXBsZW1lbnQgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAg
ICAgLy8gdGhpcywgQWlyIGRvZXMgbm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQg
anVzdCB0YWtlcyBvdXIgd29yZCBmb3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3Vt
ZW50Q291bnQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgVmFsdWUqIGFyZ0NoaWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAg
ICAgIEFyZyBhcmc7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChB
cmc6OnR5cGVGb3JCM1R5cGUoYXJnQ2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6R1A6Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1
bWVudDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkg
IT0gVm9pZCkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwog
Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcg
PSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09m
ZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNo
aWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1w
KGNDYWxsLT5jaGlsZChpKSkpOwogCi0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQot
ICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3Zl
KGluc3QpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEludDMyOgotICAgICAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQo
TW92ZSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2Fz
ZSBEb3VibGU6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUiksIHRtcChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyODcs
MTEgKzIyMjgsMTMgQEAgcHJpdmF0ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAg
ICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29y
a2xpc3Q7CiAKICAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3Rv
cjxJbnN0PiBtX3Byb2xvZ3VlOwogCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAg
Ym9vbCBtX2lzUmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0
cy5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVC
eXByb2R1Y3RzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBP
cGFxdWVCeXByb2R1Y3RzKCk7Ci0gICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+T3BhcXVlQnlwcm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9ieXByb2R1Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTUw
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDAsMjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6
aXNBcmdWYWxpZEZvclZhbHVlCiAgICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1t
OgogICAgIGNhc2UgQXJnOjpJbW02NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBB
cmc6OkNhbGxBcmc6Ci0gICAgICAgIGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgot
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
Ci0gICAgICAgICAgICAmJiBhcmcuYmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJn
LmlzU3RhY2tNZW1vcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIAotICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBl
KHZhbHVlLT50eXBlKCkpOwogCi0gICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6
aXNBcmdWYWxpZEZvclJlcChBaXI6OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNv
bnN0IFZhbHVlUmVwJiByZXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3NzUsNiArNzc3NSw2NSBAQCB2b2lkIHRlc3RDYWxsU2ltcGxl
KGludCBhLCBpbnQgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikg
PT0gYSArIGIpOwogfQogCit2b2lkIHRlc3RDYWxsUmFyZShpbnQgYSwgaW50IGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBjb21tb24gPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogcmFyZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhyYXJlLCBGcmVxdWVuY3lDbGFzczo6
UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhjb21tb24pKTsKKworICAgIGNvbW1vbi0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
IGNvbW1vbi0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAg
ICAKKyAgICByYXJlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNp
bXBsZUZ1bmN0aW9uKSksCisgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAg
ICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMikpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
LCB0cnVlLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdENhbGxSYXJlTGl2ZShpbnQg
YSwgaW50IGIsIGludCBjKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29tbW9uID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHJhcmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICBGcmVxdWVudGVkQmxv
Y2socmFyZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2so
Y29tbW9uKSk7CisKKyAgICBjb21tb24tPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb21tb24tPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CisgICAgCisgICAgcmFyZS0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJhcmUtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rp
b24pKSwKKyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAg
cmFyZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJh
cmUtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIzKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0
cnVlLCBhLCBiLCBjKSA9PSBhICsgYiArIGMpOworfQorCiB2b2lkIHRlc3RDYWxsU2ltcGxlUHVy
ZShpbnQgYSwgaW50IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMDA2OSw2ICsxMDEy
OCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEludDMyVG9E
b3VibGVQYXJ0aWFsUmVnaXN0ZXJXaXRob3V0U3RhbGwoKSk7CiAKICAgICBSVU4odGVzdENhbGxT
aW1wbGUoMSwgMikpOworICAgIFJVTih0ZXN0Q2FsbFJhcmUoMSwgMikpOworICAgIFJVTih0ZXN0
Q2FsbFJhcmVMaXZlKDEsIDIsIDMpKTsKICAgICBSVU4odGVzdENhbGxTaW1wbGVQdXJlKDEsIDIp
KTsKICAgICBSVU4odGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cygpKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk1MDY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQUklu
Zm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKICNpZiBDT01QSUxFUihHQ0MpICYmIEFTU0VS
VF9ESVNBQkxFRAogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCkBAIC0zOCw2ICs0MSwyMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jv
b2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgIGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6OlRtcChN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3RhY2s6Cisg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNlbnRhYmxl
QXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAgICBzd2l0
Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTY3LDYgKzg0LDMxIEBAIGJvb2wgQXJnOjppc1JlcHJlc2Vu
dGFibGVBcyhXaWR0aCB3aWR0aCwKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorYm9v
bCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wgdXNlcyA9IGZh
bHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0KAorICAgICAg
ICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3RoZXJUbXAgPT0g
dG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKK30K
KworYm9vbCBBcmc6OmlzQ29tcGF0aWJsZVR5cGUoY29uc3QgQXJnJiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoaGFzVHlwZSgpKQorICAgICAgICByZXR1cm4gb3RoZXIuaXNUeXBlKHR5cGUoKSk7
CisgICAgaWYgKG90aGVyLmhhc1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGlzVHlwZShvdGhlci50
eXBlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xMTcsNiArMTU5LDkg
QEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIFNwZWNp
YWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgV2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCh3aWR0aCgpKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xNjcsNiArMjEyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFyZwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQoIlNwZWNp
YWwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpXaWR0aEFyZzoKKyAgICAgICAg
b3V0LnByaW50KCJXaWR0aEFyZyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzMSwxNiArMjc5LDE2IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKIHsKICAgICBzd2l0Y2ggKHdpZHRoKSB7
CiAgICAgY2FzZSBBcmc6OldpZHRoODoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDgiKTsKKyAg
ICAgICAgb3V0LnByaW50KCI4Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lk
dGgxNjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDE2Iik7CisgICAgICAgIG91dC5wcmludCgi
MTYiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDMyOgotICAgICAgICBv
dXQucHJpbnQoIldpZHRoMzIiKTsKKyAgICAgICAgb3V0LnByaW50KCIzMiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg2
NCIpOworICAgICAgICBvdXQucHJpbnQoIjY0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk1MDY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTEgQEAKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdy
ZXR1cm4tdHlwZSIKICNlbmRpZiAvLyBDT01QSUxFUihHQ0MpICYmIEFTU0VSVF9ESVNBQkxFRAog
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
ewogCiBjbGFzcyBTcGVjaWFsOwogY2xhc3MgU3RhY2tTbG90OwpAQCAtNzQsNyArNzgsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJs
ZUNvbmQsCi0gICAgICAgIFNwZWNpYWwKKyAgICAgICAgU3BlY2lhbCwKKyAgICAgICAgV2lkdGhB
cmcKICAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsKQEAgLTE2MSw2ICsxNjYsMTMg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFR5
cGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoR1ApOwor
ICAgICAgICBmdW5jdG9yKEZQKTsKKyAgICB9CisKICAgICBlbnVtIFdpZHRoIDogaW50OF90IHsK
ICAgICAgICAgV2lkdGg4LAogICAgICAgICBXaWR0aDE2LApAQCAtMjI3LDYgKzIzOSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAmJiAhaXNDb2xkVXNlKHJvbGUp
OwogICAgIH0KIAorICAgIHN0YXRpYyBSb2xlIGNvb2xlZChSb2xlIHJvbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNl
IExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVm
OgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVz
ZUFkZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgICAgIHJldHVybiByb2xlOworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJl
dHVybiBDb2xkVXNlOworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgICAgICByZXR1cm4g
TGF0ZUNvbGRVc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRv
aW5nIGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUp
CiAgICAgewpAQCAtNDQ5LDYgKzQ4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBpbW1QdHIoY29uc3Qgdm9pZCogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBpbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGFkZHJl
c3MpKTsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJf
dCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKQEAgLTU2
Myw2ICs2MDAsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHN0YXRpYyBBcmcgd2lkdGhBcmcoV2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gV2lkdGhBcmc7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IHdpZHRoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CkBAIC01OTksNiArNjQ0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKICAgICB9CiAKKyAgICBib29s
IGlzU29tZUltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0lt
bTY0KCk7CisgICAgfQorCiAgICAgYm9vbCBpc0FkZHIoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBBZGRyOwpAQCAtNjE5LDYgKzY2OSwyMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc01lbW9yeSgp
IGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFk
ZHI6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBp
c1N0YWNrTWVtb3J5KCkgY29uc3Q7CisKICAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CkBAIC02NTEsNiArNzE2LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOwogICAgIH0KIAorICAg
IGJvb2wgaXNXaWR0aEFyZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFdpZHRoQXJnOworICAgIH0KKwogICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CkBAIC02OTQsMTggKzc2NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKLSAgICBib29sIGhhc09mZnNl
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgICAgICBjYXNl
IEFkZHI6Ci0gICAgICAgIGNhc2UgU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2FsbEFyZzoKLSAgICAg
ICAgY2FzZSBJbmRleDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNNZW1vcnkoKTsgfQogICAgIAogICAgIGludDMy
X3Qgb2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC03NDQsNiArODAzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CiAgICAg
fQogCisgICAgV2lkdGggd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBXaWR0aEFyZyk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaWR0aD4obV9vZmZz
ZXQpOworICAgIH0KKwogICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CkBAIC03NjgsNiArODMzLDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVG1wOgogICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAo
KTsKQEAgLTc4Niw2ICs4NTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAg
ICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNh
c2UgV2lkdGhBcmc6CiAgICAgICAgIGNhc2UgSW52YWxpZDoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY2FzZSBBZGRyOgpAQCAtODI5LDYgKzg5NiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAgIGJvb2wgY2FuUmVwcmVz
ZW50KFZhbHVlKiB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGlzQ29tcGF0aWJsZVR5cGUoY29u
c3QgQXJnJiBvdGhlcikgY29uc3Q7CisKICAgICBib29sIGlzR1BSKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CkBAIC05NzAsNiArMTA0MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNv
bmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtOTkyLDYgKzEwNjQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBib29sIHVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdDsKKwogICAgIC8vIFRoaXMgaXMgc21h
cnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYg
cnVsZSB3aWxsIHVzZSBpdHMKICAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4
YW1wbGUsIHRoaXM6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTUgKzc4
LDE3IEBAIHB1YmxpYzoKICAgICBJbnN0TGlzdCYgaW5zdHMoKSB7IHJldHVybiBtX2luc3RzOyB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgotICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKKyAgICBJbnN0JiBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQogICAgIHsKICAgICAg
ICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICAgICAgcmV0
dXJuIG1faW5zdHMubGFzdCgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
SW5zdCYgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIG1f
aW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OworICAgICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAgfQogCiAgICAgLy8gVGhlICIw
IiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhl
biIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1w
bCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSog
Y2hpbGQpCit7CisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsK
KyAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzKQorICAgICAgICByZXR1cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJn
dW1lbnRJbmRleCkpOworCisgICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlzQVJNNjQo
KSAmJiBpc0lPUygpKSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgorICAgICAg
ICBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9IDg7Cisg
ICAgfQorCisgICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNp
emUsIHN0YWNrT2Zmc2V0KTsKKyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zm
c2V0KTsKKyAgICBzdGFja09mZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFyZ3VtZW50
Q291bnQsIHVuc2lnbmVkJiBmcEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwg
VmFsdWUqIGNoaWxkKQoreworICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50
eXBlKCkpKSB7CisgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2Fs
bEFyZ3VtZW50SW1wbDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGls
ZCk7CisgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3Vt
ZW50SW1wbDxGUFJJbmZvPihmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFyZygp
OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29tcHV0ZUND
YWxsaW5nQ29udmVudGlvbihDb2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBW
ZWN0b3I8QXJnPiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVjaWFsOjpz
Y3JhdGNoUmVnaXN0ZXIpKTsKKyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOworICAg
IHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsg
KytpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFsbENDYWxs
QXJndW1lbnQoZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB2
YWx1ZS0+Y2hpbGQoaSkpKTsKKyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zm
c2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIHJldHVy
biBUbXAoKTsKKyAgICBjYXNlIEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVy
biBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxvYXQ6CisgICAgY2Fz
ZSBEb3VibGU6CisgICAgICAgIHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRt
cCgpOworfQorCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUqIG9yaWdpbiwgY29u
c3QgVmVjdG9yPEFyZz4mIGFyZ3VtZW50cykKK3sKKyAgICBJbnN0IGluc3QoUGF0Y2gsIG9yaWdp
biwgQXJnOjpzcGVjaWFsKGNvZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBpbnN0LmFyZ3MuYXBw
ZW5kKGFyZ3VtZW50c1swXSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgaWYgKGFyZy5p
c1RtcCgpKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgIH0KKyAgICBy
ZXR1cm4gaW5zdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNkZWZpbmUg
QWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQ0NhbGxWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
K1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxsVmFsdWUq
KTsKKworVG1wIGNDYWxsUmVzdWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYsIFZh
bHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJD
Q2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsMTIgKzYwLDEzIEBAIHB1YmxpYzoKIAogICAg
IFByb2NlZHVyZSYgcHJvYygpIHsgcmV0dXJuIG1fcHJvYzsgfQogCi0gICAgQmFzaWNCbG9jayog
YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJh
c2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKIAogICAgIC8vIE5vdGUg
dGhhdCB5b3UgY2FuIHJlbHkgb24gc3RhY2sgc2xvdHMgYWx3YXlzIGdldHRpbmcgaW5kaWNlcyB0
aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgaW5kZXgKICAgICAvLyBvZiBhbnkgcHJpb3Igc3RhY2sg
c2xvdC4gSW4gZmFjdCwgYWxsIHN0YWNrIHNsb3RzIHlvdSBjcmVhdGUgaW4gdGhlIGZ1dHVyZSB3
aWxsIGhhdmUgYW4gaW5kZXgKICAgICAvLyB0aGF0IGlzID49IHN0YWNrU2xvdHMoKS5zaXplKCku
Ci0gICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xv
dEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KAorICAgICAgICB1bnNpZ25lZCBieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CiAgICAgU3RhY2tTbG90KiBh
ZGRTdGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqKTsKIAogICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwo
c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckN1c3RvbS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworYm9v
bCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBDQ2FsbFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9ICh2
YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBjYW4gb25seSByZWZl
ciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9yIChBcmcmIGFyZyA6
IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFhcmcuaXNTdGFja01l
bW9yeSgpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKworICAgIGlmICghaW5zdC5hcmdzWzBd
LmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBy
ZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlw
ZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVw
cmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0
Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7
IGktLSA+IDE7KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAg
ICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgaWYgKCFhcmcu
Y2FuUmVwcmVzZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsQ3VzdG9tOjpn
ZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7
CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3QsICJcbiIpOwor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6
Okp1bXAoKTsKK30KKworYm9vbCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0
KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICUgMykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQSBkZXN0aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4gVGhpcyByZXF1
aXJlbWVudCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvcgorICAgIC8v
IG9mIGhhdmluZyBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0IG11bHRpcGxl
IGlucHV0cyBzaW11bHRhbmVvdXNseS4gSXQgYWxzbworICAgIC8vIGltcG9zZXMgc29tZSBpbnRl
cmVzdGluZyBjb25zdHJhaW50cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZsZS4gSWYgd2Ug
dHJlYXQgYSBzaHVmZmxlIHBhaXIKKyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUgQXJncyBhcyBu
b2RlcywgdGhlbiB0aGUgc2luZ2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1lYW5zIHRoYXQg
dGhlCisgICAgLy8gc2h1ZmZsZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMgb2Ygc3ViZ3Jh
cGhzOgorICAgIC8vCisgICAgLy8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0aGVzZSBzaGlm
dHMuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQorICAgIC8vICAg
aW5zdHJ1Y3Rpb25zIGFuZCBkb24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCByZWdpc3RlcnMu
CisgICAgLy8KKyAgICAvLyAtIENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29uc2lzdCBvZiBu
b2RlcyB0aGF0IGhhdmUgb25lIHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29yLCBzbworICAg
IC8vICAgdGhlcmUgaXMgbm8gd2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJvbSBvdXRzaWRl
IG9mIGl0LiBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAgICAvLyAgIG9yIGJ5
IHNhdmluZyBvbmUgb2YgdGhlIEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCBleGVjdXRp
bmcgaXQgYXMgYSBzaGlmdC4KKyAgICBIYXNoU2V0PEFyZz4gZHN0czsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFy
ZyA9IGluc3QuYXJnc1tpXTsKKyAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAzOworCisgICAg
ICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdpZHRoLgorICAg
ICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAgICBpZiAoIW1vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGlmICghYXJnLmlzQ29tcGF0aWJsZVR5cGUoaW5zdC5hcmdzW2kgKyAxXSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gMSk7CisgICAgICAgICAgICBpZiAoIWRzdHMuYWRkKGFyZyku
aXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYXJnLmlzVG1wKCkgfHwgYXJnLmlzTWVtb3J5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gTm8gZGVz
dGluYXRpb24gcmVnaXN0ZXIgbWF5IGFwcGVhciBpbiBhbnkgYWRkcmVzcyBleHByZXNzaW9ucy4g
VGhlIGxvd2VyaW5nIGNhbid0IGhhbmRsZSBpdAorICAgIC8vIGFuZCBpdCdzIG5vdCB1c2VmdWwg
Zm9yIHRoZSB3YXkgd2UgZW5kIHVwIHVzaW5nIFNodWZmbGVzLiBOb3JtYWxseSwgU2h1ZmZsZXMg
b25seSB1c2VkIGZvcgorICAgIC8vIHN0YWNrIGFkZHJlc3NlcyBhbmQgbm9uLXN0YWNrIHJlZ2lz
dGVycy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJn
LmlzTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBvayA9IHRy
dWU7CisgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRt
cCkgeworICAgICAgICAgICAgICAgIGlmIChkc3RzLmNvbnRhaW5zKHRtcCkpCisgICAgICAgICAg
ICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQ0NhbGxIZWxwZXJzOjpKdW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3Qs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRB
TDogVW5sb3dlcmVkIHNodWZmbGU6ICIsIGluc3QsICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lv
biAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJJbnN0LmgiCiAj
aW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCkBAIC01MSw2ICs1Miw4IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIC8vIHlvdSBuZWVkIHRv
IGNhcnJ5IGV4dHJhIHN0YXRlIGFyb3VuZCB3aXRoIHRoZSBpbnN0cnVjdGlvbi4gQWxzbywgU3Bl
Y2lhbHMgbWVhbiB0aGF0IHlvdQogLy8gYWx3YXlzIGhhdmUgYWNjZXNzIHRvIENvZGUmIGV2ZW4g
aW4gbWV0aG9kcyB0aGF0IGRvbid0IHRha2UgYSBHZW5lcmF0aW9uQ29udGV4dC4KIAorLy8gRGVm
aW5pdGlvbiBvZiBQYXRjaCBpbnN0cnVjdGlvbi4gUGF0Y2ggaXMgdXNlZCB0byBkZWxlZ2F0ZSB0
aGUgYmVoYXZpb3Igb2YgdGhlIGluc3RydWN0aW9uIHRvIHRoZQorLy8gU3BlY2lhbCBvYmplY3Qs
IHdoaWNoIHdpbGwgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBpbnN0cnVjdGlvbi4KIHN0
cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CkBAIC05Niw2ICs5OSwxMTQgQEAgc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB9CiB9OwogCisv
LyBEZWZpbml0aW9uIG9mIENDYWxsIGluc3RydWN0aW9uLiBDQ2FsbCBpcyB1c2VkIGZvciBob3Qg
cGF0aCBDIGZ1bmN0aW9uIGNhbGxzLiBJdCdzIGxvd2VyZWQgdG8gYQorLy8gUGF0Y2ggd2l0aCBh
biBBaXIgQ0NhbGxTcGVjaWFsIGFsb25nIHdpdGggY29kZSB0byBtYXJzaGFsIGluc3RydWN0aW9u
cy4gVGhlIGxvd2VyaW5nIGhhcHBlbnMKKy8vIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBz
byB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3Igc2VlcyB0aGUgY2xvYmJlcnMuCitzdHJ1Y3Qg
Q0NhbGxDdXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGlj
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6
OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQorICAgICAgICAK
KyAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICAgICAgZnVuY3Rv
cigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAorICAgICAg
ICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAg
ICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytp
KSB7CisgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAg
ICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpV
c2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAor
ICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBj
YWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0Nh
bGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0
eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZs
ZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9p
ZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAg
IEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSAr
IDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Cisg
ICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRo
KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6
OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMo
SW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGlj
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitUbXAgZmluZFBvc3Np
YmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeworICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgVG1w
IHRtcChyZWcpOworICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQorICAgICAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisgICAgcmV0dXJuIFRtcCgpOworfQorCitUbXAgZmluZFBvc3NpYmxlU2Ny
YXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBBcmcmIGFyZzIpIHsK
KyAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAg
WyZdIChUbXAgdG1wKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYXJnMS51c2VzVG1w
KHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOworICAgICAgICB9KTsKK30KKworLy8gRXhhbXBs
ZTogKGEgPT4gYiwgYiA9PiBhLCBhID0+IGMsIGIgPT4gZCkKK3N0cnVjdCBSb3RhdGUgeworICAg
IFZlY3RvcjxTaHVmZmxlUGFpcj4gbG9vcDsgLy8gaW4gdGhlIGV4YW1wbGUsIHRoaXMgaXMgdGhl
IGxvb3A6IChhID0+IGIsIGIgPT4gYSkKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZyaW5nZTsg
Ly8gaW4gdGhlIGV4YW1wbGUsIHRoZXNlIGFyZSB0aGUgYXNzb2NpYXRlZCBzaGlmdHM6IChhID0+
IGMsIGIgPT4gZCkKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFNodWZm
bGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHdp
ZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKK30KKworVmVjdG9yPEluc3Q+IGVtaXRT
aHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6YXJyYXk8QXJnLCAy
PiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQoreworICAgIHBhaXJz
LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09IHBhaXIuZHN0KCk7
CisgICAgICAgIH0pOworICAgIAorICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRoYXQgdGhpcyBpcyB0
aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgorI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMp
IHsKKyAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNT
RVJUKHBhaXIuZHN0KCkuaXNUeXBlKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKHBhaXIuZHN0KCku
aXNUbXAoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpOworICAgIH0KKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECisKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGtpbmRzIG9mIG9w
ZXJhdGlvbnMgdGhhdCB3ZSB3aWxsIGRvOgorICAgIC8vCisgICAgLy8gLSBTaGlmdC4gRXhhbXBs
ZTogKGEgPT4gYiwgYiA9PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIsIGM7IE1vdmUgYSwg
YiIuIFRoaXMgb25seSByZXF1aXJlcworICAgIC8vICAgc2NyYXRjaCByZWdpc3RlcnMgaWYgdGhl
cmUgYXJlIG1lbW9yeS0+bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQgYXMgbWFueSBvZiB0
aGVzZSBhcworICAgIC8vICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBjaGVhcGVyLiBOb3Rl
IHRoYXQgc2hpZnRzIGNhbiBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50aW9uZWQKKyAgICAv
LyAgIG11bHRpcGxlIHRpbWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMsIGIgPT4gZCwgYiA9
PiBlKS4KKyAgICAvLworICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEp
LiBXZSB3YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRoYXQgaW5zdHJ1Y3Rp
b24KKyAgICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIHdlIG1heSBu
ZWVkIGEgc2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5CisgICAgLy8gICBsb2Nh
dGlvbi4gQSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywgYyA9PiBhKS4gV2Ug
Y2FuIGVtaXQgdGhpcyBhcyAiU3dhcCBiLCBjOworICAgIC8vICAgU3dhcCBhLCBiIi4gTm90ZSB0
aGF0IHN3YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmluZyB3aWR0aHMuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYSByb3RhdGUgY2FuIGhhdmUgImZyaW5nZSIuIEZvciBl
eGFtcGxlLCB3ZSBtaWdodCBoYXZlIChhID0+IGIsIGIgPT4gYSwgYSA9PmMsCisgICAgLy8gYiA9
PiBkKS4gVGhpcyBoYXMgYSByb3RhdGUgbG9vcCAoYSA9PiBiLCBiID0+IGEpIGFuZCBzb21lIGZy
aW5nZSAoYSA9PiBjLCBiID0+IGQpLiBXZSB0cmVhdAorICAgIC8vIHRoZSB3aG9sZSB0aGluZyBh
cyBhIHNpbmdsZSByb3RhdGUuCisgICAgLy8KKyAgICAvLyBXZSB3aWxsIGZpbmQgbXVsdGlwbGUg
ZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVtIGluIGFueSBvcmRl
ci4KKworICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0IHNob3VsZCBiZSBl
eGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRoZWlyCisgICAgLy8g
c3RhcnRpbmcgc291cmNlLgorICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBz
aGlmdHM7CisKKyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMgb3ZlciBzcmMoKSdz
IHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3IgYSBsaXN0CisgICAg
Ly8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCksIGxpc3RbMl0uc3Jj
KCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCisgICAgLy8gTm90ZSB0aGF0
IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24ndCBtYXRjaCBvciBv
dGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KKyAgICAvLyBCdXQsIHByaW9yIHRvIGV4ZWN1dGluZyBh
bGwgb2YgdGhhdCwgd2UgbmVlZCB0byBleGVjdXRlIHRoZSBmcmluZ2U6IHRoZSBzaGlmdHMgY29t
bWluZyBvZmYgdGhlCisgICAgLy8gcm90YXRlLgorICAgIFZlY3RvcjxSb3RhdGU+IHJvdGF0ZXM7
CisKKyAgICB7CisgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+PiBtYXBw
aW5nOworICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpCisgICAg
ICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBWZWN0b3I8U2h1ZmZsZVBhaXI+KCkpLml0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQocGFpcik7CisKKyAgICAgICAgVmVjdG9yPFNodWZmbGVQYWly
PiBjdXJyZW50UGFpcnM7CisKKyAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5pc0VtcHR5KCkpOworICAgICAgICAgICAg
QXJnIG9yaWdpbmFsU3JjID0gbWFwcGluZy5iZWdpbigpLT5rZXk7CisgICAgICAgICAgICBBU1NF
UlQoIXNoaWZ0cy5jb250YWlucyhvcmlnaW5hbFNyYykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHcmFwaE5vZGVXb3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAgICAgICAgICAgd29ya2xp
c3QucHVzaChvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICB3aGlsZSAoQXJnIHNyYyA9IHdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxl
UGFpcj4+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7CisgICAgICAgICAgICAg
ICAgaWYgKGl0ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
aXRoIGEgc2hpZnQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkgYnVpbHQgdGhlIHRh
aWwgb2YgdGhpcyBzaGlmdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoYXQncyB0
aGUgY2FzZSBub3cuCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmRWZWN0
b3Ioc2hpZnRzLnRha2Uoc3JjKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJz
ID0gV1RGTW92ZShpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFwcGluZy5yZW1vdmUo
aXRlcik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDog
cGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZChwYWlyKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkgPT0gc3JjKTsKKyAgICAgICAg
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChwYWlyLmRzdCgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuc2l6ZSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnNbMF0uc3JjKCkgPT0gb3JpZ2luYWxT
cmMpOworCisgICAgICAgICAgICBib29sIGlzUm90YXRlID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHBhaXIuZHN0KCkgPT0gb3JpZ2luYWxTcmMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaXNSb3RhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc1JvdGF0ZSkgewor
ICAgICAgICAgICAgICAgIFJvdGF0ZSByb3RhdGU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gVGhlIGNvbW1vbiBjYXNlIGlzIHRoYXQgdGhlIHJvdGF0ZSBkb2VzIG5vdCBo
YXZlIGZyaW5nZS4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZQorICAgICAgICAgICAgICAgIC8vIGxh
c3QgZGVzdGluYXRpb24gaXMgdGhlIGZpcnN0IHNvdXJjZS4KKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFBhaXJzLmxhc3QoKS5kc3QoKSA9PSBvcmlnaW5hbFNyYykKKyAgICAgICAgICAgICAg
ICAgICAgcm90YXRlLmxvb3AgPSBXVEZNb3ZlKGN1cnJlbnRQYWlycyk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNsb3cgcGF0aC4g
VGhlIHJvdGF0ZSBoYXMgZnJpbmdlLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgSGFzaE1hcDxBcmcsIFNodWZmbGVQYWlyPiBkc3RNYXBwaW5nOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5hZGQocGFpci5kc3QoKSwgcGFpcik7
CisKKyAgICAgICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIgcGFpciA9IGRzdE1hcHBpbmcudGFr
ZShvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wLmFwcGVuZChwYWlyKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBpdGVyID0gZHN0TWFwcGluZy5maW5kKHBhaXIuc3JjKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZHN0TWFwcGluZy5lbmQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
aXIgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1hcHBpbmcucmVt
b3ZlKGl0ZXIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cm90YXRlLmxvb3AucmV2ZXJzZSgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBmcmluZ2UgYXBwZWFycyBpbiB0aGUgc2FtZSBvcmRlciBhcyBob3cgaXQgYXBw
ZWFyZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRQYWlycywgc2luY2Ug
dGhhdCdzIHRoZSBERlMgb3JkZXIuCisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2h1
ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEJ1dCBvZiBjb3Vyc2Ugd2Ugb25seSBpbmNsdWRlIGl0IGlmIGl0J3Mgbm90IGluIHRoZSBs
b29wLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRzdE1hcHBpbmcuY29udGFpbnMocGFp
ci5kc3QoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlLmZyaW5nZS5hcHBl
bmQocGFpcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdyYXBoIHNlYXJjaCB0ZXJt
aW5hdGVzIGJlY2F1c2Ugd2UgcmV0dXJuZWQgdG8gdGhlIGZpcnN0IHNvdXJjZSwgdGhlbiB0aGUK
KyAgICAgICAgICAgICAgICAvLyBwYWlyIGxpc3QgaGFzIHRvIGhhdmUgYSB2ZXJ5IHBhcnRpY3Vs
YXIgc2hhcGUuCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Au
c2l6ZSgpIC0gMTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZS5sb29w
W2ldLmRzdCgpID09IHJvdGF0ZS5sb29wW2kgKyAxXS5zcmMoKSk7CisgICAgICAgICAgICAgICAg
cm90YXRlcy5hcHBlbmQoV1RGTW92ZShyb3RhdGUpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHNoaWZ0cy5hZGQob3JpZ2luYWxTcmMsIFdURk1vdmUoY3VycmVudFBhaXJz
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSwgd2UgbmVl
ZCB0d28gc2NyYXRjaCByZWdpc3RlcnMuIFRoZSB3YXkgd2UgZG8gdGhpcyBpcyB0aGF0IHRoZSBj
bGllbnQgcGFzc2VzCisgICAgLy8gdXMgd2hhdCBzY3JhdGNoIHJlZ2lzdGVycyBoZSBoYXBwZW5z
IHRvIGhhdmUgbGF5aW5nIGFyb3VuZC4gV2Ugd2lsbCBuZWVkIHNjcmF0Y2ggcmVnaXN0ZXJzIGlu
CisgICAgLy8gdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAvLworICAgIC8vIC0gU2h1ZmZsZSBw
YWlycyB3aGVyZSBib3RoIHNyYyBhbmQgZHN0IHJlZmVyIHRvIG1lbW9yeS4KKyAgICAvLyAtIFJv
dGF0ZSB3aGVuIG5vIFN3YXAgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLgorICAgIC8vCisgICAg
Ly8gTHVja3kgZm9yIHVzLCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGV4dHJhIHNjcmF0Y2gg
cmVnaXN0ZXJzIGFueXRpbWUgd2UgaGF2ZSBhIFNoaWZ0IHRoYXQKKyAgICAvLyBlbmRzIHdpdGgg
YSByZWdpc3Rlci4gV2Ugc2VhcmNoIGZvciBzdWNoIGEgcmVnaXN0ZXIgcmlnaHQgbm93LgorCisg
ICAgYXV0byBtb3ZlRm9yV2lkdGggPSBbJl0gKEFyZzo6V2lkdGggd2lkdGgpIC0+IE9wY29kZSB7
CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6Cisg
ICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0Owor
ICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFy
Zzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
T3Bjb2RlIGNvbnNlcnZhdGl2ZU1vdmUgPSBtb3ZlRm9yV2lkdGgoQXJnOjpjb25zZXJ2YXRpdmVX
aWR0aCh0eXBlKSk7CisKKyAgICAvLyBXZSB3aWxsIGVtaXQgdGhpbmdzIGluIHJldmVyc2UuIFdl
IG1haW50YWluIGEgbGlzdCBvZiBwYWNrcyBvZiBpbnN0cnVjdGlvbnMsIGFuZCB0aGVuIHdlIGVt
aXQKKyAgICAvLyBhcHBlbmQgdGhlbSB0b2dldGhlciBpbiByZXZlcnNlIChmb3IgZXhhbXBsZSB0
aGUgdGhpbmcgYXQgdGhlIGVuZCBvZiByZXN1bHRQYWNrcyBpcyBwbGFjZWQKKyAgICAvLyBmaXJz
dCkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgdGhlIGxhc3QgdGhpbmcgd2UgZW1pdCBmcmVlcyB1
cCBpdHMgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBzbworICAgIC8vIGl0IGFmZmVjdHMgaG93IHdl
IGVtaXQgdGhpbmdzIGJlZm9yZSBpdC4KKyAgICBWZWN0b3I8VmVjdG9yPEluc3Q+PiByZXN1bHRQ
YWNrczsKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworCisgICAgYXV0byBjb21taXRSZXN1bHQg
PSBbJl0gKCkgeworICAgICAgICByZXN1bHRQYWNrcy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsK
KyAgICB9OworCisgICAgYXV0byBnZXRTY3JhdGNoID0gWyZdICh1bnNpZ25lZCBpbmRleCwgVG1w
IHBvc3NpYmxlU2NyYXRjaCkgLT4gVG1wIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hlc1tpbmRleF0u
aXNUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoZXNbaW5kZXhdLnRtcCgpOworCisg
ICAgICAgIGlmICghcG9zc2libGVTY3JhdGNoKQorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBwb3Nz
aWJsZVNjcmF0Y2gsIHNjcmF0Y2hlc1tpbmRleF0pKTsKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxl
U2NyYXRjaDsKKyAgICB9OworCisgICAgYXV0byByZXR1cm5TY3JhdGNoID0gWyZdICh1bnNpZ25l
ZCBpbmRleCwgVG1wIHRtcCkgeworICAgICAgICBpZiAoQXJnKHRtcCkgIT0gc2NyYXRjaGVzW2lu
ZGV4XSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBv
cmlnaW4sIHNjcmF0Y2hlc1tpbmRleF0sIHRtcCkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRs
ZVNoaWZ0UGFpciA9IFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIsIHVuc2lnbmVkIHNjcmF0
Y2hJbmRleCkgeworICAgICAgICBPcGNvZGUgbW92ZSA9IG1vdmVGb3JXaWR0aChwYWlyLndpZHRo
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygp
LmtpbmQoKSwgcGFpci5kc3QoKS5raW5kKCkpKSB7CisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9
CisgICAgICAgICAgICAgICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZpbmRQb3NzaWJsZVNj
cmF0Y2godHlwZSwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obW92ZSwgcGFp
ci5zcmMoKS5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgcGFpci5zcmMoKSwgc2Ny
YXRjaCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIu
c3JjKCkuaXNTb21lSW1tKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtb3ZlID09IE1vdmUz
Mik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUsIG9yaWdpbiwgQXJn
OjppbW02NChwYWlyLnNyYygpLnZhbHVlKCkpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSks
IG9yaWdpbiwgc2NyYXRjaCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuU2NyYXRj
aChzY3JhdGNoSW5kZXgsIHNjcmF0Y2gpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZSwgb3JpZ2luLCBwYWly
LnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnQgPSBb
Jl0gKFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBvcHRpbWl6ZSB0aGUgc3BpbGwgYmVoYXZpb3Igb2YgdGhlIHNoaWZ0ZXIgYnkgY2hlY2tp
bmcgaWYgYW55IG9mIHRoZQorICAgICAgICAvLyBzaGlmdHMgbmVlZCBzcGlsbHMuIElmIHRoZXkg
ZG8sIHRoZW4gd2UgY291bGQgdHJ5IHRvIGdldCBhIHJlZ2lzdGVyIG91dCBoZXJlLiBOb3RlIHRo
YXQKKyAgICAgICAgLy8gdGhpcyBtYXkgZmFpbCB3aGVyZSB0aGUgY3VycmVudCBzdHJhdGVneSBz
dWNjZWVkczogb3V0IGhlcmUgd2UgbmVlZCBhIHJlZ2lzdGVyIHRoYXQgZG9lcworICAgICAgICAv
LyBub3QgaW50ZXJmZXJlIHdpdGggYW55IG9mIHRoZSBzaGlmdHMsIHdoaWxlIHRoZSBjdXJyZW50
IHN0cmF0ZWd5IG9ubHkgbmVlZHMgdG8gZmluZCBhCisgICAgICAgIC8vIHNjcmF0Y2ggcmVnaXN0
ZXIgdGhhdCBkb2VzIG5vdCBpbnRlcmZlciB3aXRoIGEgcGFydGljdWxhciBzaGlmdC4gU28sIHRo
aXMgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHdpbGwgYmUgb3Bwb3J0dW5pc3RpYzogaWYgaXQg
c3VjY2VlZHMsIHRoZW4gdGhlIGluZGl2aWR1YWwgc2hpZnRzIGNhbiB1c2UgdGhhdCBzY3JhdGNo
LAorICAgICAgICAvLyBvdGhlcndpc2UgdGhleSB3aWxsIGRvIHdoYXQgdGhleSBkbyBub3cuCisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXplKCk7IGktLTspCisg
ICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisgICAgICAgIEFyZyBs
YXN0RHN0ID0gc2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFzdERzdC5pc1RtcCgp
KSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hlcykgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAgICAgICAgICAgIGlm
ICghc2NyYXRjaC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBsYXN0
RHN0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0
cyB3aG9zZSBsYXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBz
Y3JhdGNoIHJlZ2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwg
c2VxdWVuY2UsIHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBi
ZQorICAgIC8vIGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVt
aXR0ZWQgcHJpb3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyBy
ZXZlcnNlKS4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAgICAgIFZlY3Rv
cjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmIChzaGlmdC5s
YXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAg
ICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRsZSB0aGUgcmVz
dCBvZiB0aGUgc2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAgICAg
ICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYg
KCFzaGlmdC5sYXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNo
aWZ0KTsKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9yIChSb3RhdGUm
IHJvdGF0ZSA6IHJvdGF0ZXMpIHsKKyAgICAgICAgaWYgKCFyb3RhdGUuZnJpbmdlLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIHRoZSBmcmluZ2UgZmlyc3QhIFRo
aXMgd29uJ3QgY2xvYmJlciBhbnkgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGFyZQorICAgICAgICAg
ICAgLy8gcGFydCBvZiB0aGUgcm90YXRpb24uCisgICAgICAgICAgICBoYW5kbGVTaGlmdChyb3Rh
dGUuZnJpbmdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5Td2FwID0g
ZmFsc2U7CisgICAgICAgIE9wY29kZSBzd2FwID0gT29wczsKKyAgICAgICAgQXJnOjpXaWR0aCBz
d2FwV2lkdGggPSBBcmc6OldpZHRoODsgLy8gYm9ndXMgdmFsdWUKKworICAgICAgICAvLyBDdXJy
ZW50bHksIHRoZSBzd2FwIGluc3RydWN0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIGZsb2F0aW5n
IHBvaW50IG9uIGFueSBhcmNoaXRlY3R1cmUgd2UKKyAgICAgICAgLy8gc3VwcG9ydC4KKyAgICAg
ICAgaWYgKHR5cGUgPT0gQXJnOjpHUCkgeworICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0
aGVyIHdlIHdpbGwgYmUgZG9pbmcgNjQtYml0IHN3YXBzIG9yIDMyLWJpdCBzd2Fwcy4gSWYgd2Ug
aGF2ZSBhIG1peCBvZgorICAgICAgICAgICAgLy8gd2lkdGhzIHdlIGhhbmRsZSB0aGF0IGJ5IGZp
eGluZyB1cCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgd2l0aCB6ZXJvLWV4dGVuZHMuCisgICAgICAg
ICAgICBzd2FwID0gU3dhcDMyOworICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMy
OworICAgICAgICAgICAgYm9vbCBoYXNNZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wg
aGFzSW5kZXggPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiBy
b3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFpci53aWR0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAg
ICAgICBzd2FwID0gU3dhcDY0OworICAgICAgICAgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6
OldpZHRoNjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGhhc01lbW9yeSB8PSBwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3Qo
KS5pc01lbW9yeSgpOworICAgICAgICAgICAgICAgIGhhc0luZGV4IHw9IHBhaXIuc3JjKCkuaXNJ
bmRleCgpIHx8IHBhaXIuZHN0KCkuaXNJbmRleCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYW5Td2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKTsKKworICAgICAgICAgICAgLy8gV2UgY2FuIHRvdGFsbHkgdXNlIHN3YXBzIGV2ZW4g
aWYgdGhlcmUgYXJlIHNodWZmbGVzIGludm9sdmluZyBtZW1vcnkuIEJ1dCwgd2UgcGxheSBpdAor
ICAgICAgICAgICAgLy8gc2FmZSBpbiB0aGF0IGNhc2UuIFRoZXJlIGFyZSBjb3JuZXIgY2FzZXMg
d2UgZG9uJ3QgaGFuZGxlLCBhbmQgb3VyIGFiaWxpdHkgdG8gZG8gaXQgaXMKKyAgICAgICAgICAg
IC8vIGNvbnRpbmdlbnQgdXBvbiBzd2FwIGZvcm0gYXZhaWxhYmlsaXR5LgorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaGFzTWVtb3J5KSB7CisgICAgICAgICAgICAgICAgY2FuU3dhcCAm
PSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpBZGRyKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2FwcGluZyBwYXRoIGlm
IHRoZXJlIGlzIGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBzaHVmZmxlcyBpbnZvbHZlIG1lbW9yeS4gVGhhdCBnZXRzIHRvbyBjb25mdXNpbmcuIFdl
IG1pZ2h0IGJlIGFibGUgdG8gcmVsYXggdGhpcworICAgICAgICAgICAgICAgIC8vIHRvIG9ubHkg
YmFpbCBpZiB0aGVyZSBhcmUgc3Vid2lkdGggcGFpcnMgaW52b2x2aW5nIG1lbW9yeSwgYnV0IEkg
aGF2ZW4ndCB0aG91Z2h0CisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaXQgdmVyeSBoYXJkLiBB
bnl3YXksIHRoaXMgY2FzZSBpcyBub3QgY29tbW9uOiByb3RhdGVzIGludm9sdmluZyBtZW1vcnkK
KyAgICAgICAgICAgICAgICAvLyBkb24ndCBhcmlzZSBmb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCB0
aGV5IHdpbGwgb25seSBoYXBwZW4gZm9yIHJvdGF0ZXMgaW4gdXNlciBjb2RlCisgICAgICAgICAg
ICAgICAgLy8gaWYgc29tZSBvZiB0aGUgdmFyaWFibGVzIGdldCBzcGlsbGVkLiBJdCdzIGhhcmQg
dG8gaW1hZ2luZSBhIHByb2dyYW0gdGhhdCByb3RhdGVzCisgICAgICAgICAgICAgICAgLy8gZGF0
YSBhcm91bmQgaW4gdmFyaWFibGVzIHdoaWxlIGFsc28gZG9pbmcgYSBjb21iaW5hdGlvbiBvZiB1
aW50MzItPnVpbnQ2NCBhbmQKKyAgICAgICAgICAgICAgICAvLyBpbnQ2NC0+aW50MzIgY2FzdHMu
CisgICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKQor
ICAgICAgICAgICAgICAgICAgICBjYW5Td2FwICY9IHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGg7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYXNJbmRleCkKKyAgICAgICAgICAg
ICAgICBjYW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OkluZGV4KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgQXJnIGxlZnQgPSByb3RhdGUubG9vcFtpXS5zcmMoKTsKKyAgICAgICAgICAgICAgICBBcmcg
cmlnaHQgPSByb3RhdGUubG9vcFtpICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC5pc01lbW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJl
IHJhcmUuIFNwaWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRh
dGEgYmV0d2VlbiB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUg
c3R1ZmYgaGFzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0g
Z2V0U2NyYXRjaCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdp
biwgbGVmdCwgc2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKElu
c3Qoc3dhcCwgb3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRj
aCwgbGVmdCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gp
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN3YXAobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29w
KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGgpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocGFpci53aWR0aCgpID09IEFyZzo6V2lkdGgzMik7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3dhcFdpZHRoID09IEFyZzo6V2lkdGg2NCk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE5l
ZWQgdG8gZG8gYW4gZXh0cmEgemVybyBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChJbnN0KE1vdmUzMiwgb3JpZ2luLCBwYWlyLmRzdCgpLCBwYWlyLmRzdCgpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdHJl
YXQgdGhpcyBhcyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5hdGlv
biAoaS5lLiBmaXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJzdC4g
VGhlbiB3ZSBoYW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3RhdGUK
KyAgICAgICAgICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBkZXN0
aW5hdGlvbi4gVGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAgICAg
Ly8gZmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZlIGEg
cm90YXRlIHRoYXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUgcmVn
aXN0ZXIgZmlsZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVTY3Jh
dGNoKAorICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1w
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDog
cm90YXRlLmxvb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLnVz
ZXNUbXAodG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKS51c2VzVG1wKHRtcCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBtb3N0IGxpa2VseSB1c2Ugb2Yg
c2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBz
Y3JhdGNoKTsKKworICAgICAgICAgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGZvdW5kIGEgc2NyYXRj
aCByZWdpc3Rlci4gV2hlbiB0aGlzIGhhcHBlbnMsIHdlIGNhbiBqdXN0IHVzZSB0aGUgc3BpbGwK
KyAgICAgICAgICAgIC8vIHNsb3QgZGlyZWN0bHkuCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2
ZSA9IHNjcmF0Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFp
cihyb3RhdGUubG9vcC5sYXN0KCkuZHN0KCksIHJvdGF0ZVNhdmUsIHJvdGF0ZS5sb29wWzBdLndp
ZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Au
c2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRl
Lmxvb3BbaV0sIDEpOworCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoCisgICAgICAgICAg
ICAgICAgU2h1ZmZsZVBhaXIocm90YXRlU2F2ZSwgcm90YXRlLmxvb3BbMF0uZHN0KCksIHJvdGF0
ZS5sb29wWzBdLndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAg
ICAgICAgICAgICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbW1pdFJlc3VsdCgpOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9y
PFNodWZmbGVQYWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNj
cmF0Y2gsIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBv
cmlnaW4pCit7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBncFBhaXJzOworICAgIFZlY3RvcjxT
aHVmZmxlUGFpcj4gZnBQYWlyczsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDog
cGFpcnMpIHsKKyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBwYWlyLmRzdCgp
LmlzTWVtb3J5KCkgJiYgcGFpci53aWR0aCgpID4gQXJnOjpwb2ludGVyV2lkdGgoKSkgeworICAg
ICAgICAgICAgLy8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxh
dGZvcm0gYXJlIGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFp
cnMuYXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuc3JjKCkuaXNHUCgpICYm
IHBhaXIuZHN0KCkuaXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQ
YWlycyBnZXRzIG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRo
YXQgd2UKKyAgICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcg
R1BScywgZXhjZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBh
aXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFw
cGVuZChwYWlyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3Vs
dC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQLCBv
cmlnaW4pKTsKKyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGZwUGFpcnMsIGZw
U2NyYXRjaCwgQXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNo
dWZmbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gK
KyNkZWZpbmUgQWlyRW1pdFNodWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKwor
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVm
ZmxlUGFpcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcm
IHNyYywgY29uc3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMo
c3JjKQorICAgICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9
CisgICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8g
VGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5
IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQg
cGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBN
b3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCisgICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6
V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZs
ZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91
IHNob3VsZCBwYXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZl
IHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRo
ZXkncmUKKy8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxl
LCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZl
IGF0IHRoZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhh
dmUgc2NyYXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBs
aWtlIGxvb2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdz
IGFsd2F5cyBzYWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQg
cmVwbGFjaW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2
aWV3ZWQgYXMgYW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0
aW1pemF0aW9uLiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCBy
ZWdpc3RlcnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBh
bmQgYXJlIG5vdCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4g
Tm90IGJlaW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNh
bm5vdAorLy8gICBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIHNvdXJjZXMgb2YgdGhlIHNodWZmbGUu
CisvLworLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdoZW4g
eW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3RoCisvLyAgIGFz
IHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFudGVlZCBub3Qg
dG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2FwIGluc3RydWN0
aW9uIGF2YWlsYWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBoYXZlIGFueSBt
ZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0
aW9uIG9mCisvLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2IHdoaWxlIEZQ
IG5ldmVyIHN1cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5nIG1lbW9yeSBsb2NhdGlvbnMg
YXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSByZWdpc3RlciBh
bGxvY2F0aW9uIGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2UgZW1pdFNodWZm
bGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9lcyBuZWVkCisv
LyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2FtZW50IGlzIHRv
IGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKKy8vICAgcmVnaXN0ZXIg
YWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZmbGUgaW5zdHJ1
Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZsaW5ncyB1bnRpbCBhZnRlciBy
ZWdhbGxvYy4KKy8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkgcGFpcnMgYXJl
IG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5b3Ugd2FudAor
Ly8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBtYWtpbmcgc3Vy
ZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KKy8vICAgZ2V0IGFj
Y2VwdGFibGUgcGVyZm9ybWFuY2UuCisvLworLy8gTk9URTogVXNlIHRoaXMgbWV0aG9kIChhbmQg
aXRzIGZyaWVuZCBiZWxvdykgdG8gZW1pdCBzaHVmZmxlcyBhZnRlciByZWdpc3RlciBhbGxvY2F0
aW9uLiBCZWZvcmUKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXQgaXMgbXVjaCBiZXR0ZXIgdG8g
c2ltcGx5IHVzZSB0aGUgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1
ZmZsZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRj
aCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgdGhh
dCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0ZXJzIG9y
IG1lbW9yeSBsb2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBydWxl
cyBhYm92ZS4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1
ZmZsZVBhaXI+JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29u
c3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbik7CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisjaW5j
bHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2lu
Y2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuaCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihD
b2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxvd2VyTWFj
cm9zKGNvZGUpOworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlv
bnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRp
b25zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NTYKQEAgLTgwLDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2Rl
KQogICAgIGVsc2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAK
KyAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0aGlzIHBv
aW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQg
ZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNo
IGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxs
ZWVTYXZlcyhjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSArMzgsMTEgQEAgY2xhc3MgQ29k
ZTsKIAogLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFj
ayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBh
bGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotdm9pZCBwcmVwYXJlRm9y
R2VuZXJhdGlvbihDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5l
cmF0aW9uKENvZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdp
dmVuIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJh
Y2tzCiAvLyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgotdm9pZCBn
ZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdl
bmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsMTgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCit2
b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8
SW5zdD4mIGluc3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzKQorICAg
ICAgICBpbnNlcnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNlcnRpb25TZXQ6Omlu
c2VydEluc3RzKHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMpCit7CisgICAgZm9y
IChJbnN0JiBpbnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIFdURk1vdmUo
aW5zdCkpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9j
aykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMu
ZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2Vy
dGlvblNldC5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpm
b3J3YXJkPEluc3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXpl
X3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6
ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJ
KHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxNSBAQCBwdWJsaWM6CiAKICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29kZSAhPSBO
b3AgfHwgYXJncy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKCkgeyB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZyBhcmcs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcmdzLmFwcGVuZChhcmcp
OworICAgICAgICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9CisKICAgICAvLyBOb3RlIHRo
YXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50
IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50
IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIg
dGhlbiB5b3UncmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpcklu
c2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWly
TGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVn
aXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2Mi
KTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBsb3dl
ckFmdGVyUmVnQWxsb2M6XG4iLCBjb2RlKTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVy
U2V0PiB1c2VkUmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6
OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAg
ICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAgIGJvb2wgaXNSZWxldmFu
dCA9IGluc3Qub3Bjb2RlID09IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNSZWxldmFudCkgeworICAgICAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldC5zZXQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgaWYgKGlzUmVsZXZh
bnQpCisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoJmluc3QsIHNldCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJTZXQg
c2V0LCBBcmc6OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKKyAgICAgICAgc3Rk
OjphcnJheTxBcmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI7ICsraSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAg
ICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9
IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkgewor
ICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soCisgICAgICAgICAgICAgICAg
ICAgIGNvZGUuYWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpieXRl
cyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIC8vIE5vdyB0cmFuc2Zvcm0gdGhl
IGNvZGUuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIHN3
aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2h1ZmZsZTogeworICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKyAg
ICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBpICs9IDMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAg
ICAgICAgICAgIEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAyXS53aWR0aCgpOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoZSB1c2VkIHJlZ2lzdGVyIHNldCBjb250YWlucyB0aGluZ3MgbGl2
ZSBhZnRlciB0aGUgc2h1ZmZsZS4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIGVtaXRTaHVm
ZmxlKCkgd2FudHMgYSBzY3JhdGNoIHJlZ2lzdGVyIHRoYXQgaXMgbm90IGp1c3QgZGVhZCBidXQg
YWxzbyBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcmZlcmUgd2l0aCBlaXRo
ZXIgc291cmNlcyBvciBkZXN0aW5hdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXhj
bHVkZVJlZ2lzdGVycyA9IFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1w
LnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgc3Jj
LmZvckVhY2hUbXBGYXN0KGV4Y2x1ZGVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICBk
c3QuZm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3Qs
IHdpZHRoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8
QXJnLCAyPiBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkdQKTsKKyAgICAgICAg
ICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwg
QXJnOjpGUCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAg
ICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gs
IGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIENvbGRDQ2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5z
dC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCByZWdzVG9TYXZlID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworCisgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgcHJlVXNlZCA9IHJlZ3NUb1NhdmU7CisgICAgICAgICAgICAgICAgVmVj
dG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihjb2RlLCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50
eXBlKCkpOworICAgICAgICAgICAgICAgIEFyZyBvcmlnaW5hbFJlc3VsdCA9IHJlc3VsdCA/IGlu
c3QuYXJnc1sxXSA6IEFyZygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZl
Y3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIEFy
ZyBzcmMgPSBpbnN0LmFyZ3NbcmVzdWx0ID8gKGkgPj0gMSA/IGkgKyAxIDogaSkgOiBpIF07Cisg
ICAgICAgICAgICAgICAgICAgIEFyZyBkc3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50
eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3Jj
LCBkc3QsIHdpZHRoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBleGNsdWRlUmVnaXN0
ZXJzID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlz
UmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlVXNlZC5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmZvckVh
Y2hUbXBGYXN0KGV4Y2x1ZGVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICBkc3QuZm9y
RWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhw
cmVVc2VkLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBT
Y3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQsIEFyZzo6RlApOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEFsc28gbmVlZCB0byBzYXZlIGFsbCBsaXZlIHJlZ2lzdGVy
cy4gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAg
Ly8gcmVnaXN0ZXIuCisgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVzdWx0LmlzUmVnKCkp
CisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUuY2xlYXIob3JpZ2luYWxSZXN1bHQucmVn
KCkpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOworICAg
ICAgICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChBcmc6OmJ5dGVzKHdpZHRoKSwg
U3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6c3RhY2soc3RhY2tTbG90KSwgd2lkdGgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2xvdHMuYXBwZW5kKHN0YWNrU2xvdCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4
LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7
CisKKyAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwg
ZGVzdGluYXRpb25zKTsKKworICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQg
Y29kZSB0byByZXN0b3JlIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBwYWlycy5yZXNpemUo
MCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tTbG90SW5kZXggPSAwOworICAgICAg
ICAgICAgICAgIHJlZ3NUb1NhdmUuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBcmcgYXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBB
cmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gc3RhY2tTbG90c1tz
dGFja1Nsb3RJbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChT
aHVmZmxlUGFpcihBcmc6OnN0YWNrKHN0YWNrU2xvdCksIGFyZywgd2lkdGgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAg
ICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyKHJlc3VsdCwgb3JpZ2luYWxSZXN1bHQsIEFyZzo6
d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWly
cy5hcHBlbmQocGFpcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KG9yaWdpbmFsUmVzdWx0LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
c2V0KG9yaWdpbmFsUmVzdWx0LnJlZygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocmVnc1RvU2F2ZSwgQXJnOjpHUCk7CisgICAg
ICAgICAgICAgICAgZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHJlZ3NUb1NhdmUsIEFyZzo6RlAp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJ
bnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgZW1pdFNodWZmbGUocGFp
cnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworCisgICAgICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ckFmdGVyUmVnQWxsb2MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCisjZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Y19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgbG93ZXJzIFNodWZm
bGUgYW5kIENvbGRDQ2FsbCBpbnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQgdG8g
YmUgcnVuIGFmdGVyIHJlZ2lzdGVyCisvLyBhbGxvY2F0aW9uLgorCit2b2lkIGxvd2VyQWZ0ZXJS
ZWdBbGxvYyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxsb2Nf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jv
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
KyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmIGNvZGUpCit7Cisg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlck1hY3JvcyIpOworCisgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNv
ZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgICAgICAgICBDQ2FsbFZh
bHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworCisgICAgICAgICAg
ICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5nQ29udmVudGlv
bihjb2RlLCB2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBJbnN0IHNodWZmbGVBcmd1bWVudHMo
U2h1ZmZsZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVl
LT50eXBlKCkgPT0gVm9pZCA/IDAgOiAxOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBkZXN0aW5hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgICAgICAgICBz
aHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tvZmZzZXQgKyBpXSk7CisgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJncy5hcHBlbmQoZGVzdGluYXRpb25z
W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChB
cmc6OndpZHRoQXJnKEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoaW5z
dEluZGV4LCBXVEZNb3ZlKHNodWZmbGVBcmd1bWVudHMpKTsKKworICAgICAgICAgICAgICAgIC8v
IEluZGljYXRlIHRoYXQgd2UncmUgdXNpbmcgb3VyIG9yaWdpbmFsIGNhbGxlZSBhcmd1bWVudC4K
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbnNbMF0gPSBpbnN0LmFyZ3NbMF07CisKKyAgICAg
ICAgICAgICAgICAvLyBTYXZlIHdoZXJlIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBwdXQgaXRz
IHJlc3VsdC4KKyAgICAgICAgICAgICAgICBBcmcgcmVzdWx0RHN0ID0gdmFsdWUtPnR5cGUoKSA9
PSBWb2lkID8gQXJnKCkgOiBpbnN0LmFyZ3NbMV07CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwgaW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9u
cyk7CisKKyAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5
cGUoKSk7CisgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZsb2F0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCArIDEsIE1vdmVGbG9hdCwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEb3VibGU6
CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwg
TW92ZURvdWJsZSwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlMzIsIHZhbHVlLCByZXN1
bHQsIHJlc3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQo
aW5zdEluZGV4ICsgMSwgTW92ZSwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckxvd2VyTWFjcm9zX2gKKyNkZWZpbmUgQWlyTG93ZXJNYWNyb3Nf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBBaXIgaGFzIHNvbWUgb3Bjb2Rl
cyB0aGF0IGFyZSB2ZXJ5IGhpZ2gtbGV2ZWwgYW5kIGFyZSBtZWFudCB0byByZWR1Y2UgdGhlIGFt
b3VudCBvZiBsb3ctbGV2ZWwKKy8vIGtub3dsZWRnZSBpbiB0aGUgQjMtPkFpciBsb3dlcmluZy4g
VGhlIGN1cnJlbnQgZXhhbXBsZSBpcyBDQ2FsbC4KKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJik7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJMb3dlck1hY3Jvc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTk1MDY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29y
a2luZyBjb3B5KQpAQCAtNDE3LDYgKzQxNywxNCBAQCBNb3ZlIFU6RzpQdHIsIEQ6RzpQdHIKICAg
ICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCiAgICAgeDg2OiBJbW0sIEFkZHIgYXMgc3RvcmVQdHIK
IAoreDg2OiBTd2FwMzIgVUQ6RzozMiwgVUQ6RzozMgorICAgIFRtcCwgVG1wCisgICAgVG1wLCBB
ZGRyCisKK3g4Nl82NDogU3dhcDY0IFVEOkc6NjQsIFVEOkc6NjQKKyAgICBUbXAsIFRtcAorICAg
IFRtcCwgQWRkcgorCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVy
b0V4dGVuZDMyVG9QdHIKICAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCkBAIC02ODIsNyArNjkwLDE5
IEBAIFJldERvdWJsZSBVOkY6NjQgL3JldHVybgogCiBPb3BzIC90ZXJtaW5hbAogCisjIEEgU2h1
ZmZsZSBpcyBhIG11bHRpLXNvdXJjZSwgbXVsdGktZGVzdGluYXRpb24gbW92ZS4gSXQgc2ltdWx0
YW5lb3VzbHkgZG9lcyBtdWx0aXBsZSBtb3ZlcyBhdCBvbmNlLgorIyBUaGUgbW92ZXMgYXJlIHNw
ZWNpZmllZCBhcyB0cmlwbGV0cyBvZiBzcmMsIGRzdCwgYW5kIHdpZHRoLiBGb3IgZXhhbXBsZSB5
b3UgY2FuIHJlcXVlc3QgYSBzd2FwIHRoaXMKKyMgd2F5OgorIyAgICAgU2h1ZmZsZSAldG1wMSwg
JXRtcDIsIDY0LCAldG1wMiwgJXRtcDEsIDY0CitjdXN0b20gU2h1ZmZsZQorCiAjIEFpciBhbGxv
d3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQg
ZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKICMgd2hpY2ggbXVzdCBiZSB0aGUgZmly
c3Qgb3BlcmFuZC4KIGN1c3RvbSBQYXRjaAogCisjIEluc3RydWN0aW9ucyB1c2VkIGZvciBsb3dl
cmluZyBDIGNhbGxzLiBUaGVzZSBkb24ndCBtYWtlIGl0IHRvIEFpciBnZW5lcmF0aW9uLiBUaGV5
IGdldCBsb3dlcmVkIHRvCisjIHNvbWV0aGluZyBlbHNlIGZpcnN0LiBUaGUgb3JpZ2luIFZhbHVl
IG11c3QgYmUgYSBDQ2FsbFZhbHVlLgorY3VzdG9tIENDYWxsCitjdXN0b20gQ29sZENDYWxsCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3Rl
clByaW9yaXR5LmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAg
Y29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVyVHlwZQogICAgIHJldHVybiBSZWdp
c3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOwogfQogCi1jb25z
dCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworSlNfRVhQT1JU
X1BSSVZBVEUgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBl
KTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTcwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
R2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJl
Z2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUu
aCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
KyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDxjbWF0aD4K
KyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKKy8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RPX0VYSVQsIG5vciBzaG91
bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgorc3RhdGljIGJvb2wgaGlkZGVuVHJ1dGhCZWNhdXNl
Tm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KKworc3RhdGljIHZvaWQgdXNhZ2Uo
KQoreworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0YjMgWzxmaWx0ZXI+XVxuIik7CisgICAgaWYg
KGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAgICAgICAgZXhpdCgxKTsK
K30KKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyOworCituYW1lc3BhY2UgeworCitTdGF0aWNMb2NrIGNyYXNo
TG9jazsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3Rp
bmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlm
ICghISh4KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNyYXNoTG9jay5sb2NrKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdURlJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNU
SU9OLCAjeCk7IFwKKyAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworVk0q
IHZtOworCitzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlKEIzOjpQcm9j
ZWR1cmUmIHByb2MpCit7CisgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYy5jb2RlKCkpOwor
ICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2MuY29kZSgpLCBqaXQp
OworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorVCBpbnZva2UoY29uc3QgQjM6OkNvbXBpbGF0aW9uJiBjb2RlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdp
c2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBpbGVBbmRSdW4oQjM6OlBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVy
biBpbnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKK30KKwordm9p
ZCB0ZXN0U2ltcGxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oNDIpLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKworLy8gVXNlIHRoaXMgdG8gcHV0IGEgY29uc3RhbnQg
aW50byBhIHJlZ2lzdGVyIHdpdGhvdXQgQWlyIGJlaW5nIGFibGUgdG8gc2VlIHRoZSBjb25zdGFu
dC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGxvYWRDb25zdGFudEltcGwoQmFzaWNCbG9j
ayogYmxvY2ssIFQgdmFsdWUsIEIzOjpBaXI6Ok9wY29kZSBtb3ZlLCBUbXAgdG1wLCBUbXAgc2Ny
YXRjaCkKK3sKKyAgICBzdGF0aWMgU3RhdGljTG9jayBsb2NrOworICAgIHN0YXRpYyBzdGQ6Om1h
cDxULCBUKj4qIG1hcDsgLy8gSSdtIG5vdCBtZXNzaW5nIHdpdGggSGFzaE1hcCdzIHByb2JsZW1z
IHdpdGggaW50ZWdlcnMuCisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihsb2NrKTsKKyAgICBpZiAo
IW1hcCkKKyAgICAgICAgbWFwID0gbmV3IHN0ZDo6bWFwPFQsIFQqPigpOworCisgICAgaWYgKCFt
YXAtPmNvdW50KHZhbHVlKSkKKyAgICAgICAgKCptYXApW3ZhbHVlXSA9IG5ldyBUKHZhbHVlKTsK
KworICAgIFQqIHB0ciA9ICgqbWFwKVt2YWx1ZV07CisgICAgYmxvY2stPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocHRyKSksIHNjcmF0Y2gp
OworICAgIGJsb2NrLT5hcHBlbmQobW92ZSwgbnVsbHB0ciwgQXJnOjphZGRyKHNjcmF0Y2gpLCB0
bXApOworfQorCit2b2lkIGxvYWRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgaW50cHRyX3Qg
dmFsdWUsIFRtcCB0bXApCit7CisgICAgbG9hZENvbnN0YW50SW1wbDxpbnRwdHJfdD4oYmxvY2ss
IHZhbHVlLCBNb3ZlLCB0bXAsIHRtcCk7Cit9CisKK3ZvaWQgbG9hZERvdWJsZUNvbnN0YW50KEJh
c2ljQmxvY2sqIGJsb2NrLCBkb3VibGUgdmFsdWUsIFRtcCB0bXAsIFRtcCBzY3JhdGNoKQorewor
ICAgIGxvYWRDb25zdGFudEltcGw8ZG91YmxlPihibG9jaywgdmFsdWUsIE1vdmVEb3VibGUsIHRt
cCwgc2NyYXRjaCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTd2FwKCkKK3sKKyAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRt
cChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRo
aW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9v
dC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s1XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNl
LCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNl
LCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9j
OworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25z
dGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRt
cChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5m
bzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRt
cChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBp
bnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJh
c2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJh
c2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNL
KHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0so
dGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZUxvbmdTaGlmdEJhY2t3YXJkcygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9j
OworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZv
OjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25z
dGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRt
cChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5m
bzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBp
bnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJh
c2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJh
c2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNL
KHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7CisgICAgQ0hFQ0so
dGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA3KTsKK30KKwordm9pZCB0
ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgK
KyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRo
aW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA0KTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisK
KyAgICBpbnQzMl90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjph
ZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgw
KSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0
aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0
aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDEpOworICAgIENIRUNLKHRo
aW5nc1szXSA9PSAxKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJn
OjpHUCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgzNSksIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgIHVuc2lnbmVkIGNvdW50ID0gMTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdzKSB7
CisgICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAgIGxv
YWRDb25zdGFudChyb290LCBjb3VudCsrLCBUbXAocmVnKSk7CisgICAgfQorICAgIEluc3QmIHNo
dWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0cik7CisgICAgZm9yIChSZWcgcmVn
IDogcmVncykgeworICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAg
ICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAocmVnKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0
YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChy
ZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisKKyAgICBW
ZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIFRtcCBiYXNlID0g
Y29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihp
bnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNp
emVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIGZvciAoaW50
MzJfdCB0aGluZyA6IHRoaW5ncykKKyAgICAgICAgQ0hFQ0sodGhpbmcgPT0gMzUpOworfQorCit2
b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7Cisg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2
LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQ
UkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpy
ZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQ
UkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMy
X3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwg
NSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3
KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Cisg
ICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRo
aW5nc1syXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMik7CisgICAgQ0hFQ0sodGhp
bmdzWzRdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAgICBDSEVDSyh0aGlu
Z3NbNl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDQpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlVHJlZVNoaWZ0QmFja3dhcmQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRD
b25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYs
IFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BS
SW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJl
Z1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJ
bmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MSksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJf
dCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAy
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1
ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkp
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcp
LCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAg
ICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRo
aW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhp
bmdzWzJdID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBDSEVDSyh0aGlu
Z3NbNF0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAgIENIRUNLKHRoaW5n
c1s2XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNo
dWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIHRlc3Qg
d2FzIG15IG9yaWdpbmFsIGF0dGVtcHQgYXQgVHJlZVNoaWZ0QmFja3dhcmQgYnV0IG1pc3Rha2Vz
IHdlcmUgbWFkZS4gU28sIHRoaXMKKyAgICAvLyBlbmRzIHVwIGJlaW5nIGp1c3QgYSB3ZWlyZCB0
ZXN0LiBCdXQgd2VpcmQgdGVzdHMgYXJlIHVzZWZ1bCwgc28gSSBrZXB0IGl0LgorICAgIAorICAg
IEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChy
b290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwg
VG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJ
bmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVn
VDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRD
b25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAg
ICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BS
SW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q1
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDYpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2Rl
Lm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJh
c2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJh
c2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3Ms
IDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3Nb
MV0gPT0gOCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDgpOworICAgIENIRUNLKHRoaW5nc1sz
XSA9PSA3KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNyk7CisgICAgQ0hFQ0sodGhpbmdzWzVd
ID09IDYpOworICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10g
PT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86
OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykp
OworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2Rl
Lm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJh
c2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworICAgIENIRUNL
KHRoaW5nc1s0XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMSk7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9
IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0
YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290
LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNo
dWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5m
bzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0
aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENI
RUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hF
Q0sodGhpbmdzWzNdID09IDEpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVD
Syh0aGluZ3NbNV0gPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVXaXRoTG9uZ0Zy
aW5nZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRt
cChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5m
bzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyks
IFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNl
ID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0
aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKwor
ICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlTXVsdGlwbGVSb3RhdGVzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAg
ICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50
MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNl
LCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNl
LCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5h
cHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisg
ICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOwor
ICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKKyAg
ICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdEFuZFJv
dGF0ZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRt
cChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5m
bzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCks
IFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRy
KGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hF
Q0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0g
Myk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAy
KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQp
OworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0
QWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBw
cm9jLmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3Jp
dHlPcmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2Nr
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgIGxvYWRDb25zdGFudChyb290LCAzNSArIGksIFRtcChyZWdzW2ldKSk7CisgICAgSW5zdCYg
c2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQo
VG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOworCisgICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGlu
dDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAq
IHNpemVvZihpbnQzMl90KSkpOworCisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNp
emUoKSwgNjY2KTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
cy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBB
cmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAg
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzUpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3Nb
aV0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAtIDEpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlUm90YXRlQWxsUmVncygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0g
cmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAzNSArIGksIFRtcChyZWdzW2ldKSk7
CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1
ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMikpOworICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzLmxhc3QoKSksIFRt
cChyZWdzWzBdKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIFN0YWNrU2xv
dCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgp
LCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsK
KworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFz
ZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICog
c2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNl
LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVncy5zaXplKCkp
IC0gMSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSAzNSArIHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIC0g
MSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTd2FwNjQoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAw
MDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikp
OworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGlu
dDY0X3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90
KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAq
IHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVD
Syh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDQwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAw
MDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKQorewor
ICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qx
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNTAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1s1XTsKKyAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMg
KiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50NjRfdCkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXpl
b2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7
CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMzAwMDAw
MDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQwMDAwMDAwMDAwMDAwMDAw
bGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU3dhcE1peGVkV2lkdGgoKQoreworICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAx
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
MikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BS
SW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxw
dHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAg
IGludDY0X3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2
NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNp
emVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
KTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdz
WzJdID09IDQwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oMzAwMDAwMDAwMDAwMDAwMDBsbCkpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlU2hpZnRNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAg
Q29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUu
YWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAz
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDUwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
NCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50NjRfdCB0
aGluZ3NbNV07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihi
YXNlLCA0ICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290
LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwor
CisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNL
KCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEw
MDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAw
MDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRo
aW5nc1s0XSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oNDAwMDAwMDAwMDAwMDAwMDBsbCkpOwor
fQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnkoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9y
eVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgK
KyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQzMl90KSksCisg
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3Qp
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzJd
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hF
Q0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0g
MSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAz
NSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNo
aWZ0TWVtb3J5TG9uZygpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVsw
XSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZv
OjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwK
KyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdU
MSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAwICogc2l6ZW9m
KGludDMyX3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAgKiBzaXplb2YoaW50
MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMSAqIHNpemVv
ZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJ
bmZvOjpyZWdUMiksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBpbnQzMl90IHRoaW5nc1szXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hF
Q0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0g
MSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAz
Nik7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAz
NSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3MoKQoreworICAgIEIz
OjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBp
bnQzMl90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAz
NjsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1Ap
OworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgaSArIDEs
IFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
UHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0g
cm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAg
ICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVv
ZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAg
ICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGlu
dDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXpl
b2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAocmVn
c1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5h
cHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMikpOworCisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICAgICAgTW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgfQor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSAzNik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyAr
K2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7
CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDEpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGlu
dDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAg
bWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSBy
ZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQ
UkluZm86OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3Nb
aV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9y
eSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVn
c1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3Qp
KSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAg
ICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAor
ICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90
KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAo
cmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7
CisKKyAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisg
ICAgICAgICAgICBNb3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwor
CisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkg
PCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVswXSA9
PSAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAw
MGxsKTsKK30KKworaW50NjRfdCBjb21iaW5lSGlMbyhpbnQ2NF90IGhpZ2gsIGludDY0X3QgbG93
KQoreworICAgIHVuaW9uIHsKKyAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgaW50MzJf
dCBoYWx2ZXNbMl07CisgICAgfSB1OworICAgIHUudmFsdWUgPSBoaWdoOworICAgIHUuaGFsdmVz
WzBdID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obG93KTsKKyAgICByZXR1cm4gdS52YWx1ZTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKQoreworICAg
IEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAg
ICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOwor
ICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdz
ID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJl
ZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChy
ZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZt
ZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1w
KHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2
NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisg
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3Qp
KSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50
NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRy
KFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSks
CisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICBzaHVmZmxlLmFwcGVu
ZCgKKyAgICAgICAgICAgIFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwKKyAgICAgICAg
ICAgIChpICYgMSkgPyBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikgOiBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGg2NCkpOworICAgIH0KKworICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVn
cy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
NjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdU
MCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdz
W2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkp
KTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAw
MDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDM2
MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpbnQ2NF90IHZhbHVlID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
aSkgKiAxMDAwMDAwMDAwMDAwbGw7CisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSAoKGkgJiAx
KSA/IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgOiB2YWx1ZSkpOworICAgIH0KKyAgICBD
SEVDSyhtZW1vcnlbMF0gPT0gY29tYmluZUhpTG8oMzUwMDAwMDAwMDAwMDBsbCwgMTAwMDAwMDAw
MDAwMGxsKSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQor
Cit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHBy
b2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50MzJfdCBtZW1vcnlb
Ml07CisgICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAx
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQ
UkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
UHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoCisg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpy
ZWdUMiksIDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qy
KSwgMCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDIpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGlu
dDMyX3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzJdOworICAgIFRtcCBiYXNlID0gY29k
ZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihi
YXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzYpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMik7CisgICAgQ0hFQ0sobWVtb3J5
WzFdID09IDM1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeTY0KCkKK3sKKyAg
ICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisg
ICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsK
KyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgQmFzaWNCbG9jayogcm9v
dCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAw
MGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAw
MDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFk
ZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdU
MiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApLAorICAgICAgICBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0aGluZ3NbMl07Cisg
ICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwg
YmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM2MDAwMDAw
MDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAg
IENIRUNLKG1lbW9yeVswXSA9PSAyMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsx
XSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9y
eU1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2Rl
ID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0g
PSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFu
dChyb290LCAxMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAyMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQ
UkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxs
cHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGlu
dDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAK
KyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRf
dCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihp
bnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6OmFk
ZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChHUFJJbmZv
OjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBp
bnQ2NF90IHRoaW5nc1syXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Cisg
ICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMzYwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0
YXRpY19jYXN0PHVpbnQzMl90PigxMDAwMDAwMDAwMDAwbGwpKTsKKyAgICBDSEVDSyhtZW1vcnlb
MF0gPT0gMjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gY29tYmluZUhp
TG8oMzYwMDAwMDAwMDAwMDBsbCwgMzUwMDAwMDAwMDAwMDBsbCkpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnczY0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7
CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07
CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAw
MDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3Jk
ZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsK
KworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChy
b290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRy
KFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6YWRk
cihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDAp
LCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgcmVncy5sYXN0KCksIHJlZ3NbMF0sIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwg
cmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFd
KSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgVmVj
dG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Nb
MF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAg
TW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qw
KSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAg
IHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNL
KHRoaW5nc1swXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWdzLnNpemUoKSkgKiAxMDAwMDAw
MDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hF
Q0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxs
KTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyht
ZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3Rh
dGVNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOwor
ICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAw
MDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86OnJlZ1QwKSk7CisK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9v
dCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0pKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpy
ZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1swXSksIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIo
VG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwg
MSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAgICAgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIHJlZ3MubGFzdCgpLCByZWdzWzBdLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJl
Z3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSks
IFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIFZlY3Rv
cjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBd
KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAgIE1v
dmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCks
IGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGludDY0X3Q+KHJl
Z3Muc2l6ZSgpKSAqIDEwMDAwMDAwMDAwMDBsbCkpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oMzYwMDAwMDAwMDAwMDBsbCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0g
PT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNL
KG1lbW9yeVswXSA9PSBjb21iaW5lSGlMbygzNTAwMDAwMDAwMDAwMGxsLCAxMDAwMDAwMDAwMDAw
bGwpKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTd2FwRG91YmxlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7Cisg
ICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMSwgVG1wKEZQUklu
Zm86OmZwUmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3Rh
bnQocm9vdCwgMiwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMywgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgNCwgVG1w
KEZQUkluZm86OmZwUmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChGUFJJbmZvOjpmcFJl
Z1QyKSwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCks
CisgICAgICAgIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZG91YmxlIHRoaW5nc1s0XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86
OmZwUmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
RG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6YWRkcihiYXNlLCAy
ICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0
ciwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihkb3Vi
bGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDMpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnREb3VibGUoKQoreworICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWREb3VibGVDb25zdGFudChy
b290LCAxLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAg
IGxvYWREb3VibGVDb25zdGFudChyb290LCAyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCAzLCBUbXAoRlBS
SW5mbzo6ZnBSZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25z
dGFudChyb290LCA0LCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAg
VG1wKEZQUkluZm86OmZwUmVnVDIpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBkb3VibGUgdGhpbmdzWzRdOworICAgIFRtcCBiYXNl
ID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBBcmc6OmFkZHIoYmFz
ZSwgMSAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51
bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
ZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBS
SW5mbzo6ZnBSZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2Yo
dGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIpOwor
ICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7Cit9
CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFza3Mu
YXBwZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVz
dCAiLi4uXG4iKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGVzdDsgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIp
OyAgIFwKKyAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKK3sK
KyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExh
cmdlSGVhcCkubGVha1JlZigpOworCisgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4+IHRhc2tzOworCisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3RO
YW1lKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuICFmaWx0ZXIgfHwgISFzdHJjYXNlc3RyKHRl
c3ROYW1lLCBmaWx0ZXIpOworICAgIH07CisKKyAgICBSVU4odGVzdFNpbXBsZSgpKTsKKyAgICAK
KyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTd2FwKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNp
bXBsZVNoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgpKTsKKyAgICBSVU4o
dGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2lt
cGxlUm90YXRlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgpKTsKKyAg
ICBSVU4odGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZs
ZVRyZWVTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnRCYWNrd2FyZCgpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZVdp
dGhGcmluZ2UoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UoKSk7
CisgICAgUlVOKHRlc3RTaHVmZmxlTXVsdGlwbGVSb3RhdGVzKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVNoaWZ0QW5kUm90YXRlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncygp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVNpbXBsZVN3YXA2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KCkp
OworICAgIFJVTih0ZXN0U2h1ZmZsZVN3YXBNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeSgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUxvbmcoKSk7CisgICAgUlVOKHRlc3RT
aHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVt
b3J5QWxsUmVnczY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnc01p
eGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5KCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeTY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0
ZU1lbW9yeU1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxs
UmVnczY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3NNaXhlZFdp
ZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVN3YXBEb3VibGUoKSk7CisgICAgUlVOKHRlc3RT
aHVmZmxlU2hpZnREb3VibGUoKSk7CisKKyAgICBpZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAg
ICB1c2FnZSgpOworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVt
YmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVhZHMuYXBwZW5kKAor
ICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFk
IiwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0
YXNrOworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MudGFrZUZpcnN0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRhc2stPnJ1bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkp
OworICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQor
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGNyYXNoTG9jay5s
b2NrKCk7Cit9CisKK30gLy8gYW5vbnltb2lzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUo
QjNfSklUKQorCitzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCit7CisgICAgZGF0YUxvZygi
QjMgSklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgY29uc3QgY2hhciog
ZmlsdGVyID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKGFyZ2MpIHsKKyAgICBjYXNlIDE6CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmlsdGVyID0gYXJndlsxXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIHJ1bihmaWx0ZXIpOworICAgIHJldHVybiAwOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBp
biB0aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBC
MyBhcyB0aGUgYmFja2VuZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBp
dCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIg
RlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0
aW5nIQotI2RlZmluZSBGVExfVVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3Ry
dWN0IE5vZGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268999</attachid>
            <date>2016-01-14 13:41:33 -0800</date>
            <delta_ts>2016-01-14 15:02:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>203721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxNi0wMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBuZWVkcyBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbnN0cnVjdGlvbiBjYWxsZWQg
U2h1ZmZsZS4gU2h1ZmZsZSBhbGxvd3MgeW91IHRvIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0KKyAg
ICAgICAgbXVsdGlwbGUgbW92ZXMgdG8gcGVyZm9ybSBhcmJpdHJhcnkgcGVybXV0YXRpb25zIG92
ZXIgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuIFdlIGNhbGwgdGhlc2UKKyAgICAgICAgcm90YXRpb25z
LiBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSAic2hpZnRzIiwgbGlrZSAoYSA9PiBiLCBi
ID0+IGMpOiBhZnRlciB0aGUgc2hpZnQsCisgICAgICAgIGMgd2lsbCBoYXZlIGIncyBvbGQgdmFs
dWUsIGIgd2lsbCBoYXZlIGEncyBvbGQgdmFsdWUsIGFuZCBhIHdpbGwgYmUgdW5jaGFuZ2VkLiBT
aGlmdHMgY2FuCisgICAgICAgIHVzZSBpbW1lZGlhdGVzIGFzIHRoZWlyIHNvdXJjZS4KKworICAg
ICAgICBTaHVmZmxlIGlzIGFkZGVkIGFzIGEgY3VzdG9tIGluc3RydWN0aW9uLCBzaW5jZSBpdCBo
YXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBJdAorICAgICAgICB0YWtlcyBhbnkg
bnVtYmVyIG9mIHRyaXBsZXRzIG9mIGFyZ3VtZW50cywgd2hlcmUgZWFjaCB0cmlwbGV0IGRlc2Ny
aWJlcyBvbmUgbWFwcGluZyBvZiB0aGUKKyAgICAgICAgc2h1ZmZsZS4gRm9yIGV4YW1wbGUsIHRv
IHJlcHJlc2VudCAoYSA9PiBiLCBiID0+IGMpLCB3ZSBtaWdodCBzYXk6CisKKyAgICAgICAgICAg
IFNodWZmbGUgJWEsICViLCA2NCwgJWIsICVjLCA2NAorCisgICAgICAgIE5vdGUgdGhlICI2NCJz
LCB0aG9zZSBhcmUgd2lkdGggYXJndW1lbnRzIHRoYXQgZGVzY3JpYmUgaG93IG1hbnkgYml0cyBv
ZiB0aGUgcmVnaXN0ZXIgYXJlCisgICAgICAgIGJlaW5nIG1vdmVkLiBFYWNoIHRyaXBsZXQgaXMg
cmVmZXJyZWQgdG8gYXMgYSAic2h1ZmZsZSBwYWlyIi4gV2UgY2FsbCBpdCBhIHBhaXIgYmVjYXVz
ZSB0aGUKKyAgICAgICAgbW9zdCByZWxldmFudCBwYXJ0IG9mIGl0IGlzIHRoZSBwYWlyIG9mIHJl
Z2lzdGVycyBvciBtZW1yb3kgbG9jYXRpb25zIChpLmUuICVhLCAlYiBmb3JtIG9uZQorICAgICAg
ICBvZiB0aGUgcGFpcnMgaW4gdGhlIGV4YW1wbGUpLiBGb3IgR1AgYXJndW1lbnRzLCB0aGUgd2lk
dGggZm9sbG93cyBaRGVmIHNlbWFudGljcy4KKworICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSB3
aWxsIGJlIGFibGUgdG8gdXNlIFNodWZmbGUgZm9yIGEgbG90IG9mIHRoaW5ncy4gVGhpcyBwYXRj
aCBpcyBtb2Rlc3QgYWJvdXQKKyAgICAgICAgaG93IHRvIHVzZSBpdDoKKworICAgICAgICAtIEMg
Y2FsbGluZyBjb252ZW50aW9uIGFyZ3VtZW50IG1hcnNoYWxsaW5nLiBQcmV2aW91c2x5IHdlIHVz
ZWQgbW92ZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGF0J3MKKyAgICAgICAgICBwcm9ibGVtYXRpYyBz
aW5jZSBpdCBpbnRyb2R1Y2VzIGFydGlmaWNpYWwgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIGFy
Z3VtZW50IHJlZ2lzdGVycyBhbmQKKyAgICAgICAgICB0aGUgaW5wdXRzLiBVc2luZyBTaHVmZmxl
IHJlbW92ZXMgdGhhdCBpbnRlcmZlcmVuY2UuIFRoaXMgaGVscHMgYSBiaXQuCisKKyAgICAgICAg
LSBDb2xkIEMgY2FsbHMuIFRoaXMgaXMgd2hhdCByZWFsbHkgbW90aXZhdGVkIG1lIHRvIHdyaXRl
IHRoaXMgcGF0Y2guIElmIHdlIGhhdmUgYSBDIGNhbGwgb24KKyAgICAgICAgICBhIGNvbGQgcGF0
aCwgdGhlbiB3ZSB3YW50IGl0IHRvIGFwcGVhciB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGxp
a2UgaXQgZG9lc24ndCBjbG9iYmVyCisgICAgICAgICAgYW55IHJlZ2lzdGVycy4gT25seSBhZnRl
ciByZWdpc3RlciBhbGxvY2F0aW9uIHNob3VsZCB3ZSBoYW5kbGUgdGhlIGNsb2JiZXJpbmcgYnkg
c2ltcGx5CisgICAgICAgICAgc2F2aW5nIGFsbCBvZiB0aGUgbGl2ZSB2b2xhdGlsZSByZWdpc3Rl
cnMgdG8gdGhlIHN0YWNrLiBJZiB5b3UgaW1hZ2luZSB0aGUgc2F2aW5nIGFuZCB0aGUKKyAgICAg
ICAgICBhcmd1bWVudCBtYXJzaGFsbGluZywgeW91IGNhbiBzZWUgaG93IGJlZm9yZSB0aGUgY2Fs
bCwgd2Ugd2FudCB0byBoYXZlIGEgU2h1ZmZsZSB0aGF0IGRvZXMKKyAgICAgICAgICBib3RoIG9m
IHRob3NlIHRoaW5ncy4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGFyZ3VtZW50IG1hcnNoYWxsaW5n
IHdhcyBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgIHNhdmluZywgdGhlbiB3ZSdkIHN0aWxs
IGFwcGVhciB0byBjbG9iYmVyIGFyZ3VtZW50IHJlZ2lzdGVycy4gRG9pbmcgdGhlbSB0b2dldGhl
ciBhcyBvbmUKKyAgICAgICAgICBTaHVmZmxlIG1lYW5zIHRoYXQgdGhlIGNvbGQgY2FsbCBkb2Vz
bid0IGFwcGVhciB0byBldmVuIGNsb2JiZXIgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKworICAg
ICAgICBJJ20gc3RpbGwgdGVzdGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRo
aXMgY2hhbmdlLiBDdXJyZW50bHksIGl0IHBhc3NlcyB0ZXN0cy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6aXNYODZfNjQpOgorICAgICAgICAoSlNDOjppc0lPUyk6CisgICAgICAgIChK
U0M6Om9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Onplcm9FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OnN3YXAzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjptb3ZlQ29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3Jl
NjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN3YXA2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3Zl
NjRUb0RvdWJsZSk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1i
bGVyOjp4Y2hnbF9ybSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6eGNoZ3FfcnIpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnhjaGdxX3JtKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjptb3ZsX3JyKToKKyAgICAgICAgKiBiMy9CM0NDYWxsVmFsdWUuaDoKKyAgICAg
ICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9u
OjpDb21waWxhdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6fkNvbXBpbGF0
aW9uKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgIChKU0M6OkIzOjpD
b21waWxhdGlvbjo6Y29kZSk6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6Y3JlYXRlU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJz
aGFsbENDYWxsQXJndW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzT3BhcXVlQnlwcm9k
dWN0cy5oOgorICAgICAgICAoSlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6Y291bnQpOgorICAg
ICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclJlcCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNTdGFja01lbW9yeSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnVzZXNUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmNhblJl
cHJlc2VudCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNDb21wYXRpYmxlVHlwZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNX
YXJtVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpjb29sZWQpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzRWFybHlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW1QdHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpZHRoQXJnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NvbWVJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQWRkcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1v
cnkpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzUmVsQ29uZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc1dpZHRoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FsaXZlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpmb3JFYWNoVG1wRmFzdCk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5zdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxpbmdD
b252ZW50aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmNvbXB1dGVDQ2Fs
bGluZ0NvbnZlbnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpjQ2FsbFJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OmJ1aWxkQ0NhbGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJD
Q2FsbGluZ0NvbnZlbnRpb24uaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cHJvYyk6CisgICAgICAgICogYjMvYWlyL0Fp
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6
aXNWYWxpZEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6Z2VuZXJh
dGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206OmdlbmVyYXRlKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyQ3VzdG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBhdGNoQ3Vz
dG9tOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6YWRtaXRzU3RhY2spOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2xkQ0NhbGxDdXN0b206OmZvckVhY2hBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjpmb3JFYWNoQXJnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVDdXN0b206Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZl
Y3RzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjplbWl0U2h1ZmZsZSk6CisgICAgICAgICogYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6U2h1ZmZsZVBhaXIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6c3JjKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6U2h1ZmZsZVBhaXI6OmRzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZm
bGVQYWlyOjp3aWR0aCk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAqIGIzL2Fp
ci9BaXJHZW5lcmF0ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9h
aXIvQWlySW5zZXJ0aW9uU2V0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNl
dDo6aW5zZXJ0SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5z
ZXJ0KToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpJbnN0OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6YXBw
ZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICog
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJN
YWNyb3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL0FpclJlZ2lz
dGVyUHJpb3JpdHkuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRl
cik6CisgICAgICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGhpZGRl
blRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQpOgorICAgICAgICAodXNhZ2UpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aW52b2tl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OnRlc3RTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkQ29uc3Rh
bnRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG9hZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6bG9hZERvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaW1wbGVTd2FwKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNo
dWZmbGVTaW1wbGVTaGlmdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlTG9u
Z1NoaWZ0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVMb25nU2hpZnRCYWNr
d2FyZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjp0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6dGVzdFNodWZmbGVUcmVlU2hpZnRPdGhlckJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6dGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OnRlc3RTaHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRl
c3RTaHVmZmxlU2hpZnRBbmRSb3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVNoaWZ0QWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlQWxsUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlU3dh
cDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRoKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRNZW1vcnlMb25nKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWly
Ojp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Y29tYmluZUhpTG8pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0
TWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1
ZmZsZVJvdGF0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5NjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1l
bW9yeU1peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0
ZU1lbW9yeUFsbFJlZ3M2NCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0
U2h1ZmZsZVN3YXBEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNo
aWZ0RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cnVuKToKKyAgICAgICAgKHJ1bik6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdENhbGxTaW1wbGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxSYXJlKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RDYWxsUmFyZUxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENhbGxTaW1wbGVQdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDEt
MTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtDTWFrZV0gRG8gbm90IHVzZSBMTFZNIHN0YXRpYyBsaWJyYXJpZXMgZm9yIEZUTCBKSVQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTA2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOCArNzMsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWly
QXJnLmNwcAogICAgIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAogICAgIGIzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICBi
My9haXIvQWlyQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyQ3VzdG9tLmNwcAogICAgIGIzL2Fpci9B
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKKyAgICBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCiAg
ICAgYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAKICAgICBiMy9haXIvQWly
R2VuZXJhdGUuY3BwCiAgICAgYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKQEAgLTgyLDYgKzg1LDgg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlySW5zZXJ0aW9uU2V0
LmNwcAogICAgIGIzL2Fpci9BaXJJbnN0LmNwcAogICAgIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAKKyAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAor
ICAgIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAogICAgIGIzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY2
MTgzNDcxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEY5
MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZF
Qzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2
QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00MDAs
NiArNDAxLDIxIEBACiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIx
Njg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhG
N0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhD
RjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3
MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
Q0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZl
bnRpb24uY3BwICovOyB9OworCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYxODMyMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgg
Ki87IH07CisJCTBGNjE4MzJCMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjIxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi87IH07CisJCTBGNjE4MzJDMUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwICovOyB9OworCQkwRjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovOyB9OworCQkwRjYxODMy
RTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI1MUM0NUJGMDcwMDcy
NDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwICovOyB9OworCQkwRjYxODMyRjFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi87IH07CisJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
Y3BwICovOyB9OworCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI4
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjYxODMzMzFD
NDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
LmggKi87IH07CisJCTBGNjE4MzM2MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzM0MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJMEY2
MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlVXRpbHMuaCAqLzsgfTsKKwkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRjYxODMzRDFDNDVGNjJBMDA3MjQ1MEIgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEY2MTgzNDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzNDQxQzQ1RjY2
MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICovOyB9OwogCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3
N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi87IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdC
YXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyB9OwogCQkw
RjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgfTsKQEAgLTIwNzksNiArMjA5NSwxMyBAQAog
LyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSBzZWN0aW9uICovCisJCTBGNjE4MzQ2MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJ
CQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBv
YmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAw
RjYxODMzODFDNDVGNjJBMDA3MjQ1MEI7CisJCQlyZW1vdGVJbmZvID0gdGVzdGFpcjsKKwkJfTsK
IAkJMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9
IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9
IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1NDIs
NiArMjU2NSwyMCBAQAogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAv
KiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MTgzMjAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
Q3VzdG9tLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRW1pdFNodWZmbGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmg7IHBhdGgg
PSBiMy9haXIvQWlyRW1pdFNodWZmbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlckFmdGVyUmVnQWxsb2Mu
Y3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJMb3dlck1hY3Jvcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJN
YWNyb3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2Vu
ZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZUdlbmVy
YXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYxODMzNTFDNDVGM0I2MDA3
MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWlyT3Bjb2RlVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
NDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RhaXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTBGNjE4MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhaXIuY3BwOyBwYXRoID0gYjMv
YWlyL3Rlc3RhaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MDE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdCYXNpY0Jsb2NrLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM3Miw4ICszNDA5LDggQEAKIAkJNzAxM0NBOEEx
QjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSm9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMzU1ODdDMUM0MTg0
MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBNYXBQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTZXRQcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90
b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hcFByb3RvdHlw
ZS5sdXQuaDsgcGF0aCA9IE1hcFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzAzNTU4N0YxQzQxODQ1ODAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5sdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2V0UHJvdG90eXBlLmx1dC5oOyBwYXRo
ID0gU2V0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1
NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcwMzU1ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8q
IEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQzMDYsNiArNDM0MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisJCTBGNjE4MzNCMUM0NUY2MkEwMDcyNDUwQiAvKiBGcmFtZXdvcmtzICovID0gewor
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY2MTgzM0QxQzQ1
RjYyQTAwNzI0NTBCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OwogCQkwRjkzMjc1MTFDMjBCQ0JBMDBDRjY1NjQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTQ0MDMsNiArNDQ0OSw3IEBACiAJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0
IC8qIHRlc3RiMyAqLywKIAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4
cCAqLywKIAkJCQkwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCisJCQkJ
MEY2MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi8sCiAJCQkpOwogCQkJbmFtZSA9
IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3OTMsMTMgKzQ4NDAs
MTggQEAKIAkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
Ki8sCiAJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywK
IAkJCQkwRkIzODc4QjFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAor
CQkJCTBGNjE4MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
ICovLAorCQkJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRp
b24uaCAqLywKIAkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCAqLywKIAkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmggKi8sCiAJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAog
CQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEY2MTgz
MjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi8sCiAJCQkJMEYxMEYxQTIxQzQy
MEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovLAogCQkJCTBGNDU3MDM2MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJMEY0NTcwMzcxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8sCisJCQkJMEY2MTgzMjMxQzQ1
QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCAqLywKKwkJCQkwRjYxODMyNDFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBG
MDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJE
ODVCNTFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8s
CiAJCQkJMEY0QzkxNjcxQzJCM0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAq
LywKQEAgLTQ4MTgsNiArNDg3MCwxMCBAQAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAv
KiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5
OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCiAJCQkJ
MjY4NEQ0MzcxQzAwMTYxQzAwODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMEY2MTgz
MjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCisJCQkJ
MEY2MTgzMjYxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovLAor
CQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8sCisJ
CQkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCiAJCQkJ
MjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovLAogCQkJCTBG
QjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovLAog
CQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAq
LywKQEAgLTQ4NDMsNiArNDg5OSw3IEBACiAJCQkJMEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8q
IEFpclVzZUNvdW50cy5oICovLAogCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJW
YWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggKi8sCisJCQkJMEY2MTgzNDQxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICov
LAogCQkJKTsKIAkJCW5hbWUgPSBhaXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NTMwMCw2ICs1MzU3LDkgQEAKIAkJNjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQg
U291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MEY2MTgzMzIxQzQ1RjM1QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oICovLAorCQkJCTBGNjE4MzM0
MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLywKKwkJCQkwRjYxODMz
NTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCAqLywKIAkJCQk5OTZCNzMxNTFC
REEwNUFBMDAzMzFCODQgLyogQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMx
NjFCREEwNUFBMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCAqLywKIAkJ
CQk5OTZCNzMwNzFCRDlGQTJDMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCAqLywK
QEAgLTY4OTksNiArNjk1OSw3IEBACiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFp
ckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAw
MDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjE4MzMxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjk2MSw2ICs3MDIy
LDcgQEAKIAkJCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMyRjFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTQsNiArNzIxNiw3IEBACiAJCQkJQTc3QTQyNDAxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzcz
MDhEMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2MTgzMkQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNF
eGl0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAv
KiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzND
RDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNTgsNiArNzMy
MSw3IEBACiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyog
REZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzNjFD
NDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM3MzA5MTFDMENENzBDMDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZH
UHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtNzI3NCw2
ICs3MzM4LDcgQEAKIAkJCQkwRkMyMENCQTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEYyOUUwMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0
aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzIwQ0I2
MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjI4LDYgKzc2OTMsNyBAQAogCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGlu
Z0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTgsNiArODA4NCw3
IEBACiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjE4MzMzMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vh
a0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MCw2ICs4MTE3LDIyIEBACiAv
KiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRp
dmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFp
ciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAwRjYxODMzRTFDNDVGNjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RhaXIiICovOworCQkJYnVpbGRQaGFzZXMgPSAo
CisJCQkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgz
M0IxQzQ1RjYyQTAwNzI0NTBCIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxl
cyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3Rh
aXI7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY2
MTgzNDMxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRjkzMjc0RTFDMjBCQ0JBMDBD
RjY1NjQgLyogZHluYmVuY2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQli
dWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi87CkBA
IC04MjU3LDYgKzgzNDAsNyBAQAogCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi8sCiAJCQkJNUQ2QjJBNDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJ
CQkJMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzM4
MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KQEAgLTg0OTMsNiArODU3NywxNCBAQAogLyogRW5kIFBCWFNoZWxs
U2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KKwkJMEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8g
PSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjYxODM0NTFDNDVGNjYwMDA3MjQ1MEIg
LyogdGVzdGFpci5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEY5MzI3NEYxQzIwQkNCQTAwQ0Y2NTY0
IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC04Njk3LDYgKzg3ODksNyBAQAogCQkJCTUy
QjcxN0I1MUEwNTk3RTEwMDdBRjRGMyAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQkFERjU0MUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3Bh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMzAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckxvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTExMTI0NTE5MkZD
RTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTYyRTNENUYwMUI4RDBCNzMwMEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODc0NSw2ICs4ODM4LDcgQEAKIAkJCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyog
REZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyOTFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRkZDOTU5MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzMzhFMTIxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9k
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg3NjEsNiArODg1NSw3IEBACiAJCQkJQTc4QTk3
NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJDMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJF
bWl0U2h1ZmZsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5
Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05MDcyLDYgKzkxNjcsNyBAQAogCQkJCUUzM0Y1MDg0MUI4NDM3QTAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0
MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTAzRkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjE4MzJFMUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMUQx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxNCw2ICs5MzEwLDcgQEAKIAkJCQkw
RjlENEMwQzFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkIxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNjYsNiArOTQ2MywxMSBAQAogLyog
RW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0
RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhU
YXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJ
CXRhcmdldCA9IDBGNjE4MzM4MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovOworCQkJdGFy
Z2V0UHJveHkgPSAwRjYxODM0NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovOworCQl9OwogCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVw
ZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQg
PSAwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CkBAIC05NDc3LDYgKzk1
NzksNDIgQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0Yx
QzQ1RjYyQTAwNzI0NTBCIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMw
MEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJQ09ERV9TSUdOX0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50
cy5wbGlzdDsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBE
ZWJ1ZzsKKwkJfTsKKwkJMEY2MTgzNDAxQzQ1RjYyQTAwNzI0NTBCIC8qIFJlbGVhc2UgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVm
ZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29u
ZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRT
X2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRl
c3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGNjE4MzQxMUM0NUY2
MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRz
LnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFBy
b2ZpbGluZzsKKwkJfTsKKwkJMEY2MTgzNDIxQzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24g
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxl
LnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRM
RU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFN
RSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGOTMy
NzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC05OTA2LDYgKzEw
MDQ0LDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjYxODMzRTFDNDVG
NjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RhaXIiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEY2MTgzM0YxQzQ1RjYyQTAwNzI0NTBCIC8qIERl
YnVnICovLAorCQkJCTBGNjE4MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovLAorCQkJ
CTBGNjE4MzQxMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY2MTgzNDIx
QzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKKwkJfTsKIAkJMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi8gPSB7CiAJCQlp
c2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUgYm9vbCBp
c1g4Nl82NCgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lmIFBMQVRG
T1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKIGlubGluZSBib29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKCkKIHsK
ICAgICByZXR1cm4gaXNBUk12N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VBcmNoaXRl
Y3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkz
MihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNp
b24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1NSw2ICs2NTUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhp
cyk7CiAgICAgfQogCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNy
YywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NDMxLDYgKzE0MzEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0
ZU9wKE9QX1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0o
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAg
ICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9Q
X1hDSEdfRXZHdiwgc3JjLCBkc3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0
ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJl
dmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVl
KCk7CiAKLSAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0
czo6Zm9yQ2FsbCgpIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
QEAgLTQ3LDcgKzQ3LDYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CiAgICAgQ0NhbGxWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBD
aGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCi0gICAgICAg
ICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChudW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1
MiwxMiBAQCBDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9i
eXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6
Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYp
CisgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsMTEgQEAgY2xh
c3MgQ29tcGlsYXRpb24gewogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGls
YXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworCisgICAgLy8g
VGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0ZSBhIENvbXBpbGF0
aW9uLiBJdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAorICAgIC8vIGNvZGUuIFByb2Jh
Ymx5IGJlc3QgdG8ga2VlcCBpdCB0aGF0IHdheS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXBy
b2R1Y3RzPik7CisgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJl
Zi5jb2RlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFp
clN0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNp
bmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgogI2lu
Y2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgpAQCAtOTksNiArMTAwLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxv
Y2tzIGFyZSBub3QgcmFyZS4KKyAgICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVy
ZVswXSk7CisgICAgICAgIHdoaWxlIChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3Jr
bGlzdC5wb3AoKSkgeworICAgICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzb3IuaXNSYXJlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2go
c3VjY2Vzc29yLmJsb2NrKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAg
bV9wcm9jZWR1cmUucmVzZXRWYWx1ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZl
cmVuY2UoKS4KIAogICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFs
IGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwOCw2
ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAg
ICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1f
ZmFzdFdvcmtsaXN0LnNhdyhibG9jayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwog
ICAgICAgICAgICAgCkBAIC0xNTUyLDM3ICsxNTY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGludmVydGVkKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAg
ICBBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNp
Z25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXggPSBhcmd1bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudElu
ZGV4IDwgQmFua0luZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAg
IFRtcCByZXN1bHQgPSBUbXAoQmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudElu
ZGV4KSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBl
KCkpLCBpbW1PclRtcChjaGlsZCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0KLSNpZiBDUFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAg
Ly8gaU9TIGRvZXMgbm90IGZvbGxvdyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBj
YWxscy4KLSAgICAgICAgLy8gQXJndW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNp
Z25lZCBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNr
T2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7
Ci0jZWxzZQotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5k
aWYKLSAgICAgICAgQXJnIHJlc3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAg
ICAgIHN0YWNrT2Zmc2V0ICs9IHNsb3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRo
ZSBjb2RlIGZvciBzdG9yaW5nIHRoZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhp
cyBzaWduaWZpY2FudGx5IGVhc2VzIHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lz
dGVyIGFsbG9jYXRvci4gSWYgd2UgY291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZh
ciBhcwotICAgICAgICAvLyBwb3NzaWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNl
IHRvIGhvaXN0IHN0b3JlcyBhcyBoaWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIg
cHJlc3N1cmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTEwNjMKLSAgICAgICAgbV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3Jl
KGNoaWxkLCByZXN1bHQpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9w
Y29kZSgpKSB7CkBAIC0xOTM0LDE0ICsxOTE1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQ0NhbGw6IHsKKyAgICAgICAgY2FzZSBC
Mzo6Q0NhbGw6IHsKICAgICAgICAgICAgIENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8
Q0NhbGxWYWx1ZT4oKTsKLSAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6
c3BlY2lhbChtX2NvZGUuY0NhbGxTcGVjaWFsKCkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIGJpdCB3ZWlyZCAtIHdlIGhhdmUgYSBzdXBlciBpbnRlbnNlIGNvbnRyYWN0IHdpdGggQXJn
OjpDQ2FsbFNwZWNpYWwuIEl0IG1pZ2h0Ci0gICAgICAgICAgICAvLyBiZSBiZXR0ZXIgaWYgd2Ug
ZmFjdG9yZWQgQWlyOjpDQ2FsbFNwZWNpYWwgb3V0IG9mIHRoZSBBaXIgbmFtZXNwYWNlIGFuZCBt
YWRlIGl0IGEgQjMKLSAgICAgICAgICAgIC8vIHRoaW5nLgotICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNDUKKyAgICAgICAg
ICAgIEluc3QgaW5zdChtX2lzUmFyZSA/IEFpcjo6Q29sZENDYWxsIDogQWlyOjpDQ2FsbCwgY0Nh
bGwpOwogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdG9uIG9mIGZsZXhpYmlsaXR5IHJlZ2Fy
ZGluZyB0aGUgY2FsbGVlIGFyZ3VtZW50LCBidXQgY3VycmVudGx5LCB3ZSBkb24ndAogICAgICAg
ICAgICAgLy8gdXNlIGl0IHlldC4gSXQgZ2V0cyB3ZWlyZCBmb3IgcmVhc29uczoKQEAgLTE5NTQs
NDggKzE5MzAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDUyCiAgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKHRtcChjQ2FsbC0+Y2hpbGQoMCkpKTsKIAotICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byB0ZWxsIEFpciB3aGF0IHJlZ2lzdGVycyB0aGlzIGRlZmluZXMuCi0gICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAg
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOwot
Ci0gICAgICAgICAgICAvLyBOb3cgbWFyc2hhbGwgdGhlIGFyZ3VtZW50cy4gVGhpcyBpcyB3aGVy
ZSB3ZSBpbXBsZW1lbnQgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBBZnRlcgotICAgICAgICAg
ICAgLy8gdGhpcywgQWlyIGRvZXMgbm90IGtub3cgd2hhdCB0aGUgY29udmVudGlvbiBpczsgaXQg
anVzdCB0YWtlcyBvdXIgd29yZCBmb3IgaXQuCi0gICAgICAgICAgICB1bnNpZ25lZCBncEFyZ3Vt
ZW50Q291bnQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgZnBBcmd1bWVudENvdW50ID0gMDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgVmFsdWUqIGFyZ0NoaWxkID0gY0NhbGwtPmNoaWxkKGkpOwotICAgICAgICAgICAg
ICAgIEFyZyBhcmc7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChB
cmc6OnR5cGVGb3JCM1R5cGUoYXJnQ2hpbGQtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6R1A6Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hcnNoYWxsQ0NhbGxBcmd1
bWVudDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBhcmdDaGlsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNDYWxsLT50eXBlKCkg
IT0gVm9pZCkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChjQ2FsbCkpOwog
Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkZQOgotICAgICAgICAgICAgICAgICAgICBhcmcg
PSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09m
ZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY0NhbGwtPm51bUNo
aWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1w
KGNDYWxsLT5jaGlsZChpKSkpOwogCi0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKQot
ICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEZNb3Zl
KGluc3QpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjQ2FsbC0+dHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEludDMyOgotICAgICAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgICAgICBhcHBlbmQo
TW92ZSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgdG1wKGNDYWxsKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsb2F0OgotICAgICAgICAgICAgY2Fz
ZSBEb3VibGU6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIFRtcChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUiksIHRtcChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIyODcs
MTEgKzIyMjgsMTMgQEAgcHJpdmF0ZToKIAogICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKICAg
ICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOworICAgIEJsb2NrV29ya2xpc3QgbV9mYXN0V29y
a2xpc3Q7CiAKICAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBtX2luc3RzOwogICAgIFZlY3Rv
cjxJbnN0PiBtX3Byb2xvZ3VlOwogCiAgICAgQjM6OkJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAg
Ym9vbCBtX2lzUmFyZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0
cy5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBPcGFxdWVC
eXByb2R1Y3RzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBP
cGFxdWVCeXByb2R1Y3RzKCk7Ci0gICAgfk9wYXF1ZUJ5cHJvZHVjdHMoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+T3BhcXVlQnlwcm9kdWN0cygpOwogCiAgICAgc2l6ZV90IGNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9ieXByb2R1Y3RzLnNpemUoKTsgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTUw
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDAsMjEgKzIwMCwxNCBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6
aXNBcmdWYWxpZEZvclZhbHVlCiAgICAgY2FzZSBBcmc6OlRtcDoKICAgICBjYXNlIEFyZzo6SW1t
OgogICAgIGNhc2UgQXJnOjpJbW02NDoKLSAgICBjYXNlIEFyZzo6U3RhY2s6Ci0gICAgY2FzZSBB
cmc6OkNhbGxBcmc6Ci0gICAgICAgIGJyZWFrOyAvLyBPSwotICAgIGNhc2UgQXJnOjpBZGRyOgot
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
Ci0gICAgICAgICAgICAmJiBhcmcuYmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghYXJn
LmlzU3RhY2tNZW1vcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIAotICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBl
KHZhbHVlLT50eXBlKCkpOwogCi0gICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CisgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6
aXNBcmdWYWxpZEZvclJlcChBaXI6OkNvZGUmIGNvZGUsIGNvbnN0IEFpcjo6QXJnJiBhcmcsIGNv
bnN0IFZhbHVlUmVwJiByZXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3NzUsNiArNzc3NSw2NSBAQCB2b2lkIHRlc3RDYWxsU2ltcGxl
KGludCBhLCBpbnQgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikg
PT0gYSArIGIpOwogfQogCit2b2lkIHRlc3RDYWxsUmFyZShpbnQgYSwgaW50IGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBjb21tb24gPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogcmFyZSA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhyYXJlLCBGcmVxdWVuY3lDbGFzczo6
UmFyZSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhjb21tb24pKTsKKworICAgIGNvbW1vbi0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
IGNvbW1vbi0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAg
ICAKKyAgICByYXJlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNp
bXBsZUZ1bmN0aW9uKSksCisgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAg
ICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMikpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
LCB0cnVlLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdENhbGxSYXJlTGl2ZShpbnQg
YSwgaW50IGIsIGludCBjKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29tbW9uID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHJhcmUgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICBGcmVxdWVudGVkQmxv
Y2socmFyZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2so
Y29tbW9uKSk7CisKKyAgICBjb21tb24tPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb21tb24tPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CisgICAgCisgICAgcmFyZS0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJhcmUtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rp
b24pKSwKKyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAg
cmFyZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJh
cmUtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIzKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0
cnVlLCBhLCBiLCBjKSA9PSBhICsgYiArIGMpOworfQorCiB2b2lkIHRlc3RDYWxsU2ltcGxlUHVy
ZShpbnQgYSwgaW50IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMDA2OSw2ICsxMDEy
OCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEludDMyVG9E
b3VibGVQYXJ0aWFsUmVnaXN0ZXJXaXRob3V0U3RhbGwoKSk7CiAKICAgICBSVU4odGVzdENhbGxT
aW1wbGUoMSwgMikpOworICAgIFJVTih0ZXN0Q2FsbFJhcmUoMSwgMikpOworICAgIFJVTih0ZXN0
Q2FsbFJhcmVMaXZlKDEsIDIsIDMpKTsKICAgICBSVU4odGVzdENhbGxTaW1wbGVQdXJlKDEsIDIp
KTsKICAgICBSVU4odGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cygpKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk1MDY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkZQUklu
Zm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAKICNpZiBDT01QSUxFUihHQ0MpICYmIEFTU0VS
VF9ESVNBQkxFRAogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCkBAIC0zOCw2ICs0MSwyMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jv
b2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgIGNhc2UgQWRkcjoKKyAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6OlRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHx8IGJhc2UoKSA9PSBBaXI6OlRtcChN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNhc2UgU3RhY2s6Cisg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFyZzo6aXNSZXByZXNlbnRhYmxl
QXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKIHsKICAgICBzd2l0
Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTY3LDYgKzg0LDMxIEBAIGJvb2wgQXJnOjppc1JlcHJlc2Vu
dGFibGVBcyhXaWR0aCB3aWR0aCwKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorYm9v
bCBBcmc6OnVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdAoreworICAgIGJvb2wgdXNlcyA9IGZh
bHNlOworICAgIGNvbnN0X2Nhc3Q8QXJnKj4odGhpcyktPmZvckVhY2hUbXBGYXN0KAorICAgICAg
ICBbJl0gKEFpcjo6VG1wIG90aGVyVG1wKSB7CisgICAgICAgICAgICBpZiAob3RoZXJUbXAgPT0g
dG1wKQorICAgICAgICAgICAgICAgIHVzZXMgPSB0cnVlOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gdXNlczsKK30KKworYm9vbCBBcmc6OmNhblJlcHJlc2VudChWYWx1ZSogdmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzVHlwZSh0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKK30K
KworYm9vbCBBcmc6OmlzQ29tcGF0aWJsZVR5cGUoY29uc3QgQXJnJiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoaGFzVHlwZSgpKQorICAgICAgICByZXR1cm4gb3RoZXIuaXNUeXBlKHR5cGUoKSk7
CisgICAgaWYgKG90aGVyLmhhc1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGlzVHlwZShvdGhlci50
eXBlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xMTcsNiArMTU5LDkg
QEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIFNwZWNp
YWw6CiAgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgV2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCh3aWR0aCgpKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xNjcsNiArMjEyLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFyZwogICAgIGNhc2UgQXJnOjpTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQoIlNwZWNp
YWwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpXaWR0aEFyZzoKKyAgICAgICAg
b3V0LnByaW50KCJXaWR0aEFyZyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzMSwxNiArMjc5LDE2IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKIHsKICAgICBzd2l0Y2ggKHdpZHRoKSB7
CiAgICAgY2FzZSBBcmc6OldpZHRoODoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDgiKTsKKyAg
ICAgICAgb3V0LnByaW50KCI4Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lk
dGgxNjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDE2Iik7CisgICAgICAgIG91dC5wcmludCgi
MTYiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDMyOgotICAgICAgICBv
dXQucHJpbnQoIldpZHRoMzIiKTsKKyAgICAgICAgb3V0LnByaW50KCIzMiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg2
NCIpOworICAgICAgICBvdXQucHJpbnQoIjY0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk1MDY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTEgQEAKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdy
ZXR1cm4tdHlwZSIKICNlbmRpZiAvLyBDT01QSUxFUihHQ0MpICYmIEFTU0VSVF9ESVNBQkxFRAog
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
ewogCiBjbGFzcyBTcGVjaWFsOwogY2xhc3MgU3RhY2tTbG90OwpAQCAtNzQsNyArNzgsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFJlbENvbmQsCiAgICAgICAgIFJlc0NvbmQsCiAgICAgICAgIERvdWJs
ZUNvbmQsCi0gICAgICAgIFNwZWNpYWwKKyAgICAgICAgU3BlY2lhbCwKKyAgICAgICAgV2lkdGhB
cmcKICAgICB9OwogCiAgICAgZW51bSBSb2xlIDogaW50OF90IHsKQEAgLTE2MSw2ICsxNjYsMTMg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaFR5
cGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoR1ApOwor
ICAgICAgICBmdW5jdG9yKEZQKTsKKyAgICB9CisKICAgICBlbnVtIFdpZHRoIDogaW50OF90IHsK
ICAgICAgICAgV2lkdGg4LAogICAgICAgICBXaWR0aDE2LApAQCAtMjI3LDYgKzIzOSwyNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpc0FueVVzZShyb2xlKSAmJiAhaXNDb2xkVXNlKHJvbGUp
OwogICAgIH0KIAorICAgIHN0YXRpYyBSb2xlIGNvb2xlZChSb2xlIHJvbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNl
IExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVm
OgorICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVz
ZUFkZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAg
ICAgICAgICAgIHJldHVybiByb2xlOworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJl
dHVybiBDb2xkVXNlOworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgICAgICByZXR1cm4g
TGF0ZUNvbGRVc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcgYmVmb3JlIGRv
aW5nIGFueXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNFYXJseVVzZShSb2xlIHJvbGUp
CiAgICAgewpAQCAtNDQ5LDYgKzQ4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCisgICAgc3RhdGljIEFyZyBpbW1QdHIoY29uc3Qgdm9pZCogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHJldHVybiBpbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGFkZHJl
c3MpKTsKKyAgICB9CisKICAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJf
dCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKQEAgLTU2
Myw2ICs2MDAsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHN0YXRpYyBBcmcgd2lkdGhBcmcoV2lkdGggd2lkdGgpCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gV2lkdGhBcmc7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IHdpZHRoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CkBAIC01OTksNiArNjQ0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKICAgICB9CiAKKyAgICBib29s
IGlzU29tZUltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0lt
bTY0KCk7CisgICAgfQorCiAgICAgYm9vbCBpc0FkZHIoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBBZGRyOwpAQCAtNjE5LDYgKzY2OSwyMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CiAgICAgfQogCisgICAgYm9vbCBpc01lbW9yeSgp
IGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFk
ZHI6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBp
c1N0YWNrTWVtb3J5KCkgY29uc3Q7CisKICAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CkBAIC02NTEsNiArNzE2LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOwogICAgIH0KIAorICAg
IGJvb2wgaXNXaWR0aEFyZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFdpZHRoQXJnOworICAgIH0KKwogICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CkBAIC02OTQsMTggKzc2NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYmFzZTsKICAgICB9CiAKLSAgICBib29sIGhhc09mZnNl
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgICAgICBjYXNl
IEFkZHI6Ci0gICAgICAgIGNhc2UgU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2FsbEFyZzoKLSAgICAg
ICAgY2FzZSBJbmRleDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQorICAgIGJvb2wg
aGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNNZW1vcnkoKTsgfQogICAgIAogICAgIGludDMy
X3Qgb2Zmc2V0KCkgY29uc3QKICAgICB7CkBAIC03NDQsNiArODAzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CiAgICAg
fQogCisgICAgV2lkdGggd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBXaWR0aEFyZyk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaWR0aD4obV9vZmZz
ZXQpOworICAgIH0KKwogICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CkBAIC03NjgsNiArODMzLDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVG1wOgogICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAo
KTsKQEAgLTc4Niw2ICs4NTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAg
ICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNh
c2UgV2lkdGhBcmc6CiAgICAgICAgIGNhc2UgSW52YWxpZDoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY2FzZSBBZGRyOgpAQCAtODI5LDYgKzg5NiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAgIGJvb2wgY2FuUmVwcmVz
ZW50KFZhbHVlKiB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGlzQ29tcGF0aWJsZVR5cGUoY29u
c3QgQXJnJiBvdGhlcikgY29uc3Q7CisKICAgICBib29sIGlzR1BSKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CkBAIC05NzAsNiArMTA0MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNv
bmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtOTkyLDYgKzEwNjQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBib29sIHVzZXNUbXAoQWlyOjpUbXAgdG1wKSBjb25zdDsKKwogICAgIC8vIFRoaXMgaXMgc21h
cnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYg
cnVsZSB3aWxsIHVzZSBpdHMKICAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4
YW1wbGUsIHRoaXM6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTUgKzc4
LDE3IEBAIHB1YmxpYzoKICAgICBJbnN0TGlzdCYgaW5zdHMoKSB7IHJldHVybiBtX2luc3RzOyB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgotICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKKyAgICBJbnN0JiBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQogICAgIHsKICAgICAg
ICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICAgICAgcmV0
dXJuIG1faW5zdHMubGFzdCgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
SW5zdCYgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIG1f
aW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OworICAgICAgICByZXR1cm4gbV9pbnN0cy5sYXN0KCk7CiAgICAgfQogCiAgICAgLy8gVGhlICIw
IiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhl
biIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50SW1w
bCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0LCBWYWx1ZSog
Y2hpbGQpCit7CisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IGFyZ3VtZW50Q291bnQrKzsK
KyAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzKQorICAgICAgICByZXR1cm4gVG1wKEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJn
dW1lbnRJbmRleCkpOworCisgICAgdW5zaWduZWQgc2xvdFNpemU7CisgICAgaWYgKGlzQVJNNjQo
KSAmJiBpc0lPUygpKSB7CisgICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgcGFja2VkLgorICAgICAg
ICBzbG90U2l6ZSA9IHNpemVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbGlnbmVkLgorICAgICAgICBzbG90U2l6ZSA9IDg7Cisg
ICAgfQorCisgICAgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdFNp
emUsIHN0YWNrT2Zmc2V0KTsKKyAgICBBcmcgcmVzdWx0ID0gQXJnOjpjYWxsQXJnKHN0YWNrT2Zm
c2V0KTsKKyAgICBzdGFja09mZnNldCArPSBzbG90U2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KAorICAgIHVuc2lnbmVkJiBncEFyZ3VtZW50
Q291bnQsIHVuc2lnbmVkJiBmcEFyZ3VtZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwg
VmFsdWUqIGNoaWxkKQoreworICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50
eXBlKCkpKSB7CisgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2Fs
bEFyZ3VtZW50SW1wbDxHUFJJbmZvPihncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGls
ZCk7CisgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICByZXR1cm4gbWFyc2hhbGxDQ2FsbEFyZ3Vt
ZW50SW1wbDxGUFJJbmZvPihmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCBjaGlsZCk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFyZygp
OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVmVjdG9yPEFyZz4gY29tcHV0ZUND
YWxsaW5nQ29udmVudGlvbihDb2RlJiBjb2RlLCBDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBW
ZWN0b3I8QXJnPiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChUbXAoQ0NhbGxTcGVjaWFsOjpz
Y3JhdGNoUmVnaXN0ZXIpKTsKKyAgICB1bnNpZ25lZCBncEFyZ3VtZW50Q291bnQgPSAwOworICAg
IHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsg
KytpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBtYXJzaGFsbENDYWxs
QXJndW1lbnQoZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB2
YWx1ZS0+Y2hpbGQoaSkpKTsKKyAgICB9CisgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zm
c2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVG1wIGNDYWxsUmVzdWx0KFR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIHJldHVy
biBUbXAoKTsKKyAgICBjYXNlIEludDMyOgorICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVy
biBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGNhc2UgRmxvYXQ6CisgICAgY2Fz
ZSBEb3VibGU6CisgICAgICAgIHJldHVybiBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRt
cCgpOworfQorCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYgY29kZSwgVmFsdWUqIG9yaWdpbiwgY29u
c3QgVmVjdG9yPEFyZz4mIGFyZ3VtZW50cykKK3sKKyAgICBJbnN0IGluc3QoUGF0Y2gsIG9yaWdp
biwgQXJnOjpzcGVjaWFsKGNvZGUuY0NhbGxTcGVjaWFsKCkpKTsKKyAgICBpbnN0LmFyZ3MuYXBw
ZW5kKGFyZ3VtZW50c1swXSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpKTsKKyAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQXJnIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgaWYgKGFyZy5p
c1RtcCgpKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgIH0KKyAgICBy
ZXR1cm4gaW5zdDsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKyNkZWZpbmUg
QWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQ0NhbGxWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
K1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYsIENDYWxsVmFsdWUq
KTsKKworVG1wIGNDYWxsUmVzdWx0KFR5cGUpOworCitJbnN0IGJ1aWxkQ0NhbGwoQ29kZSYsIFZh
bHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJD
Q2FsbGluZ0NvbnZlbnRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsMTIgKzYwLDEzIEBAIHB1YmxpYzoKIAogICAg
IFByb2NlZHVyZSYgcHJvYygpIHsgcmV0dXJuIG1fcHJvYzsgfQogCi0gICAgQmFzaWNCbG9jayog
YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJh
c2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKIAogICAgIC8vIE5vdGUg
dGhhdCB5b3UgY2FuIHJlbHkgb24gc3RhY2sgc2xvdHMgYWx3YXlzIGdldHRpbmcgaW5kaWNlcyB0
aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgaW5kZXgKICAgICAvLyBvZiBhbnkgcHJpb3Igc3RhY2sg
c2xvdC4gSW4gZmFjdCwgYWxsIHN0YWNrIHNsb3RzIHlvdSBjcmVhdGUgaW4gdGhlIGZ1dHVyZSB3
aWxsIGhhdmUgYW4gaW5kZXgKICAgICAvLyB0aGF0IGlzID49IHN0YWNrU2xvdHMoKS5zaXplKCku
Ci0gICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xv
dEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KAorICAgICAgICB1bnNpZ25lZCBieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CiAgICAgU3RhY2tTbG90KiBh
ZGRTdGFja1Nsb3QoU3RhY2tTbG90VmFsdWUqKTsKIAogICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwo
c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckN1c3RvbS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworYm9v
bCBDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBDQ2FsbFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9ICh2
YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGFyZ3VtZW50cyBjYW4gb25seSByZWZl
ciB0byB0aGUgc3RhY2ssIHRtcHMsIG9yIGltbWVkaWF0ZXMuCisgICAgZm9yIChBcmcmIGFyZyA6
IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFhcmcuaXNTdGFja01l
bW9yeSgpICYmICFhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKworICAgIGlmICghaW5zdC5hcmdzWzBd
LmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBy
ZXN1bHQgdGhlbiBpdCBjYW5ub3QgYmUgYW4gaW1tZWRpYXRlLgorICAgIGlmICh2YWx1ZS0+dHlw
ZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVw
cmVzZW50KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2Zmc2V0
Kys7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7
IGktLSA+IDE7KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAg
ICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tvZmZzZXQgKyBpXTsKKyAgICAgICAgaWYgKCFhcmcu
Y2FuUmVwcmVzZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsQ3VzdG9tOjpn
ZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCit7
CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3QsICJcbiIpOwor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6
Okp1bXAoKTsKK30KKworYm9vbCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0
KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICUgMykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQSBkZXN0aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4gVGhpcyByZXF1
aXJlbWVudCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvcgorICAgIC8v
IG9mIGhhdmluZyBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0IG11bHRpcGxl
IGlucHV0cyBzaW11bHRhbmVvdXNseS4gSXQgYWxzbworICAgIC8vIGltcG9zZXMgc29tZSBpbnRl
cmVzdGluZyBjb25zdHJhaW50cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZsZS4gSWYgd2Ug
dHJlYXQgYSBzaHVmZmxlIHBhaXIKKyAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUgQXJncyBhcyBu
b2RlcywgdGhlbiB0aGUgc2luZ2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1lYW5zIHRoYXQg
dGhlCisgICAgLy8gc2h1ZmZsZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMgb2Ygc3ViZ3Jh
cGhzOgorICAgIC8vCisgICAgLy8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0aGVzZSBzaGlm
dHMuIFRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQorICAgIC8vICAg
aW5zdHJ1Y3Rpb25zIGFuZCBkb24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCByZWdpc3RlcnMu
CisgICAgLy8KKyAgICAvLyAtIENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29uc2lzdCBvZiBu
b2RlcyB0aGF0IGhhdmUgb25lIHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29yLCBzbworICAg
IC8vICAgdGhlcmUgaXMgbm8gd2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJvbSBvdXRzaWRl
IG9mIGl0LiBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKKyAgICAvLyAgIG9yIGJ5
IHNhdmluZyBvbmUgb2YgdGhlIEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCBleGVjdXRp
bmcgaXQgYXMgYSBzaGlmdC4KKyAgICBIYXNoU2V0PEFyZz4gZHN0czsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnIGFy
ZyA9IGluc3QuYXJnc1tpXTsKKyAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAzOworCisgICAg
ICAgIGlmIChtb2RlID09IDIpIHsKKyAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdpZHRoLgorICAg
ICAgICAgICAgaWYgKCFhcmcuaXNXaWR0aEFyZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IHNvdXJjZSBjYW4gYmUgYW4gaW1tZWRpYXRlLgorICAgICAgICBpZiAoIW1vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChhcmcuaXNTb21lSW1tKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGlmICghYXJnLmlzQ29tcGF0aWJsZVR5cGUoaW5zdC5hcmdzW2kgKyAxXSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gMSk7CisgICAgICAgICAgICBpZiAoIWRzdHMuYWRkKGFyZyku
aXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYXJnLmlzVG1wKCkgfHwgYXJnLmlzTWVtb3J5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gTm8gZGVz
dGluYXRpb24gcmVnaXN0ZXIgbWF5IGFwcGVhciBpbiBhbnkgYWRkcmVzcyBleHByZXNzaW9ucy4g
VGhlIGxvd2VyaW5nIGNhbid0IGhhbmRsZSBpdAorICAgIC8vIGFuZCBpdCdzIG5vdCB1c2VmdWwg
Zm9yIHRoZSB3YXkgd2UgZW5kIHVwIHVzaW5nIFNodWZmbGVzLiBOb3JtYWxseSwgU2h1ZmZsZXMg
b25seSB1c2VkIGZvcgorICAgIC8vIHN0YWNrIGFkZHJlc3NlcyBhbmQgbm9uLXN0YWNrIHJlZ2lz
dGVycy4KKyAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgIGlmICghYXJn
LmlzTWVtb3J5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBvayA9IHRy
dWU7CisgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRt
cCkgeworICAgICAgICAgICAgICAgIGlmIChkc3RzLmNvbnRhaW5zKHRtcCkpCisgICAgICAgICAg
ICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQ0NhbGxIZWxwZXJzOjpKdW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3Qs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBkYXRhTG9nKCJGQVRB
TDogVW5sb3dlcmVkIHNodWZmbGU6ICIsIGluc3QsICJcbiIpOworICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCShyZXZpc2lv
biAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBaXJJbnN0LmgiCiAj
aW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCkBAIC01MSw2ICs1Miw4IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIC8vIHlvdSBuZWVkIHRv
IGNhcnJ5IGV4dHJhIHN0YXRlIGFyb3VuZCB3aXRoIHRoZSBpbnN0cnVjdGlvbi4gQWxzbywgU3Bl
Y2lhbHMgbWVhbiB0aGF0IHlvdQogLy8gYWx3YXlzIGhhdmUgYWNjZXNzIHRvIENvZGUmIGV2ZW4g
aW4gbWV0aG9kcyB0aGF0IGRvbid0IHRha2UgYSBHZW5lcmF0aW9uQ29udGV4dC4KIAorLy8gRGVm
aW5pdGlvbiBvZiBQYXRjaCBpbnN0cnVjdGlvbi4gUGF0Y2ggaXMgdXNlZCB0byBkZWxlZ2F0ZSB0
aGUgYmVoYXZpb3Igb2YgdGhlIGluc3RydWN0aW9uIHRvIHRoZQorLy8gU3BlY2lhbCBvYmplY3Qs
IHdoaWNoIHdpbGwgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBpbnN0cnVjdGlvbi4KIHN0
cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CkBAIC05Niw2ICs5OSwxMTQgQEAgc3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB9CiB9OwogCisv
LyBEZWZpbml0aW9uIG9mIENDYWxsIGluc3RydWN0aW9uLiBDQ2FsbCBpcyB1c2VkIGZvciBob3Qg
cGF0aCBDIGZ1bmN0aW9uIGNhbGxzLiBJdCdzIGxvd2VyZWQgdG8gYQorLy8gUGF0Y2ggd2l0aCBh
biBBaXIgQ0NhbGxTcGVjaWFsIGFsb25nIHdpdGggY29kZSB0byBtYXJzaGFsIGluc3RydWN0aW9u
cy4gVGhlIGxvd2VyaW5nIGhhcHBlbnMKKy8vIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBz
byB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3Igc2VlcyB0aGUgY2xvYmJlcnMuCitzdHJ1Y3Qg
Q0NhbGxDdXN0b20geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGlj
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6
OlVzZSwgQXJnOjpHUCwgQXJnOjpwb2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQorICAgICAgICAK
KyAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICAgICAgZnVuY3Rv
cigKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAorICAgICAg
ICAgICAgICAgIEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAg
ICAgICBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytp
KSB7CisgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAg
ICAgICBmdW5jdG9yKAorICAgICAgICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpV
c2UsCisgICAgICAgICAgICAgICAgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAor
ICAgICAgICAgICAgICAgIEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHN0YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJ
bnN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNO
b25BcmdOb25Db250cm9sRWZmZWN0cyhJbnN0JikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFRoaXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBj
YWxscyB0byBiZSBsb3dlcmVkIGJlZm9yZSBnZW5lcmF0aW9uLgorICAgIHN0YXRpYyBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7Cit9OworCitzdHJ1Y3QgQ29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBqdXN0IGxpa2UgYSBjYWxsLCBidXQgdXNlcyBiZWNvbWUgY29sZC4KKyAgICAgICAgQ0Nh
bGxDdXN0b206OmZvckVhY2hBcmcoCisgICAgICAgICAgICBpbnN0LAorICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0
eXBlLCB3aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU2h1ZmZs
ZUN1c3RvbSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9p
ZCBmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKKyAgICAgICAgICAg
IEFyZyYgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICAgICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSAr
IDJdOworICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Cisg
ICAgICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOworICAgICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBl
LCB3aWR0aCk7CisgICAgICAgICAgICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRo
KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6
OldpZHRoOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzVmFsaWRGb3JtKEluc3QmKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMo
SW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGlj
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKK307CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9
IGZhbHNlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorVG1wIGZpbmRQb3NzaWJsZVNj
cmF0Y2goQXJnOjpUeXBlIHR5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsKKyAgICBmb3Ig
KFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgIFRtcCB0bXAo
cmVnKTsKKyAgICAgICAgaWYgKGZ1bmN0b3IodG1wKSkKKyAgICAgICAgICAgIHJldHVybiB0bXA7
CisgICAgfQorICAgIHJldHVybiBUbXAoKTsKK30KKworVG1wIGZpbmRQb3NzaWJsZVNjcmF0Y2go
QXJnOjpUeXBlIHR5cGUsIGNvbnN0IEFyZyYgYXJnMSwgY29uc3QgQXJnJiBhcmcyKSB7CisgICAg
cmV0dXJuIGZpbmRQb3NzaWJsZVNjcmF0Y2goCisgICAgICAgIHR5cGUsCisgICAgICAgIFsmXSAo
VG1wIHRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gIWFyZzEudXNlc1RtcCh0bXAp
ICYmICFhcmcyLnVzZXNUbXAodG1wKTsKKyAgICAgICAgfSk7Cit9CisKKy8vIEV4YW1wbGU6IChh
ID0+IGIsIGIgPT4gYSwgYSA9PiBjLCBiID0+IGQpCitzdHJ1Y3QgUm90YXRlIHsKKyAgICBWZWN0
b3I8U2h1ZmZsZVBhaXI+IGxvb3A7IC8vIGluIHRoZSBleGFtcGxlLCB0aGlzIGlzIHRoZSBsb29w
OiAoYSA9PiBiLCBiID0+IGEpCisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBmcmluZ2U7IC8vIGlu
IHRoZSBleGFtcGxlLCB0aGVzZSBhcmUgdGhlIGFzc29jaWF0ZWQgc2hpZnRzOiAoYSA9PiBjLCBi
ID0+IGQpCit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBTaHVmZmxlUGFp
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCh3aWR0aCgp
LCAiOiIsIHNyYygpLCAiPT4iLCBkc3QoKSk7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZs
ZSgKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzLCBzdGQ6OmFycmF5PEFyZywgMj4gc2Ny
YXRjaGVzLCBBcmc6OlR5cGUgdHlwZSwgVmFsdWUqIG9yaWdpbikKK3sKKyAgICBwYWlycy5yZW1v
dmVBbGxNYXRjaGluZygKKyAgICAgICAgWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpcikgLT4g
Ym9vbCB7CisgICAgICAgICAgICByZXR1cm4gcGFpci5zcmMoKSA9PSBwYWlyLmRzdCgpOworICAg
ICAgICB9KTsKKyAgICAKKyAgICAvLyBGaXJzdCB2YWxpZGF0ZSB0aGF0IHRoaXMgaXMgdGhlIGtp
bmQgb2Ygc2h1ZmZsZSB0aGF0IHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aC4KKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7Cisg
ICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VSVChw
YWlyLmRzdCgpLmlzVHlwZSh0eXBlKSk7CisgICAgICAgIEFTU0VSVChwYWlyLmRzdCgpLmlzVG1w
KCkgfHwgcGFpci5kc3QoKS5pc01lbW9yeSgpKTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAorCisgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBraW5kcyBvZiBvcGVyYXRp
b25zIHRoYXQgd2Ugd2lsbCBkbzoKKyAgICAvLworICAgIC8vIC0gU2hpZnQuIEV4YW1wbGU6IChh
ID0+IGIsIGIgPT4gYykuIFdlIGVtaXQgdGhpcyBhcyAiTW92ZSBiLCBjOyBNb3ZlIGEsIGIiLiBU
aGlzIG9ubHkgcmVxdWlyZXMKKyAgICAvLyAgIHNjcmF0Y2ggcmVnaXN0ZXJzIGlmIHRoZXJlIGFy
ZSBtZW1vcnktPm1lbW9yeSBtb3Zlcy4gV2Ugd2FudCB0byBmaW5kIGFzIG1hbnkgb2YgdGhlc2Ug
YXMKKyAgICAvLyAgIHBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgY2hlYXBlci4gTm90ZSB0aGF0
IHNoaWZ0cyBjYW4gaW52b2x2ZSB0aGUgc2FtZSBzb3VyY2UgbWVudGlvbmVkCisgICAgLy8gICBt
dWx0aXBsZSB0aW1lcy4gRXhhbXBsZTogKGEgPT4gYiwgYSA9PiBjLCBiID0+IGQsIGIgPT4gZSku
CisgICAgLy8KKyAgICAvLyAtIFJvdGF0ZS4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhKS4gV2Ug
d2FudCB0byBlbWl0IHRoaXMgYXMgIlN3YXAgYSwgYiIsIGJ1dCB0aGF0IGluc3RydWN0aW9uCisg
ICAgLy8gICBtYXkgbm90IGJlIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgbmVlZCBh
IHNjcmF0Y2ggcmVnaXN0ZXIgb3IgYSBzY3JhdGNoIG1lbW9yeQorICAgIC8vICAgbG9jYXRpb24u
IEEgZ25hcmxpZXIgZXhhbXBsZSBpcyAoYSA9PiBiLCBiID0+IGMsIGMgPT4gYSkuIFdlIGNhbiBl
bWl0IHRoaXMgYXMgIlN3YXAgYiwgYzsKKyAgICAvLyAgIFN3YXAgYSwgYiIuIE5vdGUgdGhhdCBz
d2FwcGluZyBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBkaWZmZXJpbmcgd2lkdGhzLgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGEgcm90YXRlIGNhbiBoYXZlICJmcmluZ2UiLiBGb3IgZXhhbXBs
ZSwgd2UgbWlnaHQgaGF2ZSAoYSA9PiBiLCBiID0+IGEsIGEgPT5jLAorICAgIC8vIGIgPT4gZCku
IFRoaXMgaGFzIGEgcm90YXRlIGxvb3AgKGEgPT4gYiwgYiA9PiBhKSBhbmQgc29tZSBmcmluZ2Ug
KGEgPT4gYywgYiA9PiBkKS4gV2UgdHJlYXQKKyAgICAvLyB0aGUgd2hvbGUgdGhpbmcgYXMgYSBz
aW5nbGUgcm90YXRlLgorICAgIC8vCisgICAgLy8gV2Ugd2lsbCBmaW5kIG11bHRpcGxlIGRpc2pv
aW50IHN1Y2ggb3BlcmF0aW9ucy4gV2UgY2FuIGV4ZWN1dGUgdGhlbSBpbiBhbnkgb3JkZXIuCisK
KyAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgTW92ZXMgdGhhdCBzaG91bGQgYmUgZXhlY3V0
ZWQgYmFja3dhcmRzLiBBbGwgc2hpZnRzIGFyZSBrZXllZCBieSB0aGVpcgorICAgIC8vIHN0YXJ0
aW5nIHNvdXJjZS4KKyAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj4gc2hpZnRz
OworCisgICAgLy8gV2UgaW50ZXJwcmV0IHRoZXNlIGFzIFN3YXBzIG92ZXIgc3JjKCkncyB0aGF0
IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMsIGkuZS4gZm9yIGEgbGlzdAorICAgIC8vIG9m
IHNpemUgMyB3ZSB3b3VsZCBkbyAiU3dhcCBsaXN0WzFdLnNyYygpLCBsaXN0WzJdLnNyYygpOyBT
d2FwIGxpc3RbMF0uc3JjKCksIGxpc3RbMV0uc3JjKCkiLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBh
Y3R1YWxseSBjYW4ndCBkbyB0aGF0IGlmIHRoZSB3aWR0aHMgZG9uJ3QgbWF0Y2ggb3Igb3RoZXIg
YmFkIHRoaW5ncyBoYXBwZW4uCisgICAgLy8gQnV0LCBwcmlvciB0byBleGVjdXRpbmcgYWxsIG9m
IHRoYXQsIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgZnJpbmdlOiB0aGUgc2hpZnRzIGNvbW1pbmcg
b2ZmIHRoZQorICAgIC8vIHJvdGF0ZS4KKyAgICBWZWN0b3I8Um90YXRlPiByb3RhdGVzOworCisg
ICAgeworICAgICAgICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj4gbWFwcGluZzsK
KyAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKQorICAgICAgICAg
ICAgbWFwcGluZy5hZGQocGFpci5zcmMoKSwgVmVjdG9yPFNodWZmbGVQYWlyPigpKS5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKHBhaXIpOworCisgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gY3Vy
cmVudFBhaXJzOworCisgICAgICAgIHdoaWxlICghbWFwcGluZy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50UGFpcnMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFyZyBv
cmlnaW5hbFNyYyA9IG1hcHBpbmcuYmVnaW4oKS0+a2V5OworICAgICAgICAgICAgQVNTRVJUKCFz
aGlmdHMuY29udGFpbnMob3JpZ2luYWxTcmMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgZnJvbSAiLCBvcmlnaW5hbFNyYywg
IlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEFyZz4g
d29ya2xpc3Q7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG9yaWdpbmFsU3JjKTsKKyAgICAg
ICAgICAgIHdoaWxlIChBcmcgc3JjID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgICAg
ICBIYXNoTWFwPEFyZywgVmVjdG9yPFNodWZmbGVQYWlyPj46Oml0ZXJhdG9yIGl0ZXIgPSBtYXBw
aW5nLmZpbmQoc3JjKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBtYXBwaW5nLmVuZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYSBzaGlmdCBpdCdzIHBvc3NpYmxlIHRo
YXQgd2UgcHJldmlvdXNseSBidWlsdCB0aGUgdGFpbCBvZiB0aGlzIHNoaWZ0LgorICAgICAgICAg
ICAgICAgICAgICAvLyBTZWUgaWYgdGhhdCdzIHRoZSBjYXNlIG5vdy4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJUcnlp
bmcgdG8gYXBwZW5kIHNoaWZ0IGF0ICIsIHNyYywgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRQYWlycy5hcHBlbmRWZWN0b3Ioc2hpZnRzLnRha2Uoc3JjKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBW
ZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzID0gV1RGTW92ZShpdGVyLT52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgbWFwcGluZy5yZW1vdmUoaXRlcik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFBhaXJzLmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIu
c3JjKCkgPT0gc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChwYWlyLmRz
dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50UGFpcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UGFp
cnNbMF0uc3JjKCkgPT0gb3JpZ2luYWxTcmMpOworCisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJjdXJyZW50UGFpcnMgPSAiLCBsaXN0RHVtcChjdXJy
ZW50UGFpcnMpLCAiXG4iKTsKKworICAgICAgICAgICAgYm9vbCBpc1JvdGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciA6IGN1cnJlbnRQYWlycykg
eworICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpID09IG9yaWdpbmFsU3JjKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlzUm90YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aXNSb3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSXQncyBhIHJvdGF0ZS5cbiIpOworICAgICAgICAgICAgICAgIFJvdGF0
ZSByb3RhdGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIGNvbW1v
biBjYXNlIGlzIHRoYXQgdGhlIHJvdGF0ZSBkb2VzIG5vdCBoYXZlIGZyaW5nZS4gV2hlbiB0aGlz
IGhhcHBlbnMsIHRoZQorICAgICAgICAgICAgICAgIC8vIGxhc3QgZGVzdGluYXRpb24gaXMgdGhl
IGZpcnN0IHNvdXJjZS4KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhaXJzLmxhc3QoKS5k
c3QoKSA9PSBvcmlnaW5hbFNyYykKKyAgICAgICAgICAgICAgICAgICAgcm90YXRlLmxvb3AgPSBX
VEZNb3ZlKGN1cnJlbnRQYWlycyk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNsb3cgcGF0aC4gVGhlIHJvdGF0ZSBoYXMgZnJpbmdl
LgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcs
IFNodWZmbGVQYWlyPiBkc3RNYXBwaW5nOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZHN0TWFwcGluZy5hZGQocGFpci5kc3QoKSwgcGFpcik7CisKKyAgICAgICAgICAgICAgICAg
ICAgU2h1ZmZsZVBhaXIgcGFpciA9IGRzdE1hcHBpbmcudGFrZShvcmlnaW5hbFNyYyk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0
ZS5sb29wLmFwcGVuZChwYWlyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVy
ID0gZHN0TWFwcGluZy5maW5kKHBhaXIuc3JjKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gZHN0TWFwcGluZy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBpdGVyLT52YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRzdE1hcHBpbmcucmVtb3ZlKGl0ZXIpOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm90YXRlLmxvb3AucmV2ZXJzZSgp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmcmluZ2UgYXBw
ZWFycyBpbiB0aGUgc2FtZSBvcmRlciBhcyBob3cgaXQgYXBwZWFyZWQgaW4gdGhlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGN1cnJlbnRQYWlycywgc2luY2UgdGhhdCdzIHRoZSBERlMgb3JkZXIu
CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJy
ZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBvZiBjb3Vyc2Ugd2Ug
b25seSBpbmNsdWRlIGl0IGlmIGl0J3Mgbm90IGluIHRoZSBsb29wLgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRzdE1hcHBpbmcuY29udGFpbnMocGFpci5kc3QoKSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcm90YXRlLmZyaW5nZS5hcHBlbmQocGFpcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIGdyYXBoIHNlYXJjaCB0ZXJtaW5hdGVzIGJlY2F1c2Ugd2UgcmV0
dXJuZWQgdG8gdGhlIGZpcnN0IHNvdXJjZSwgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBw
YWlyIGxpc3QgaGFzIHRvIGhhdmUgYSB2ZXJ5IHBhcnRpY3VsYXIgc2hhcGUuCisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpIC0gMTsgaS0tOykKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHJvdGF0ZS5sb29wW2ldLmRzdCgpID09IHJvdGF0ZS5s
b29wW2kgKyAxXS5zcmMoKSk7CisgICAgICAgICAgICAgICAgcm90YXRlcy5hcHBlbmQoV1RGTW92
ZShyb3RhdGUpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMucmVzaXplKDApOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSXQncyBhIHNoaWZ0LlxuIik7CisgICAgICAgICAgICAgICAg
c2hpZnRzLmFkZChvcmlnaW5hbFNyYywgV1RGTW92ZShjdXJyZW50UGFpcnMpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGRh
dGFMb2coIlNoaWZ0czpcbiIpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKQor
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGVudHJ5LmtleSwgIjogIiwgbGlzdER1bXAoZW50
cnkudmFsdWUpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiUm90YXRlczpcbiIpOworICAgICAg
ICBmb3IgKGF1dG8mIHJvdGF0ZSA6IHJvdGF0ZXMpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAg
bG9vcCA9ICIsIGxpc3REdW1wKHJvdGF0ZS5sb29wKSwgIiwgZnJpbmdlID0gIiwgbGlzdER1bXAo
cm90YXRlLmZyaW5nZSksICJcbiIpOworICAgIH0KKworICAgIC8vIEluIHRoZSB3b3JzdCBjYXNl
LCB3ZSBuZWVkIHR3byBzY3JhdGNoIHJlZ2lzdGVycy4gVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRo
YXQgdGhlIGNsaWVudCBwYXNzZXMKKyAgICAvLyB1cyB3aGF0IHNjcmF0Y2ggcmVnaXN0ZXJzIGhl
IGhhcHBlbnMgdG8gaGF2ZSBsYXlpbmcgYXJvdW5kLiBXZSB3aWxsIG5lZWQgc2NyYXRjaCByZWdp
c3RlcnMgaW4KKyAgICAvLyB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vCisgICAgLy8gLSBT
aHVmZmxlIHBhaXJzIHdoZXJlIGJvdGggc3JjIGFuZCBkc3QgcmVmZXIgdG8gbWVtb3J5LgorICAg
IC8vIC0gUm90YXRlIHdoZW4gbm8gU3dhcCBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUuCisgICAg
Ly8KKyAgICAvLyBMdWNreSBmb3IgdXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgZXh0cmEg
c2NyYXRjaCByZWdpc3RlcnMgYW55dGltZSB3ZSBoYXZlIGEgU2hpZnQgdGhhdAorICAgIC8vIGVu
ZHMgd2l0aCBhIHJlZ2lzdGVyLiBXZSBzZWFyY2ggZm9yIHN1Y2ggYSByZWdpc3RlciByaWdodCBu
b3cuCisKKyAgICBhdXRvIG1vdmVGb3JXaWR0aCA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCkgLT4g
T3Bjb2RlIHsKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIEFyZzo6V2lk
dGgzMjoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBNb3ZlMzIgOiBNb3Zl
RmxvYXQ7CisgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIHR5
cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBPcGNvZGUgY29uc2VydmF0aXZlTW92ZSA9IG1vdmVGb3JXaWR0aChBcmc6OmNvbnNl
cnZhdGl2ZVdpZHRoKHR5cGUpKTsKKworICAgIC8vIFdlIHdpbGwgZW1pdCB0aGluZ3MgaW4gcmV2
ZXJzZS4gV2UgbWFpbnRhaW4gYSBsaXN0IG9mIHBhY2tzIG9mIGluc3RydWN0aW9ucywgYW5kIHRo
ZW4gd2UgZW1pdAorICAgIC8vIGFwcGVuZCB0aGVtIHRvZ2V0aGVyIGluIHJldmVyc2UgKGZvciBl
eGFtcGxlIHRoZSB0aGluZyBhdCB0aGUgZW5kIG9mIHJlc3VsdFBhY2tzIGlzIHBsYWNlZAorICAg
IC8vIGZpcnN0KS4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgbGFzdCB0aGluZyB3ZSBlbWl0
IGZyZWVzIHVwIGl0cyBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIHNvCisgICAgLy8gaXQgYWZmZWN0
cyBob3cgd2UgZW1pdCB0aGluZ3MgYmVmb3JlIGl0LgorICAgIFZlY3RvcjxWZWN0b3I8SW5zdD4+
IHJlc3VsdFBhY2tzOworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7CisKKyAgICBhdXRvIGNvbW1p
dFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIHJlc3VsdFBhY2tzLmFwcGVuZChXVEZNb3ZlKHJl
c3VsdCkpOworICAgIH07CisKKyAgICBhdXRvIGdldFNjcmF0Y2ggPSBbJl0gKHVuc2lnbmVkIGlu
ZGV4LCBUbXAgcG9zc2libGVTY3JhdGNoKSAtPiBUbXAgeworICAgICAgICBpZiAoc2NyYXRjaGVz
W2luZGV4XS5pc1RtcCgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hlc1tpbmRleF0udG1w
KCk7CisKKyAgICAgICAgaWYgKCFwb3NzaWJsZVNjcmF0Y2gpCisgICAgICAgICAgICByZXR1cm4g
VG1wKCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmln
aW4sIHBvc3NpYmxlU2NyYXRjaCwgc2NyYXRjaGVzW2luZGV4XSkpOworICAgICAgICByZXR1cm4g
cG9zc2libGVTY3JhdGNoOworICAgIH07CisKKyAgICBhdXRvIHJldHVyblNjcmF0Y2ggPSBbJl0g
KHVuc2lnbmVkIGluZGV4LCBUbXAgdG1wKSB7CisgICAgICAgIGlmIChBcmcodG1wKSAhPSBzY3Jh
dGNoZXNbaW5kZXhdKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNlcnZhdGl2
ZU1vdmUsIG9yaWdpbiwgc2NyYXRjaGVzW2luZGV4XSwgdG1wKSk7CisgICAgfTsKKworICAgIGF1
dG8gaGFuZGxlU2hpZnRQYWlyID0gWyZdIChjb25zdCBTaHVmZmxlUGFpciYgcGFpciwgdW5zaWdu
ZWQgc2NyYXRjaEluZGV4KSB7CisgICAgICAgIE9wY29kZSBtb3ZlID0gbW92ZUZvcldpZHRoKHBh
aXIud2lkdGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG1vdmUsIHBh
aXIuc3JjKCkua2luZCgpLCBwYWlyLmRzdCgpLmtpbmQoKSkpIHsKKyAgICAgICAgICAgIFRtcCBz
Y3JhdGNoID0KKyAgICAgICAgICAgICAgICBnZXRTY3JhdGNoKHNjcmF0Y2hJbmRleCwgZmluZFBv
c3NpYmxlU2NyYXRjaCh0eXBlLCBwYWlyLnNyYygpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybSht
b3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKSwgb3JpZ2luLCBwYWlyLnNy
YygpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocGFpci5zcmMoKS5pc1NvbWVJbW0oKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1vdmUg
PT0gTW92ZTMyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZSwgb3Jp
Z2luLCBBcmc6OmltbTY0KHBhaXIuc3JjKCkudmFsdWUoKSksIHNjcmF0Y2gpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgocGFpci53
aWR0aCgpKSwgb3JpZ2luLCBzY3JhdGNoLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAgICByZXR1
cm5TY3JhdGNoKHNjcmF0Y2hJbmRleCwgc2NyYXRjaCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlLCBvcmln
aW4sIHBhaXIuc3JjKCksIHBhaXIuZHN0KCkpKTsKKyAgICB9OworCisgICAgYXV0byBoYW5kbGVT
aGlmdCA9IFsmXSAoVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQpIHsKKyAgICAgICAgLy8gRklY
TUU6IFdlIGNvdWxkIG9wdGltaXplIHRoZSBzcGlsbCBiZWhhdmlvciBvZiB0aGUgc2hpZnRlciBi
eSBjaGVja2luZyBpZiBhbnkgb2YgdGhlCisgICAgICAgIC8vIHNoaWZ0cyBuZWVkIHNwaWxscy4g
SWYgdGhleSBkbywgdGhlbiB3ZSBjb3VsZCB0cnkgdG8gZ2V0IGEgcmVnaXN0ZXIgb3V0IGhlcmUu
IE5vdGUgdGhhdAorICAgICAgICAvLyB0aGlzIG1heSBmYWlsIHdoZXJlIHRoZSBjdXJyZW50IHN0
cmF0ZWd5IHN1Y2NlZWRzOiBvdXQgaGVyZSB3ZSBuZWVkIGEgcmVnaXN0ZXIgdGhhdCBkb2VzCisg
ICAgICAgIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCBhbnkgb2YgdGhlIHNoaWZ0cywgd2hpbGUgdGhl
IGN1cnJlbnQgc3RyYXRlZ3kgb25seSBuZWVkcyB0byBmaW5kIGEKKyAgICAgICAgLy8gc2NyYXRj
aCByZWdpc3RlciB0aGF0IGRvZXMgbm90IGludGVyZmVyIHdpdGggYSBwYXJ0aWN1bGFyIHNoaWZ0
LiBTbywgdGhpcyBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gd2lsbCBiZSBvcHBvcnR1bmlzdGlj
OiBpZiBpdCBzdWNjZWVkcywgdGhlbiB0aGUgaW5kaXZpZHVhbCBzaGlmdHMgY2FuIHVzZSB0aGF0
IHNjcmF0Y2gsCisgICAgICAgIC8vIG90aGVyd2lzZSB0aGV5IHdpbGwgZG8gd2hhdCB0aGV5IGRv
IG5vdy4KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNoaWZ0LnNpemUoKTsg
aS0tOykKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcihzaGlmdFtpXSwgMCk7CisKKyAgICAg
ICAgQXJnIGxhc3REc3QgPSBzaGlmdC5sYXN0KCkuZHN0KCk7CisgICAgICAgIGlmIChsYXN0RHN0
LmlzVG1wKCkpIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBzY3JhdGNoIDogc2NyYXRjaGVzKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0gbGFzdERzdCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFzY3JhdGNoLmlzVG1wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRj
aCA9IGxhc3REc3Q7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBGaXJzdCBoYW5k
bGUgc2hpZnRzIHdob3NlIGxhc3QgZGVzdGluYXRpb24gaXMgYSB0bXAgYmVjYXVzZSB0aGVzZSBm
cmVlIHVwIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIC8vIFRoZXNlIGVuZCB1cCBsYXN0IGluIHRo
ZSBmaW5hbCBzZXF1ZW5jZSwgc28gdGhlIGZpbmFsIGRlc3RpbmF0aW9uIG9mIHRoZXNlIHNoaWZ0
cyB3aWxsIGJlCisgICAgLy8gYXZhaWxhYmxlIGFzIGEgc2NyYXRjaCBsb2NhdGlvbiBmb3IgYW55
dGhpbmcgZW1pdHRlZCBwcmlvciAoc28sIGFmdGVyLCBzaW5jZSB3ZSdyZSBlbWl0dGluZyBpbgor
ICAgIC8vIHJldmVyc2UpLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAgICAg
ICAgVmVjdG9yPFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYg
KHNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1RtcCgpKQorICAgICAgICAgICAgaGFuZGxlU2hpZnQoc2hp
ZnQpOworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgaGFuZGxl
IHRoZSByZXN0IG9mIHRoZSBzaGlmdHMuCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykg
eworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZhbHVlOworICAg
ICAgICBpZiAoIXNoaWZ0Lmxhc3QoKS5kc3QoKS5pc1RtcCgpKQorICAgICAgICAgICAgaGFuZGxl
U2hpZnQoc2hpZnQpOworICAgICAgICBjb21taXRSZXN1bHQoKTsKKyAgICB9CisKKyAgICBmb3Ig
KFJvdGF0ZSYgcm90YXRlIDogcm90YXRlcykgeworICAgICAgICBpZiAoIXJvdGF0ZS5mcmluZ2Uu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gdGhlIGZyaW5nZSBm
aXJzdCEgVGhpcyB3b24ndCBjbG9iYmVyIGFueSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlCisg
ICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSByb3RhdGlvbi4KKyAgICAgICAgICAgIGhhbmRsZVNo
aWZ0KHJvdGF0ZS5mcmluZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNh
blN3YXAgPSBmYWxzZTsKKyAgICAgICAgT3Bjb2RlIHN3YXAgPSBPb3BzOworICAgICAgICBBcmc6
OldpZHRoIHN3YXBXaWR0aCA9IEFyZzo6V2lkdGg4OyAvLyBib2d1cyB2YWx1ZQorCisgICAgICAg
IC8vIEN1cnJlbnRseSwgdGhlIHN3YXAgaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSBmb3Ig
ZmxvYXRpbmcgcG9pbnQgb24gYW55IGFyY2hpdGVjdHVyZSB3ZQorICAgICAgICAvLyBzdXBwb3J0
LgorICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQKSB7CisgICAgICAgICAgICAvLyBGaWd1cmUg
b3V0IHdoZXRoZXIgd2Ugd2lsbCBiZSBkb2luZyA2NC1iaXQgc3dhcHMgb3IgMzItYml0IHN3YXBz
LiBJZiB3ZSBoYXZlIGEgbWl4IG9mCisgICAgICAgICAgICAvLyB3aWR0aHMgd2UgaGFuZGxlIHRo
YXQgYnkgZml4aW5nIHVwIHRoZSByZWxldmFudCByZWdpc3RlciB3aXRoIHplcm8tZXh0ZW5kcy4K
KyAgICAgICAgICAgIHN3YXAgPSBTd2FwMzI7CisgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6
OldpZHRoMzI7CisgICAgICAgICAgICBib29sIGhhc01lbW9yeSA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBoYXNJbmRleCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYg
cGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwYWlyLndpZHRo
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAg
ICAgICAgICAgICAgIHN3YXAgPSBTd2FwNjQ7CisgICAgICAgICAgICAgICAgICAgIHN3YXBXaWR0
aCA9IEFyZzo6V2lkdGg2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaGFzTWVtb3J5IHw9IHBhaXIuc3JjKCkuaXNNZW1vcnkoKSB8fCBw
YWlyLmRzdCgpLmlzTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgaGFzSW5kZXggfD0gcGFpci5z
cmMoKS5pc0luZGV4KCkgfHwgcGFpci5kc3QoKS5pc0luZGV4KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhblN3YXAgPSBpc1ZhbGlkRm9ybShzd2FwLCBBcmc6
OlRtcCwgQXJnOjpUbXApOworCisgICAgICAgICAgICAvLyBXZSBjYW4gdG90YWxseSB1c2Ugc3dh
cHMgZXZlbiBpZiB0aGVyZSBhcmUgc2h1ZmZsZXMgaW52b2x2aW5nIG1lbW9yeS4gQnV0LCB3ZSBw
bGF5IGl0CisgICAgICAgICAgICAvLyBzYWZlIGluIHRoYXQgY2FzZS4gVGhlcmUgYXJlIGNvcm5l
ciBjYXNlcyB3ZSBkb24ndCBoYW5kbGUsIGFuZCBvdXIgYWJpbGl0eSB0byBkbyBpdCBpcworICAg
ICAgICAgICAgLy8gY29udGluZ2VudCB1cG9uIHN3YXAgZm9ybSBhdmFpbGFiaWxpdHkuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYXNNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICBj
YW5Td2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OkFkZHIpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHRha2UgdGhlIHN3YXBwaW5n
IHBhdGggaWYgdGhlcmUgaXMgYSBtaXggb2Ygd2lkdGhzIGFuZCBzb21lIG9mIHRoZQorICAgICAg
ICAgICAgICAgIC8vIHNodWZmbGVzIGludm9sdmUgbWVtb3J5LiBUaGF0IGdldHMgdG9vIGNvbmZ1
c2luZy4gV2UgbWlnaHQgYmUgYWJsZSB0byByZWxheCB0aGlzCisgICAgICAgICAgICAgICAgLy8g
dG8gb25seSBiYWlsIGlmIHRoZXJlIGFyZSBzdWJ3aWR0aCBwYWlycyBpbnZvbHZpbmcgbWVtb3J5
LCBidXQgSSBoYXZlbid0IHRob3VnaHQKKyAgICAgICAgICAgICAgICAvLyBhYm91dCBpdCB2ZXJ5
IGhhcmQuIEFueXdheSwgdGhpcyBjYXNlIGlzIG5vdCBjb21tb246IHJvdGF0ZXMgaW52b2x2aW5n
IG1lbW9yeQorICAgICAgICAgICAgICAgIC8vIGRvbid0IGFyaXNlIGZvciBmdW5jdGlvbiBjYWxs
cywgYW5kIHRoZXkgd2lsbCBvbmx5IGhhcHBlbiBmb3Igcm90YXRlcyBpbiB1c2VyIGNvZGUKKyAg
ICAgICAgICAgICAgICAvLyBpZiBzb21lIG9mIHRoZSB2YXJpYWJsZXMgZ2V0IHNwaWxsZWQuIEl0
J3MgaGFyZCB0byBpbWFnaW5lIGEgcHJvZ3JhbSB0aGF0IHJvdGF0ZXMKKyAgICAgICAgICAgICAg
ICAvLyBkYXRhIGFyb3VuZCBpbiB2YXJpYWJsZXMgd2hpbGUgYWxzbyBkb2luZyBhIGNvbWJpbmF0
aW9uIG9mIHVpbnQzMi0+dWludDY0IGFuZAorICAgICAgICAgICAgICAgIC8vIGludDY0LT5pbnQz
MiBjYXN0cy4KKyAgICAgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRl
Lmxvb3ApCisgICAgICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gcGFpci53aWR0aCgpID09IHN3
YXBXaWR0aDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhc0luZGV4KQorICAg
ICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6
SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhblN3YXApIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKSAtIDE7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBBcmcgbGVmdCA9IHJvdGF0ZS5sb29wW2ldLnNyYygpOworICAgICAgICAgICAg
ICAgIEFyZyByaWdodCA9IHJvdGF0ZS5sb29wW2kgKyAxXS5zcmMoKTsKKworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LmlzTWVtb3J5KCkgJiYgcmlnaHQuaXNNZW1vcnkoKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIHN1cGVyIHJhcmUgb3V0Y29tZS4gUm90
YXRlcyBhcmUgcmFyZS4gU3BpbGxzIGFyZSByYXJlLgorICAgICAgICAgICAgICAgICAgICAvLyBN
b3ZpbmcgZGF0YSBiZXR3ZWVuIHR3byBzcGlsbHMgaXMgcmFyZS4gVG8gZ2V0IGhlcmUgYSBsb3Qg
b2YgcmFyZSBzdHVmZiBoYXMgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIGhhcHBlbiBh
dCBvbmNlLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVG1wIHNj
cmF0Y2ggPSBnZXRTY3JhdGNoKDAsIGZpbmRQb3NzaWJsZVNjcmF0Y2godHlwZSwgbGVmdCwgcmln
aHQpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgoc3dhcFdpZHRo
KSwgb3JpZ2luLCBsZWZ0LCBzY3JhdGNoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIHNjcmF0Y2gsIHJpZ2h0KSk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChtb3ZlRm9yV2lkdGgoc3dhcFdpZHRoKSwgb3JpZ2lu
LCBzY3JhdGNoLCBsZWZ0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwg
c2NyYXRjaCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmIChsZWZ0LmlzTWVtb3J5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6c3dhcChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90
YXRlLmxvb3ApIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci53aWR0aCgpID09IHN3YXBXaWR0
aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChwYWlyLndpZHRoKCkgPT0gQXJnOjpXaWR0aDMyKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzd2FwV2lkdGggPT0gQXJnOjpXaWR0aDY0KTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwYWlyLmRzdCgpLmlzVG1wKCkpOworCisgICAgICAgICAgICAg
ICAgLy8gTmVlZCB0byBkbyBhbiBleHRyYSB6ZXJvIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QoTW92ZTMyLCBvcmlnaW4sIHBhaXIuZHN0KCksIHBhaXIuZHN0
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdl
IGNhbiB0cmVhdCB0aGlzIGFzIGEgc2hpZnQgc28gbG9uZyBhcyB3ZSB0YWtlIHRoZSBsYXN0IGRl
c3RpbmF0aW9uIChpLmUuIGZpcnN0CisgICAgICAgICAgICAvLyBzb3VyY2UpIGFuZCBzYXZlIGl0
IGZpcnN0LiBUaGVuIHdlIGhhbmRsZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhaXIgaW4gdGhl
IHJvdGF0ZQorICAgICAgICAgICAgLy8gc3BlY2lhbGx5LCBhZnRlciB3ZSByZXN0b3JlIHRoZSBs
YXN0IGRlc3RpbmF0aW9uLiBUaGlzIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXJlIHRvCisgICAg
ICAgICAgICAvLyBmaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4gSXQncyBwb3NzaWJsZSB0aGF0IHdl
IGhhdmUgYSByb3RhdGUgdGhhdCB1c2VzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIC8vIGF2YWls
YWJsZSByZWdpc3RlciBmaWxlLgorCisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGZpbmRQb3Nz
aWJsZVNjcmF0Y2goCisgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICBbJl0g
KFRtcCB0bXApIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBmb3IgKFNodWZmbGVQYWly
IHBhaXIgOiByb3RhdGUubG9vcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIu
c3JjKCkudXNlc1RtcCh0bXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmRzdCgpLnVzZXNUbXAodG1w
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5
IHVzZSBvZiBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRTY3Jh
dGNoKDAsIHNjcmF0Y2gpOworCisgICAgICAgICAgICAvLyBXZSBtYXkgbm90IGhhdmUgZm91bmQg
YSBzY3JhdGNoIHJlZ2lzdGVyLiBXaGVuIHRoaXMgaGFwcGVucywgd2UgY2FuIGp1c3QgdXNlIHRo
ZSBzcGlsbAorICAgICAgICAgICAgLy8gc2xvdCBkaXJlY3RseS4KKyAgICAgICAgICAgIEFyZyBy
b3RhdGVTYXZlID0gc2NyYXRjaCA/IEFyZyhzY3JhdGNoKSA6IHNjcmF0Y2hlc1swXTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKAorICAgICAgICAgICAgICAgIFNo
dWZmbGVQYWlyKHJvdGF0ZS5sb29wLmxhc3QoKS5kc3QoKSwgcm90YXRlU2F2ZSwgcm90YXRlLmxv
b3BbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3Rh
dGUubG9vcC5zaXplKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFp
cihyb3RhdGUubG9vcFtpXSwgMSk7CisKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAg
ICAgICAgICAgICAgICBTaHVmZmxlUGFpcihyb3RhdGVTYXZlLCByb3RhdGUubG9vcFswXS5kc3Qo
KSwgcm90YXRlLmxvb3BbMF0ud2lkdGgoKSksIDEpOworCisgICAgICAgICAgICBpZiAoc2NyYXRj
aCkKKyAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAgICB9
CisKKyAgICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgQVNTRVJUKHJlc3VsdC5p
c0VtcHR5KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0UGFja3Muc2l6ZSgpOyBp
LS07KQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHJlc3VsdFBhY2tzW2ldKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25z
dCBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBwYWlycywKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywg
Mj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAg
VmFsdWUqIG9yaWdpbikKK3sKKyAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGdwUGFpcnM7CisgICAg
VmVjdG9yPFNodWZmbGVQYWlyPiBmcFBhaXJzOworICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXIm
IHBhaXIgOiBwYWlycykgeworICAgICAgICBpZiAocGFpci5zcmMoKS5pc01lbW9yeSgpICYmIHBh
aXIuZHN0KCkuaXNNZW1vcnkoKSAmJiBwYWlyLndpZHRoKCkgPiBBcmc6OnBvaW50ZXJXaWR0aCgp
KSB7CisgICAgICAgICAgICAvLyA4LWJ5dGUgbWVtb3J5LXRvLW1lbW9yeSBtb3ZlcyBvbiBhIDMy
LWJpdCBwbGF0Zm9ybSBhcmUgYmVzdCBoYW5kbGVkIGFzIGZsb2F0IG1vdmVzLgorICAgICAgICAg
ICAgZnBQYWlycy5hcHBlbmQocGFpcik7CisgICAgICAgIH0gZWxzZSBpZiAocGFpci5zcmMoKS5p
c0dQKCkgJiYgcGFpci5kc3QoKS5pc0dQKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBncFBhaXJzIGdldHMgbWVtb3J5LXRvLW1lbW9yeSBzaHVmZmxlcy4gVGhlIGFzc3VtcHRp
b24gaXMgdGhhdCB3ZQorICAgICAgICAgICAgLy8gY2FuIGRvIHRoYXQgbW9yZSBlZmZpY2llbnRs
eSB1c2luZyBHUFJzLCBleGNlcHQgaW4gdGhlIHNwZWNpYWwgY2FzZSBhYm92ZS4KKyAgICAgICAg
ICAgIGdwUGFpcnMuYXBwZW5kKHBhaXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZw
UGFpcnMuYXBwZW5kKHBhaXIpOworICAgIH0KKworICAgIFZlY3RvcjxJbnN0PiByZXN1bHQ7Cisg
ICAgcmVzdWx0LmFwcGVuZFZlY3RvcihlbWl0U2h1ZmZsZShncFBhaXJzLCBncFNjcmF0Y2gsIEFy
Zzo6R1AsIG9yaWdpbikpOworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IoZW1pdFNodWZmbGUoZnBQ
YWlycywgZnBTY3JhdGNoLCBBcmc6OkZQLCBvcmlnaW4pKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0
U2h1ZmZsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJFbWl0U2h1ZmZsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRW1pdFNo
dWZmbGVfaAorI2RlZmluZSBBaXJFbWl0U2h1ZmZsZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZh
bHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU2h1ZmZsZVBhaXIgeworcHVibGljOgor
ICAgIFNodWZmbGVQYWlyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNodWZmbGVQYWlyKGNv
bnN0IEFyZyYgc3JjLCBjb25zdCBBcmcmIGRzdCwgQXJnOjpXaWR0aCB3aWR0aCkKKyAgICAgICAg
OiBtX3NyYyhzcmMpCisgICAgICAgICwgbV9kc3QoZHN0KQorICAgICAgICAsIG1fd2lkdGgod2lk
dGgpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZyYgc3JjKCkgY29uc3QgeyByZXR1cm4g
bV9zcmM7IH0KKyAgICBjb25zdCBBcmcmIGRzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHN0OyB9CisK
KyAgICAvLyBUaGUgd2lkdGggZGV0ZXJtaW5lcyB0aGUga2luZCBvZiBtb3ZlIHdlIGRvLiBZb3Ug
Y2FuIG9ubHkgY2hvb3NlIFdpZHRoMzIgb3IgV2lkdGg2NCByaWdodCBub3cuCisgICAgLy8gRm9y
IEdQLCBpdCBwaWNrcyBiZXR3ZWVuIE1vdmUzMiBhbmQgTW92ZS4gRm9yIEZQLCBpdCBwaWNrcyBi
ZXR3ZWVuIE1vdmVGbG9hdCBhbmQgTW92ZURvdWJsZS4KKyAgICBBcmc6OldpZHRoIHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFyZyBtX3NyYzsKKyAgICBBcmcgbV9kc3Q7Cisg
ICAgQXJnOjpXaWR0aCBtX3dpZHRoIHsgQXJnOjpXaWR0aDggfTsKK307CisKKy8vIFBlcmZvcm0g
YSBzaHVmZmxlIG9mIGEgZ2l2ZW4gdHlwZS4gVGhlIHNjcmF0Y2ggYXJndW1lbnQgaXMgbWFuZGF0
b3J5LiBZb3Ugc2hvdWxkIHBhc3MgaXQgYXMKKy8vIGZvbGxvd3M6IElmIHlvdSBrbm93IHRoYXQg
eW91IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgb3IgdGVtcG9yYXJpZXMgYXZhaWxhYmxlIC0gdGhh
dCBpcywgdGhleSdyZQorLy8gcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBtZW50aW9uZWQgaW4gdGhl
IHNodWZmbGUsIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgc2h1ZmZsZSwgYW5kIGFyZSBub3QK
Ky8vIGxpdmUgYXQgdGhlIHNodWZmbGUgLSB0aGVuIHlvdSBjYW4gcGFzcyB0aGVtLiBJZiB5b3Ug
ZG9uJ3QgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyBhdmFpbGFibGUgb3IgaWYKKy8vIHlvdSBkb24n
dCBmZWVsIGxpa2UgbG9va2luZyBmb3IgdGhlbSwgeW91IGNhbiBwYXNzIG1lbW9yeSBsb2NhdGlv
bnMuIEl0J3MgYWx3YXlzIHNhZmUgdG8gcGFzcyBhCisvLyBwYWlyIG9mIG1lbW9yeSBsb2NhdGlv
bnMsIGFuZCByZXBsYWNpbmcgZWl0aGVyIG1lbW9yeSBsb2NhdGlvbiB3aXRoIGEgcmVnaXN0ZXIg
Y2FuIGJlIHZpZXdlZCBhcyBhbgorLy8gb3B0aW1pemF0aW9uLiBJdCdzIGEgcHJldHR5IGltcG9y
dGFudCBvcHRpbWl6YXRpb24uIFNvbWUgbW9yZSBub3RlczoKKy8vCisvLyAtIFdlIGRlZmluZSBz
Y3JhdGNoIHJlZ2lzdGVycyBhcyB0aGluZ3MgdGhhdCBhcmUgbm90IGxpdmUgYmVmb3JlIHRoZSBz
aHVmZmxlIGFuZCBhcmUgbm90IG9uZSBvZgorLy8gICB0aGUgZGVzdGluYXRpb25zIG9mIHRoZSBz
aHVmZmxlLiBOb3QgYmVpbmcgbGl2ZSBiZWZvcmUgdGhlIHNodWZmbGUgYWxzbyBtZWFucyB0aGF0
IHRoZXkgY2Fubm90CisvLyAgIGJlIHVzZWQgZm9yIGFueSBvZiB0aGUgc291cmNlcyBvZiB0aGUg
c2h1ZmZsZS4KKy8vCisvLyAtIEEgc2Vjb25kIHNjcmF0Y2ggbG9jYXRpb24gaXMgb25seSBuZWVk
ZWQgd2hlbiB5b3UgaGF2ZSBzaHVmZmxlIHBhaXJzIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJvdGgK
Ky8vICAgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4KKy8vCisvLyAtIFlvdSdyZSBndWFyYW50
ZWVkIG5vdCB0byBuZWVkIGFueSBzY3JhdGNoIGxvY2F0aW9ucyBpZiB0aGVyZSBpcyBhIFN3YXAg
aW5zdHJ1Y3Rpb24gYXZhaWxhYmxlIGZvcgorLy8gICB0aGUgdHlwZSBhbmQgeW91IGRvbid0IGhh
dmUgYW55IG1lbW9yeSBsb2NhdGlvbnMgdGhhdCBhcmUgYm90aCB0aGUgc291cmNlIGFuZCB0aGUg
ZGVzdGluYXRpb24gb2YKKy8vICAgc29tZSBwYWlycy4gR1Agc3VwcG9ydHMgU3dhcCBvbiB4ODYg
d2hpbGUgRlAgbmV2ZXIgc3VwcG9ydHMgU3dhcC4KKy8vCisvLyAtIFBhc3NpbmcgbWVtb3J5IGxv
Y2F0aW9ucyBhcyBzY3JhdGNoIGlmIGFyZSBydW5uaW5nIGVtaXRTaHVmZmxlKCkgYmVmb3JlIHJl
Z2lzdGVyIGFsbG9jYXRpb24gaXMKKy8vICAgc2lsbHksIHNpbmNlIHRoYXQgd2lsbCBjYXVzZSBl
bWl0U2h1ZmZsZSgpIHRvIHBpY2sgc29tZSBzcGVjaWZpYyByZWdpc3RlcnMgd2hlbiBpdCBkb2Vz
IG5lZWQKKy8vICAgc2NyYXRjaC4gT25lIGVhc3kgd2F5IHRvIGF2b2lkIHRoYXQgcHJlZGljYW1l
bnQgaXMgdG8gZW5zdXJlIHRoYXQgeW91IGNhbGwgZW1pdFNodWZmbGUoKSBhZnRlcgorLy8gICBy
ZWdpc3RlciBhbGxvY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gd2UgY291bGQgYWRkIGEgU2h1ZmZs
ZSBpbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiBkZWZlcgorLy8gICBzaHVmZmxpbmdzIHVudGls
IGFmdGVyIHJlZ2FsbG9jLgorLy8KKy8vIC0gU2h1ZmZsZXMgd2l0aCBtZW1vcnk9Pm1lbW9yeSBw
YWlycyBhcmUgbm90IHZlcnkgd2VsbCB0dW5lZC4gWW91IHNob3VsZCBhdm9pZCB0aGVtIGlmIHlv
dSB3YW50CisvLyAgIHBlcmZvcm1hbmNlLiBJZiB5b3UgbmVlZCB0byBkbyB0aGVtLCB0aGVuIG1h
a2luZyBzdXJlIHRoYXQgeW91IHJlc2VydmUgYSB0ZW1wb3JhcnkgaXMgb25lIHdheSB0bworLy8g
ICBnZXQgYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4KKy8vCisvLyBOT1RFOiBVc2UgdGhpcyBtZXRo
b2QgKGFuZCBpdHMgZnJpZW5kIGJlbG93KSB0byBlbWl0IHNodWZmbGVzIGFmdGVyIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEJlZm9yZQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBpdCBpcyBtdWNoIGJl
dHRlciB0byBzaW1wbHkgdXNlIHRoZSBTaHVmZmxlIGluc3RydWN0aW9uLgorVmVjdG9yPEluc3Q+
IGVtaXRTaHVmZmxlKAorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4sIHN0ZDo6YXJyYXk8QXJnLCAy
PiBzY3JhdGNoLCBBcmc6OlR5cGUsIFZhbHVlKiBvcmlnaW4pOworCisvLyBQZXJmb3JtIGEgc2h1
ZmZsZSB0aGF0IGludm9sdmVzIGFueSBudW1iZXIgb2YgdHlwZXMuIFBhc3Mgc2NyYXRjaCByZWdp
c3RlcnMgb3IgbWVtb3J5IGxvY2F0aW9ucworLy8gZm9yIGVhY2ggdHlwZSBhY2NvcmRpbmcgdG8g
dGhlIHJ1bGVzIGFib3ZlLgorVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAorICAgIGNvbnN0IFZl
Y3RvcjxTaHVmZmxlUGFpcj4mLAorICAgIGNvbnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3Jh
dGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGZwU2NyYXRjaCwKKyAgICBWYWx1ZSogb3Jp
Z2luKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckVtaXRTaHVmZmxlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5NTA2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlySXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCIKKyNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2Mu
aCIKKyNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxz
LmgiCiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVw
b3J0VXNlZFJlZ2lzdGVycy5oIgpAQCAtNjUsNiArNjcsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5l
cmF0aW9uKENvZGUmIGNvZGUpCiAgICAgICAgIGRhdGFMb2coY29kZSk7CiAgICAgfQogCisgICAg
bG93ZXJNYWNyb3MoY29kZSk7CisKICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0
aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9w
dGltaXphdGlvbnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ1NgpAQCAtODAsNiArODQsOCBAQCB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENv
ZGUmIGNvZGUpCiAgICAgZWxzZQogICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhj
b2RlKTsKIAorICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKwogICAgIC8vIFByaW9yIHRv
IHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBt
YWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbwogICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRp
Znkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgogICAgIGhh
bmRsZUNhbGxlZVNhdmVzKGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDExICszOCwxMSBAQCBj
bGFzcyBDb2RlOwogCiAvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQg
YW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKIC8vIHJl
Z2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MuCi12b2lkIHBy
ZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJlcGFy
ZUZvckdlbmVyYXRpb24oQ29kZSYpOwogCiAvLyBUaGlzIGdlbmVyYXRlcyB0aGUgY29kZSB1c2lu
ZyB0aGUgZ2l2ZW4gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2Fs
bCBjYWxsYmFja3MKIC8vIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzIGdlbmVyYXRpbmcu
Ci12b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOwogCiB9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CiAKK3ZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0
IFZlY3RvcjxJbnN0PiYgaW5zdHMpCit7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5z
dHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIGluc3QpOworfQorCit2b2lkIEluc2VydGlv
blNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJiBpbnN0cykKK3sK
KyAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cykKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwg
V1RGTW92ZShpbnN0KSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxv
Y2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5z
ZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiArNTksOSBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4
LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKICAgICB9CisKKyAgICB2b2lkIGluc2VydElu
c3RzKHNpemVfdCBpbmRleCwgY29uc3QgVmVjdG9yPEluc3Q+Jik7CisgICAgdm9pZCBpbnNlcnRJ
bnN0cyhzaXplX3QgaW5kZXgsIFZlY3RvcjxJbnN0PiYmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDE1IEBAIHB1YmxpYzoKIAog
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bj
b2RlICE9IE5vcCB8fCBhcmdzLnNpemUoKTsgfQogCisgICAgdm9pZCBhcHBlbmQoKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQo
QXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKGFyZyk7CisgICAgICAgIGFwcGVuZChhcmd1bWVudHMuLi4pOworICAgIH0KKwogICAgIC8v
IE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNl
IHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CiAgICAgLy8gZWRpdCBJUi4gSVIg
aXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0
IEluc3QmIiB0aGVuIHlvdSdyZQogICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgiCisjaW5jbHVk
ZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRl
ICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAg
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29k
ZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImxvd2VyQWZ0ZXJS
ZWdBbGxvYyIpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkNvZGUgYmVm
b3JlIGxvd2VyQWZ0ZXJSZWdBbGxvYzpcbiIsIGNvZGUpOworCisgICAgSGFzaE1hcDxJbnN0Kiwg
UmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7CisKKyAgICBSZWdMaXZlbmVzcyBsaXZlbmVzcyhj
b2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBSZWdM
aXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7
CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKworICAgICAgICAgICAgYm9vbCBp
c1JlbGV2YW50ID0gaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSB8fCBpbnN0Lm9wY29kZSA9PSBDb2xk
Q0NhbGw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KSB7CisgICAg
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2V0LnNldChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworCisgICAgICAgICAgICBpZiAo
aXNSZWxldmFudCkKKyAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChSZWdp
c3RlclNldCBzZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywgMj4geworICAg
ICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W2ldID0gVG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygKKyAgICAgICAg
ICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCisgICAgICAgICAgICAgICAgICAgICAgICBB
cmc6OmJ5dGVzKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8gTm93IHRyYW5z
Zm9ybSB0aGUgY29kZS4KKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsK
KyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKworICAgICAg
ICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTaHVmZmxlOiB7
CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVycy5nZXQoJmlu
c3QpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7IGkgKz0g
MykgeworICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW2kgKyAwXTsKKyAg
ICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGluc3QuYXJnc1tpICsgMV07CisgICAgICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndpZHRoKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZWQgcmVnaXN0ZXIgc2V0IGNvbnRhaW5zIHRo
aW5ncyBsaXZlIGFmdGVyIHRoZSBzaHVmZmxlLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8g
ZW1pdFNodWZmbGUoKSB3YW50cyBhIHNjcmF0Y2ggcmVnaXN0ZXIgdGhhdCBpcyBub3QganVzdCBk
ZWFkIGJ1dCBhbHNvIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIGludGVyZmVyZSB3
aXRoIGVpdGhlciBzb3VyY2VzIG9yIGRlc3RpbmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAg
YXV0byBleGNsdWRlUmVnaXN0ZXJzID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBzcmMuZm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAg
ICAgICAgIGRzdC5mb3JFYWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihz
cmMsIGRzdCwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3Rk
OjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFyZzo6R1ApOwor
ICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBnZXRTY3JhdGNo
ZXMoc2V0LCBBcmc6OkZQKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5z
dHMoCisgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUocGFpcnMsIGdw
U2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGluc3Qg
PSBJbnN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CisgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKworICAgICAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IGxpdmVSZWdzID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOworICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1NhdmUgPSBsaXZlUmVnczsKKyAgICAgICAgICAgICAg
ICByZWdzVG9TYXZlLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKKyAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisKKyAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCBwcmVVc2VkID0gcmVnc1RvU2F2ZTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8QXJn
PiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgQXJnIG9yaWdpbmFsUmVzdWx0ID0gcmVzdWx0ID8gaW5zdC5hcmdz
WzFdIDogQXJnKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9yPFNo
dWZmbGVQYWlyPiBwYWlyczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIHNyYyA9
IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEgOiBpKSA6IGkgXTsKKyAgICAgICAg
ICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihzcmMsIGRzdCwg
d2lkdGgpKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGV4Y2x1ZGVSZWdpc3RlcnMgPSBb
Jl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldCh0bXAucmVnKCkpOworICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBzcmMuZm9yRWFjaFRtcEZh
c3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgICAgIGRzdC5mb3JFYWNoVG1w
RmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHByZVVzZWQs
IEFyZzo6R1ApOworICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2gg
PSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpGUCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gQWxzbyBuZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVnaXN0ZXJzLiBEb24n
dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvLyByZWdp
c3Rlci4KKyAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxSZXN1bHQuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5jbGVhcihvcmlnaW5hbFJlc3VsdC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7CisgICAgICAgICAg
ICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgpLCBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5k
KFNodWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0aCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiUHJlLWNhbGwgcGFpcnMgZm9yICIsIGluc3QsICI6ICIsIGxp
c3REdW1wKHBhaXJzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgs
IGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsK
KworICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBk
ZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gZW1pdCBj
b2RlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHBhaXJzLnJlc2l6ZSgw
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7CisgICAgICAg
ICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFy
Zzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFja1Nsb3RzW3N0
YWNrU2xvdEluZGV4KytdOworICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKFNo
dWZmbGVQYWlyKEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBvcmlnaW5hbFJlc3VsdCwgQXJnOjp3
aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZChwYWlyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBncFNj
cmF0Y2ggPSBnZXRTY3JhdGNoZXMobGl2ZVJlZ3MsIEFyZzo6R1ApOworICAgICAgICAgICAgICAg
IGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhsaXZlUmVncywgQXJnOjpGUCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAg
ICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNo
LCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CisKKyAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgICAgICBbJl0gKEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhaW5zdDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJDb2RlIGFmdGVyIGxvd2VyQWZ0ZXJSZWdBbGxvYzpcbiIsIGNvZGUp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2Vy
QWZ0ZXJSZWdBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJMb3dlckFmdGVyUmVnQWxsb2NfaAorI2RlZmluZSBBaXJMb3dlckFm
dGVyUmVnQWxsb2NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGxv
d2VycyBTaHVmZmxlIGFuZCBDb2xkQ0NhbGwgaW5zdHJ1Y3Rpb25zLiBUaGlzIHBoYXNlIGlzIGRl
c2lnbmVkIHRvIGJlIHJ1biBhZnRlciByZWdpc3RlcgorLy8gYWxsb2NhdGlvbi4KKwordm9pZCBs
b3dlckFmdGVyUmVnQWxsb2MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJBZnRl
clJlZ0FsbG9jX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJN
YWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlck1hY3JvcyhDb2RlJiBj
b2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJNYWNyb3MiKTsK
KworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2gg
KGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgICAgICAg
ICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKwor
ICAgICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9IGNvbXB1dGVDQ2FsbGlu
Z0NvbnZlbnRpb24oY29kZSwgdmFsdWUpOworCisgICAgICAgICAgICAgICAgSW5zdCBzaHVmZmxl
QXJndW1lbnRzKFNodWZmbGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyAwIDogMTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0ICsg
aV0pOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKGRl
c3RpbmF0aW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJn
cy5hcHBlbmQoQXJnOjp3aWR0aEFyZyhBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkp
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRJbnN0KGluc3RJbmRleCwgV1RGTW92ZShzaHVmZmxlQXJndW1lbnRzKSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IHdlJ3JlIHVzaW5nIG91ciBvcmlnaW5hbCBjYWxsZWUg
YXJndW1lbnQuCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25zWzBdID0gaW5zdC5hcmdzWzBd
OworCisgICAgICAgICAgICAgICAgLy8gU2F2ZSB3aGVyZSB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rp
b24gcHV0IGl0cyByZXN1bHQuCisgICAgICAgICAgICAgICAgQXJnIHJlc3VsdERzdCA9IHZhbHVl
LT50eXBlKCkgPT0gVm9pZCA/IEFyZygpIDogaW5zdC5hcmdzWzFdOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBk
ZXN0aW5hdGlvbnMpOworCisgICAgICAgICAgICAgICAgVG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0
KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRmxvYXQsIHZhbHVlLCByZXN1bHQsIHJl
c3VsdERzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJ
bmRleCArIDEsIE1vdmVEb3VibGUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgTW92ZTMyLCB2
YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUsIHZhbHVlLCByZXN1bHQsIHJlc3VsdERzdCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCisjZGVmaW5lIEFpckxv
d2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gQWlyIGhhcyBz
b21lIG9wY29kZXMgdGhhdCBhcmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVhbnQgdG8gcmVk
dWNlIHRoZSBhbW91bnQgb2YgbG93LWxldmVsCisvLyBrbm93bGVkZ2UgaW4gdGhlIEIzLT5BaXIg
bG93ZXJpbmcuIFRoZSBjdXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwuCisKK3ZvaWQgbG93ZXJNYWNy
b3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlz
aW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTQxNyw2ICs0MTcsMTQgQEAgTW92ZSBVOkc6UHRyLCBE
Okc6UHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBBZGRyIGFz
IHN0b3JlUHRyCiAKK3g4NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKKyAgICBUbXAsIFRtcAor
ICAgIFRtcCwgQWRkcgorCit4ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0CisgICAgVG1w
LCBUbXAKKyAgICBUbXAsIEFkZHIKKwogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwg
VG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpAQCAtNjgy
LDcgKzY5MCwxOSBAQCBSZXREb3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVybWluYWwK
IAorIyBBIFNodWZmbGUgaXMgYSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9uIG1vdmUu
IEl0IHNpbXVsdGFuZW91c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KKyMgVGhlIG1v
dmVzIGFyZSBzcGVjaWZpZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0aC4gRm9y
IGV4YW1wbGUgeW91IGNhbiByZXF1ZXN0IGEgc3dhcCB0aGlzCisjIHdheToKKyMgICAgIFNodWZm
bGUgJXRtcDEsICV0bXAyLCA2NCwgJXRtcDIsICV0bXAxLCA2NAorY3VzdG9tIFNodWZmbGUKKwog
IyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBk
ZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNoIG11c3Qg
YmUgdGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAorIyBJbnN0cnVjdGlvbnMgdXNl
ZCBmb3IgbG93ZXJpbmcgQyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIgZ2VuZXJh
dGlvbi4gVGhleSBnZXQgbG93ZXJlZCB0bworIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4gVGhlIG9y
aWdpbiBWYWx1ZSBtdXN0IGJlIGEgQ0NhbGxWYWx1ZS4KK2N1c3RvbSBDQ2FsbAorY3VzdG9tIENv
bGRDQ2FsbAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0
ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3
ICs1Miw3IEBAIGNvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGUKICAgICBy
ZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsK
IH0KIAotY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsK
K0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6VHlwZSk7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIz
UHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlh
bGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSA8Y21hdGg+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCisvLyBXZSBkb24ndCBoYXZlIGEgTk9fUkVUVVJOX0RVRV9UT19FWElU
LCBub3Igc2hvdWxkIHdlLiBUaGF0J3MgcmlkaWN1bG91cy4KK3N0YXRpYyBib29sIGhpZGRlblRy
dXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSB7IHJldHVybiB0cnVlOyB9CisKK3N0YXRpYyB2
b2lkIHVzYWdlKCkKK3sKKyAgICBkYXRhTG9nKCJVc2FnZTogdGVzdGIzIFs8ZmlsdGVyPl1cbiIp
OworICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlkKCkpCisgICAgICAg
IGV4aXQoMSk7Cit9CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3BhY2UgSlND
OwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsKKworbmFtZXNwYWNlIHsKKworU3RhdGlj
TG9jayBjcmFzaExvY2s7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2Ug
dGhlIGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBpZiAoISEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjcmFzaExvY2subG9j
aygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgI3gpOyBcCisgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFs
c2UpCisKK1ZNKiB2bTsKKworc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29tcGls
ZShCMzo6UHJvY2VkdXJlJiBwcm9jKQoreworICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2Mu
Y29kZSgpKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jLmNv
ZGUoKSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIp
OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAg
ICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGlsYXRpb24iKSksIHBy
b2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKGNvbnN0IEIzOjpDb21waWxhdGlvbiYgY29kZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4u
LikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5k
UnVuKEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sK
KyAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7
Cit9CisKK3ZvaWQgdGVzdFNpbXBsZSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAg
IENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2Rl
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDQy
KSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKKy8vIFVzZSB0aGlzIHRvIHB1dCBh
IGNvbnN0YW50IGludG8gYSByZWdpc3RlciB3aXRob3V0IEFpciBiZWluZyBhYmxlIHRvIHNlZSB0
aGUgY29uc3RhbnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBsb2FkQ29uc3RhbnRJbXBs
KEJhc2ljQmxvY2sqIGJsb2NrLCBUIHZhbHVlLCBCMzo6QWlyOjpPcGNvZGUgbW92ZSwgVG1wIHRt
cCwgVG1wIHNjcmF0Y2gpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbG9jazsKKyAgICBzdGF0
aWMgc3RkOjptYXA8VCwgVCo+KiBtYXA7IC8vIEknbSBub3QgbWVzc2luZyB3aXRoIEhhc2hNYXAn
cyBwcm9ibGVtcyB3aXRoIGludGVnZXJzLgorCisgICAgTG9ja0hvbGRlciBsb2NrZXIobG9jayk7
CisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IG5ldyBzdGQ6Om1hcDxULCBUKj4oKTsKKwor
ICAgIGlmICghbWFwLT5jb3VudCh2YWx1ZSkpCisgICAgICAgICgqbWFwKVt2YWx1ZV0gPSBuZXcg
VCh2YWx1ZSk7CisKKyAgICBUKiBwdHIgPSAoKm1hcClbdmFsdWVdOworICAgIGJsb2NrLT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikp
LCBzY3JhdGNoKTsKKyAgICBibG9jay0+YXBwZW5kKG1vdmUsIG51bGxwdHIsIEFyZzo6YWRkcihz
Y3JhdGNoKSwgdG1wKTsKK30KKwordm9pZCBsb2FkQ29uc3RhbnQoQmFzaWNCbG9jayogYmxvY2ss
IGludHB0cl90IHZhbHVlLCBUbXAgdG1wKQoreworICAgIGxvYWRDb25zdGFudEltcGw8aW50cHRy
X3Q+KGJsb2NrLCB2YWx1ZSwgTW92ZSwgdG1wLCB0bXApOworfQorCit2b2lkIGxvYWREb3VibGVD
b25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgZG91YmxlIHZhbHVlLCBUbXAgdG1wLCBUbXAgc2Ny
YXRjaCkKK3sKKyAgICBsb2FkQ29uc3RhbnRJbXBsPGRvdWJsZT4oYmxvY2ssIHZhbHVlLCBNb3Zl
RG91YmxlLCB0bXAsIHNjcmF0Y2gpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgp
Cit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywg
VG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAg
aW50MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihi
YXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86
OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykp
OworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6
cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGlu
Z3NbNV07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6
OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDMpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0g
PT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnQoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUklu
Zm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdU
MikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChy
b290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwg
VG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxl
LCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJl
Z1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsK
KyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOwor
ICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNyk7Cit9
CisKK3ZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUklu
Zm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdU
MikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChy
b290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwg
VG1wKEdQUkluZm86OnJlZ1Q3KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxl
LCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVn
VDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwK
KyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikp
OworCisgICAgaW50MzJfdCB0aGluZ3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsK
KyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOwor
ICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNyk7Cit9
CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVSb3RhdGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUg
cHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJl
Z1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAg
aW50MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihi
YXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50
MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVCcm9hZGNhc3QoKQoreworICAg
IEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChy
b290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwg
VG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJ
bmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVn
VDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2Us
IDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90
KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2Us
IDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFw
cGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAg
ICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNv
bXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7Cisg
ICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAg
ICBDSEVDSyh0aGluZ3NbM10gPT0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVCcm9hZGNhc3RB
bGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHBy
b2MuY29kZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0
eU9yZGVyKEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMzUpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDE7CisgICAgZm9yIChSZWcgcmVn
IDogcmVncykgeworICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpyZWdUMCkpCisgICAg
ICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgY291bnQrKywgVG1wKHJlZykpOworICAgIH0KKyAg
ICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZv
ciAoUmVnIHJlZyA6IHJlZ3MpIHsKKyAgICAgICAgaWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVn
VDApKQorICAgICAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KHJlZyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisgICAgfQorCisgICAgU3RhY2tT
bG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXpl
KCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkp
OworCisgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBU
bXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBi
YXNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgewor
ICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkg
KiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAg
ICBmb3IgKGludDMyX3QgdGhpbmcgOiB0aGluZ3MpCisgICAgICAgIENIRUNLKHRoaW5nID09IDM1
KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdCgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxv
YWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAo
R1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51
bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJ
bmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDYp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MyksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisK
KyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjph
ZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjph
ZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVv
ZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisg
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAg
ICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAg
IENIRUNLKHRoaW5nc1s0XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAg
Q0hFQ0sodGhpbmdzWzZdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJl
IHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpy
ZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
NywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChH
UFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKwor
ICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpH
UCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFk
ZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFk
ZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9m
KGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhp
bmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAg
ICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAg
IENIRUNLKHRoaW5nc1syXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMik7CisgICAg
Q0hFQ0sodGhpbmdzWzRdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAzKTsKKyAgICBD
SEVDSyh0aGluZ3NbNl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDQpOworfQorCit2
b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJCYWNrd2FyZCgpCit7CisgICAgLy8gTk9URTog
VGhpcyB0ZXN0IHdhcyBteSBvcmlnaW5hbCBhdHRlbXB0IGF0IFRyZWVTaGlmdEJhY2t3YXJkIGJ1
dCBtaXN0YWtlcyB3ZXJlIG1hZGUuIFNvLCB0aGlzCisgICAgLy8gZW5kcyB1cCBiZWluZyBqdXN0
IGEgd2VpcmQgdGVzdC4gQnV0IHdlaXJkIHRlc3RzIGFyZSB1c2VmdWwsIHNvIEkga2VwdCBpdC4K
KyAgICAKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAz
LCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQ
UkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpy
ZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOworICAgIHJvb3QtPmFwcGVu
ZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJ
bmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
NyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzhdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFy
Zzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFy
Zzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDgpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSA4KTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gNyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDcpOworICAgIENIRUNL
KHRoaW5nc1s1XSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7CisgICAgQ0hFQ0so
dGhpbmdzWzddID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlTXVsdGlwbGVTaGlmdHMoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRt
cChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5m
bzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAg
IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFy
Zzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVv
Zih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsK
KworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7
CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsK
KyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDEpOwor
fQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1Qy
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAg
IGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBwZW5kKAor
ICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwg
VG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAg
IGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIo
YmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIo
YmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9v
dC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVD
SyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAz
KTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIp
OworICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMik7
CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRl
V2l0aExvbmdGcmluZ2UoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChy
b290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJ
bmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNl
LCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNl
LCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAw
LCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzFd
ID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9
PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86
OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykp
OworICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgcm9vdC0+YXBw
ZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdU
NSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsK
KworICAgIGludDMyX3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJn
OjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lz
ZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDIpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSA2KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0g
PT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxl
U2hpZnRBbmRSb3RhdGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENv
bnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChy
b290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJ
bmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86
OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiks
IEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSks
IEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAg
IAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhp
bmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDQpOworICAgIENIRUNLKHRoaW5n
c1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQgdGVzdFNo
dWZmbGVTaGlmdEFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiYgcmVncyA9IHJl
Z3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAocmVnc1tpXSkpOwor
ICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVsbHB0cik7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZm
bGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpKTsKKworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90
KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2Vk
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNr
KHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGlu
Z3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQ
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGludDMyX3QpKSk7Cisg
ICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM1KTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hF
Q0sodGhpbmdzW2ldID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgLSAxKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZUFsbFJlZ3MoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVn
PiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAo
cmVnc1tpXSkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVs
bHB0cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKyAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVncy5s
YXN0KCkpLCBUbXAocmVnc1swXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAg
ICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiBy
ZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYp
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
WzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3RhY2so
c2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6
OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
KTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNSArIHN0YXRpY19jYXN0PGludDMyX3Q+KHJl
Z3Muc2l6ZSgpKSAtIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUo
KTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQz
Ml90PihpKSAtIDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcDY0KCkKK3sKKyAg
ICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMSkp
OworICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwg
VG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxl
LCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVn
VDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpy
ZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7
CisKKyAgICBpbnQ2NF90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFy
Zzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXpl
b2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRy
KGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50
NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdz
LCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBsbCk7
CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNL
KHRoaW5nc1syXSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbM10g
PT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaW1wbGVTaGlm
dDY0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDUwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIHJvb3QtPmFw
cGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAor
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0aGluZ3NbNV07CisgICAgVG1w
IGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRk
cihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGlu
dDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5n
cywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwp
OworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA0MDAwMDAw
MDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVN3YXBNaXhlZFdpZHRoKCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
MSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BS
SW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAwMDAwMDAwMDBs
bCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVm
ZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0
KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1s0XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBz
aXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjph
ZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2Yo
aW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMDAwMDBs
bCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENI
RUNLKHRoaW5nc1syXSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3Nb
M10gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDMwMDAwMDAwMDAwMDAwMDAwbGwpKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAy
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
MykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BS
SW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxw
dHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAg
IGludDY0X3QgdGhpbmdzWzVdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2
NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQ2NF90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBB
cmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAK
KyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5n
c1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMjAw
MDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMwMDAwMDAwMDAwMDAw
MDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAg
ICBDSEVDSyh0aGluZ3NbNF0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDQwMDAwMDAwMDAwMDAw
MDAwbGwpKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkKK3sKKyAgICBCMzo6
UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50
MzJfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVtb3J5WzFdID0gMzY7
CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25z
dGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICByb290
LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50
MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVv
ZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90
IHRoaW5nc1syXTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAg
IAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhp
bmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1v
cnlbMF0gPT0gMzUpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVTaGlmdE1lbW9yeUxvbmcoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAg
ICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBU
bXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUs
IG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwg
MCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAwICog
c2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyks
IDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDEgKiBzaXplb2YoaW50MzJfdCkp
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOworCisgICAgaW50MzJfdCB0aGluZ3NbM107CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiks
IEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAg
IAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhp
bmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMl0gPT0gMzYpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyKTsKKyAgICBDSEVDSyhtZW1v
cnlbMV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkK
K3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OworCisgICAgaW50MzJfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7CisgICAgbWVt
b3J5WzFdID0gMzY7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRl
cihBcmc6OkdQKTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJv
b3QsIGkgKyAxLCBUbXAocmVnc1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYg
c2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCks
IDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAq
IHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDAp
LCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisg
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDMyX3Qp
KSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5z
aXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgICAgIE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3Nb
aV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMzYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdz
LnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4oaSkpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAxKTsKKyAgICBDSEVDSyhtZW1vcnlb
MV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzNjQoKQor
eworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7
CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAw
MGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBWZWN0b3I8UmVn
PiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICByZWdzLnJlbW92ZUZp
cnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUu
YWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAwMDAwbGws
IFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
UHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0g
cm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAg
ICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVv
ZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAg
ICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGlu
dDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXpl
b2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVn
c1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5h
cHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGg2NCkpOworCisgICAgVmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFk
ZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIH0KKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAg
IENIRUNLKHRoaW5nc1sxXSA9PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09
IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyht
ZW1vcnlbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUw
MDAwMDAwMDAwMDBsbCk7Cit9CisKK2ludDY0X3QgY29tYmluZUhpTG8oaW50NjRfdCBoaWdoLCBp
bnQ2NF90IGxvdykKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAg
ICAgIGludDMyX3QgaGFsdmVzWzJdOworICAgIH0gdTsKKyAgICB1LnZhbHVlID0gaGlnaDsKKyAg
ICB1LmhhbHZlc1swXSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGxvdyk7CisgICAgcmV0dXJuIHUu
dmFsdWU7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFdpZHRo
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAw
MDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9y
PFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1v
dmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBj
b2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgp
OyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAw
MGxsLCBUbXAocmVnc1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZs
ZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisg
ICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBz
aXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVv
ZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICog
c2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAg
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1w
KHJlZ3NbMV0pLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc2h1
ZmZsZS5hcHBlbmQoCisgICAgICAgICAgICBUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSks
CisgICAgICAgICAgICAoaSAmIDEpID8gQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpIDogQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4g
dGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7
ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBudWxscHRy
LCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5k
KFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09
IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0YXRpY19jYXN0PHVp
bnQzMl90PigzNjAwMDAwMDAwMDAwMGxsKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHN0YXRpY19jYXN0
PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsOworICAgICAgICBDSEVDSyh0aGluZ3NbaV0g
PT0gKChpICYgMSkgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpIDogdmFsdWUpKTsKKyAg
ICB9CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IGNvbWJpbmVIaUxvKDM1MDAwMDAwMDAwMDAwbGws
IDEwMDAwMDAwMDAwMDBsbCkpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAw
MGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMy
X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2Owor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpLAorCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50MzJfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAq
IHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1syXTsKKyAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICog
c2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDM2KTsKKyAgICBD
SEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDIpOworICAgIENI
RUNLKG1lbW9yeVsxXSA9PSAzNSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnk2
NCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNv
ZGUoKTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAw
MDAwMDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEw
MDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDIwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVn
VDIpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAg
ICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAor
ICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwK
KyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3QgdGhp
bmdzWzJdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFk
ZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAg
cm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9
PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMTAwMDAwMDAwMDAw
MGxsKTsKKyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVD
SyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVS
b3RhdGVNZW1vcnlNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAg
Q29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAg
bWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAw
MDAwMGxsOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVn
VDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9y
eSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAq
IHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwK
KyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6
ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEg
KiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAg
ICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBU
bXAoR1BSSW5mbzo6cmVnVDApLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkp
OworCisgICAgaW50NjRfdCB0aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChB
cmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisg
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAwMDAwMDAwMDAwMGxsKSk7CisgICAgQ0hF
Q0sobWVtb3J5WzBdID09IDIwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09
IGNvbWJpbmVIaUxvKDM2MDAwMDAwMDAwMDAwbGwsIDM1MDAwMDAwMDAwMDAwbGwpKTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0X3Qg
bWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVtb3J5
WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdzSW5Q
cmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUkluZm86
OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0pKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSksIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoCisg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1swXSks
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAg
ICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAgICAgQXJn
OjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAgICAg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIHJlZ3MubGFzdCgpLCByZWdz
WzBdLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChy
ZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsK
KworICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisK
KyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVncy5zaXplKCkp
ICogMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMzYwMDAwMDAwMDAw
MDBsbCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEwMDAw
MDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDEwMDAwMDAwMDAwMDBsbCk7Cisg
ICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RT
aHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1l
bW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsx
XSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJp
b3JpdHlPcmRlcihBcmc6OkdQKTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpy
ZWdUMCkpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENv
bnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAg
ICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICByZWdzLmxhc3QoKSwgcmVnc1sw
XSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVn
c1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisK
KyAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisgICAg
ICAgICAgICBNb3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCBpICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisg
ICAgQ0hFQ0sodGhpbmdzWzBdID09IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxp
bnQ2NF90PihyZWdzLnNpemUoKSkgKiAxMDAwMDAwMDAwMDAwbGwpKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDM2MDAwMDAwMDAwMDAwbGwpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgQ0hFQ0so
dGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsKTsK
KyAgICBDSEVDSyhtZW1vcnlbMF0gPT0gY29tYmluZUhpTG8oMzUwMDAwMDAwMDAwMDBsbCwgMTAw
MDAwMDAwMDAwMGxsKSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwp
OworfQorCit2b2lkIHRlc3RTaHVmZmxlU3dhcERvdWJsZSgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDEs
IFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERv
dWJsZUNvbnN0YW50KHJvb3QsIDIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgVG1wKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDMsIFRtcChGUFJJbmZvOjpm
cFJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJv
b3QsIDQsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
cm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoRlBS
SW5mbzo6ZnBSZWdUMiksIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAorICAgICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRtcChGUFJJbmZvOjpm
cFJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGRvdWJsZSB0aGlu
Z3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRt
cChGUFJJbmZvOjpmcFJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoZG91YmxlKSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBS
ZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBBcmc6OmFk
ZHIoYmFzZSwgMiAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3Vi
bGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBz
aXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJl
dDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNl
dCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDQpOworICAgIENIRUNL
KHRoaW5nc1szXSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0RG91YmxlKCkKK3sK
KyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkRG91Ymxl
Q29uc3RhbnQocm9vdCwgMSwgVG1wKEZQUkluZm86OmZwUmVnVDApLCBUbXAoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMiwgVG1wKEZQUkluZm86OmZwUmVn
VDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwg
MywgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2Fk
RG91YmxlQ29uc3RhbnQocm9vdCwgNCwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDApKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIs
CisgICAgICAgIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZG91YmxlIHRoaW5nc1s0XTsKKyAg
ICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBi
YXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86
OmZwUmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgQXJn
OjphZGRyKGJhc2UsIDEgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
RG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6YWRkcihiYXNlLCAy
ICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0
ciwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihkb3Vi
bGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDMpOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHRhc2tzLmFwcGVuZCggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
WyZdICgpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRlc3Q7ICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coI3Rlc3Qg
IjogT0shXG4iKTsgICBcCisgICAgICAgICAgICAgICAgfSkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgdm0gPSAmVk06
OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKworICAgIERlcXVlPFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQoKT4+PiB0YXNrczsKKworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25zdCBj
aGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhZmlsdGVyIHx8ICEhc3Ry
Y2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9OworCisgICAgUlVOKHRlc3RTaW1wbGUo
KSk7CisgICAgCisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgpKTsKKyAgICBSVU4odGVz
dFNodWZmbGVTaW1wbGVTaGlmdCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVMb25nU2hpZnQoKSk7
CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkpOworICAgIFJVTih0ZXN0
U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVCcm9hZGNh
c3QoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygpKTsKKyAgICBSVU4o
dGVzdFNodWZmbGVUcmVlU2hpZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0QmFj
a3dhcmQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJCYWNrd2FyZCgpKTsK
KyAgICBSVU4odGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpKTsKKyAgICBSVU4odGVzdFNodWZm
bGVSb3RhdGVXaXRoRnJpbmdlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25n
RnJpbmdlKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlm
dEFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlQWxsUmVncygpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVTaW1wbGVTd2FwNjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxl
U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVTaGlmdE1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hp
ZnRNZW1vcnkoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlMb25nKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpKTsKKyAgICBSVU4odGVzdFNodWZm
bGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1lbW9y
eUFsbFJlZ3NNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSgp
KTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnk2NCgpKTsKKyAgICBSVU4odGVzdFNo
dWZmbGVSb3RhdGVNZW1vcnlNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVJvdGF0
ZU1lbW9yeUFsbFJlZ3M2NCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxS
ZWdzTWl4ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTd2FwRG91YmxlKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNoaWZ0RG91YmxlKCkpOworCisgICAgaWYgKHRhc2tzLmlzRW1wdHko
KSkKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIExvY2sgbG9jazsKKworICAgIFZlY3RvcjxUaHJl
YWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEg
OiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgeworICAgICAgICB0aHJlYWRz
LmFwcGVuZCgKKyAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAidGVz
dGIzIHRocmVhZCIsCisgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4gdGFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2tz
LnRha2VGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICB0YXNrLT5ydW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pKTsKKyAgICB9CisKKyAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDog
dGhyZWFkcykKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBj
cmFzaExvY2subG9jaygpOworfQorCit9IC8vIGFub255bW9pcyBuYW1lc3BhY2UKKworI2Vsc2Ug
Ly8gRU5BQkxFKEIzX0pJVCkKKworc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQoreworICAg
IGRhdGFMb2coIkIzIEpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGNv
bnN0IGNoYXIqIGZpbHRlciA9IG51bGxwdHI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2Fz
ZSAxOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFyZ3Zb
MV07CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBydW4oZmlsdGVyKTsKKyAgICByZXR1cm4gMDsK
K30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269013</attachid>
            <date>2016-01-14 15:02:20 -0800</date>
            <delta_ts>2016-01-14 16:09:51 -0800</delta_ts>
            <desc>the ptach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>208590</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxNi0wMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFpciBuZWVkcyBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbnN0cnVjdGlvbiBjYWxsZWQg
U2h1ZmZsZS4gU2h1ZmZsZSBhbGxvd3MgeW91IHRvIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0KKyAg
ICAgICAgbXVsdGlwbGUgbW92ZXMgdG8gcGVyZm9ybSBhcmJpdHJhcnkgcGVybXV0YXRpb25zIG92
ZXIgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuIFdlIGNhbGwgdGhlc2UKKyAgICAgICAgcm90YXRpb25z
LiBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSAic2hpZnRzIiwgbGlrZSAoYSA9PiBiLCBi
ID0+IGMpOiBhZnRlciB0aGUgc2hpZnQsCisgICAgICAgIGMgd2lsbCBoYXZlIGIncyBvbGQgdmFs
dWUsIGIgd2lsbCBoYXZlIGEncyBvbGQgdmFsdWUsIGFuZCBhIHdpbGwgYmUgdW5jaGFuZ2VkLiBT
aGlmdHMgY2FuCisgICAgICAgIHVzZSBpbW1lZGlhdGVzIGFzIHRoZWlyIHNvdXJjZS4KKworICAg
ICAgICBTaHVmZmxlIGlzIGFkZGVkIGFzIGEgY3VzdG9tIGluc3RydWN0aW9uLCBzaW5jZSBpdCBo
YXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBJdAorICAgICAgICB0YWtlcyBhbnkg
bnVtYmVyIG9mIHRyaXBsZXRzIG9mIGFyZ3VtZW50cywgd2hlcmUgZWFjaCB0cmlwbGV0IGRlc2Ny
aWJlcyBvbmUgbWFwcGluZyBvZiB0aGUKKyAgICAgICAgc2h1ZmZsZS4gRm9yIGV4YW1wbGUsIHRv
IHJlcHJlc2VudCAoYSA9PiBiLCBiID0+IGMpLCB3ZSBtaWdodCBzYXk6CisKKyAgICAgICAgICAg
IFNodWZmbGUgJWEsICViLCA2NCwgJWIsICVjLCA2NAorCisgICAgICAgIE5vdGUgdGhlICI2NCJz
LCB0aG9zZSBhcmUgd2lkdGggYXJndW1lbnRzIHRoYXQgZGVzY3JpYmUgaG93IG1hbnkgYml0cyBv
ZiB0aGUgcmVnaXN0ZXIgYXJlCisgICAgICAgIGJlaW5nIG1vdmVkLiBFYWNoIHRyaXBsZXQgaXMg
cmVmZXJyZWQgdG8gYXMgYSAic2h1ZmZsZSBwYWlyIi4gV2UgY2FsbCBpdCBhIHBhaXIgYmVjYXVz
ZSB0aGUKKyAgICAgICAgbW9zdCByZWxldmFudCBwYXJ0IG9mIGl0IGlzIHRoZSBwYWlyIG9mIHJl
Z2lzdGVycyBvciBtZW1yb3kgbG9jYXRpb25zIChpLmUuICVhLCAlYiBmb3JtIG9uZQorICAgICAg
ICBvZiB0aGUgcGFpcnMgaW4gdGhlIGV4YW1wbGUpLiBGb3IgR1AgYXJndW1lbnRzLCB0aGUgd2lk
dGggZm9sbG93cyBaRGVmIHNlbWFudGljcy4KKworICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSB3
aWxsIGJlIGFibGUgdG8gdXNlIFNodWZmbGUgZm9yIGEgbG90IG9mIHRoaW5ncy4gVGhpcyBwYXRj
aCBpcyBtb2Rlc3QgYWJvdXQKKyAgICAgICAgaG93IHRvIHVzZSBpdDoKKworICAgICAgICAtIEMg
Y2FsbGluZyBjb252ZW50aW9uIGFyZ3VtZW50IG1hcnNoYWxsaW5nLiBQcmV2aW91c2x5IHdlIHVz
ZWQgbW92ZSBpbnN0cnVjdGlvbnMuIEJ1dCB0aGF0J3MKKyAgICAgICAgICBwcm9ibGVtYXRpYyBz
aW5jZSBpdCBpbnRyb2R1Y2VzIGFydGlmaWNpYWwgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIGFy
Z3VtZW50IHJlZ2lzdGVycyBhbmQKKyAgICAgICAgICB0aGUgaW5wdXRzLiBVc2luZyBTaHVmZmxl
IHJlbW92ZXMgdGhhdCBpbnRlcmZlcmVuY2UuIFRoaXMgaGVscHMgYSBiaXQuCisKKyAgICAgICAg
LSBDb2xkIEMgY2FsbHMuIFRoaXMgaXMgd2hhdCByZWFsbHkgbW90aXZhdGVkIG1lIHRvIHdyaXRl
IHRoaXMgcGF0Y2guIElmIHdlIGhhdmUgYSBDIGNhbGwgb24KKyAgICAgICAgICBhIGNvbGQgcGF0
aCwgdGhlbiB3ZSB3YW50IGl0IHRvIGFwcGVhciB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGxp
a2UgaXQgZG9lc24ndCBjbG9iYmVyCisgICAgICAgICAgYW55IHJlZ2lzdGVycy4gT25seSBhZnRl
ciByZWdpc3RlciBhbGxvY2F0aW9uIHNob3VsZCB3ZSBoYW5kbGUgdGhlIGNsb2JiZXJpbmcgYnkg
c2ltcGx5CisgICAgICAgICAgc2F2aW5nIGFsbCBvZiB0aGUgbGl2ZSB2b2xhdGlsZSByZWdpc3Rl
cnMgdG8gdGhlIHN0YWNrLiBJZiB5b3UgaW1hZ2luZSB0aGUgc2F2aW5nIGFuZCB0aGUKKyAgICAg
ICAgICBhcmd1bWVudCBtYXJzaGFsbGluZywgeW91IGNhbiBzZWUgaG93IGJlZm9yZSB0aGUgY2Fs
bCwgd2Ugd2FudCB0byBoYXZlIGEgU2h1ZmZsZSB0aGF0IGRvZXMKKyAgICAgICAgICBib3RoIG9m
IHRob3NlIHRoaW5ncy4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGFyZ3VtZW50IG1hcnNoYWxsaW5n
IHdhcyBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgIHNhdmluZywgdGhlbiB3ZSdkIHN0aWxs
IGFwcGVhciB0byBjbG9iYmVyIGFyZ3VtZW50IHJlZ2lzdGVycy4gRG9pbmcgdGhlbSB0b2dldGhl
ciBhcyBvbmUKKyAgICAgICAgICBTaHVmZmxlIG1lYW5zIHRoYXQgdGhlIGNvbGQgY2FsbCBkb2Vz
bid0IGFwcGVhciB0byBldmVuIGNsb2JiZXIgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKworICAg
ICAgICBVbmZvcnR1bmF0ZWx5LCBJIHdhcyB3cm9uZyBhYm91dCBjb2xkIEMgY2FsbHMgYmVpbmcg
dGhlIGRvbWluYW50IHByb2JsZW0gd2l0aCBvdXIgcmVnaXN0ZXIKKyAgICAgICAgYWxsb2NhdG9y
IHJpZ2h0IG5vdy4gRml4aW5nIHRoaXMgcmV2ZWFsZWQgb3RoZXIgcHJvYmxlbXMgaW4gbXkgY3Vy
cmVudCB0dW5pbmcgYmVuY2htYXJrLAorICAgICAgICBPY3RhbmUvZW5jcnlwdC4gTm9uZXRoZWxl
c3MsIHRoaXMgaXMgYSBzbWFsbCBzcGVlZC11cCBhY3Jvc3MgdGhlIGJvYXJkLCBhbmQgZ2l2ZXMg
dXMgc29tZQorICAgICAgICBmdW5jdGlvbmFsaXR5IHdlIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQg
b3RoZXIgb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6aXNYODZf
NjQpOgorICAgICAgICAoSlNDOjppc0lPUyk6CisgICAgICAgIChKU0M6Om9wdGltaXplRm9yQVJN
djdJRElWU3VwcG9ydGVkKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Onplcm9FeHRl
bmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN3YXAz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3ZlQ29uZGl0aW9u
YWxseTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlNjRXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN3YXA2NCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlNjRUb0RvdWJsZSk6CisgICAg
ICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OnhjaGdsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjp4Y2hnbF9ybSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6eGNoZ3FfcnIpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OnhjaGdxX3JtKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZsX3Jy
KToKKyAgICAgICAgKiBiMy9CM0NDYWxsVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpDb21waWxhdGlvbik6Cisg
ICAgICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6fkNvbXBpbGF0aW9uKToKKyAgICAgICAgKiBi
My9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgIChKU0M6OkIzOjpDb21waWxhdGlvbjo6Y29kZSk6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3Jl
YXRlU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJzaGFsbENDYWxsQXJndW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzT3BhcXVlQnlwcm9kdWN0cy5oOgorICAgICAgICAo
SlNDOjpCMzo6T3BhcXVlQnlwcm9kdWN0czo6Y291bnQpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6aXNBcmdW
YWxpZEZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6aXNBcmdW
YWxpZEZvclJlcCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6aXNTdGFja01lbW9yeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnVzZXNU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmNhblJlcHJlc2VudCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNDb21wYXRpYmxlVHlwZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6ZHVtcCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNo
VHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNXYXJtVXNlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpjb29sZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzRWFybHlVc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW1QdHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpZHRoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbTY0KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NvbWVJbW0pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNNZW1vcnkpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzUmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
aXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1dpZHRoQXJnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FsaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpoYXNPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6d2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1BUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVHlwZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1w
RmFzdCk6CisgICAgICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5zdHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNp
Y0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
YXBwZW5kKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24pOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpjQ2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OmJ1aWxkQ0NhbGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24u
aDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6cHJvYyk6CisgICAgICAgICogYjMvYWlyL0FpckN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm0pOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbEN1c3RvbTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlNodWZmbGVDdXN0b206OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ3Vz
dG9tLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBhdGNoQ3VzdG9tOjpmb3JFYWNoQXJnKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGF0Y2hDdXN0b206OmdlbmVyYXRlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Q0NhbGxDdXN0b206OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDQ2FsbEN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDQ2FsbEN1c3RvbTo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDQ2FsbEN1c3RvbTo6aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2xkQ0NhbGxDdXN0b206OmZvckVhY2hBcmcpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpTaHVmZmxlQ3VzdG9tOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm1TdGF0aWMpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTaHVmZmxlQ3VzdG9tOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlNodWZmbGVDdXN0b206Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKToKKyAgICAgICAgKiBi
My9haXIvQWlyRW1pdFNodWZmbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U2h1ZmZsZVBhaXI6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjplbWl0U2h1ZmZsZSk6
CisgICAgICAgICogYjMvYWlyL0FpckVtaXRTaHVmZmxlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTaHVmZmxlUGFpcjo6U2h1ZmZsZVBhaXIpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTaHVmZmxlUGFpcjo6c3JjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U2h1ZmZsZVBh
aXI6OmRzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNodWZmbGVQYWlyOjp3aWR0aCk6Cisg
ICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
cHJlcGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5oOgor
ICAgICAgICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnNlcnRpb25TZXQ6Omluc2VydEluc3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0
Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBi
My9haXIvQWlySW5zdC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6YXBwZW5kKToKKyAgICAgICAgKiBi
My9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpBaXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJNYWNyb3MpOgorICAgICAgICAq
IGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL3Rlc3RhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0
dXJuSXNTdHVwaWQpOgorICAgICAgICAodXNhZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aW52b2tlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaW1w
bGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb2FkQ29uc3RhbnRJbXBsKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG9h
ZERvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1w
bGVTd2FwKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVTaGlmdCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlTG9uZ1NoaWZ0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6dGVzdFNodWZmbGVCcm9hZGNhc3RBbGxSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
dGVzdFNodWZmbGVUcmVlU2hpZnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZs
ZVRyZWVTaGlmdEJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVU
cmVlU2hpZnRPdGhlckJhY2t3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZm
bGVNdWx0aXBsZVNoaWZ0cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90
YXRlV2l0aEZyaW5nZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRl
V2l0aExvbmdGcmluZ2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZU11bHRp
cGxlUm90YXRlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2hpZnRBbmRS
b3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlQWxsUmVncyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlU2ltcGxlU3dhcDY0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaW1wbGVTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6dGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OnRlc3RTaHVmZmxlU2hpZnRNaXhlZFdpZHRoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVz
dFNodWZmbGVTaGlmdE1lbW9yeSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxl
U2hpZnRNZW1vcnlMb25nKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dGVzdFNodWZmbGVTaGlm
dE1lbW9yeUFsbFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0
TWVtb3J5QWxsUmVnczY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Y29tYmluZUhpTG8pOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnc01peGVk
V2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlTWVtb3J5NjQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeU1peGVkV2lkdGgpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01p
eGVkV2lkdGgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVN3YXBEb3VibGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0RG91YmxlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6cnVuKToKKyAgICAgICAgKHJ1bik6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxTaW1w
bGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxSYXJlKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDYWxsUmFyZUxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxTaW1wbGVQdXJl
KToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDEtMTMgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDTWFrZV0gRG8gbm90IHVz
ZSBMTFZNIHN0YXRpYyBsaWJyYXJpZXMgZm9yIEZUTCBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsMTEgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyQXJnLmNwcAogICAgIGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAogICAgIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCisgICAg
YjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICBiMy9haXIvQWlyQ29kZS5jcHAK
KyAgICBiMy9haXIvQWlyQ3VzdG9tLmNwcAogICAgIGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29k
ZS5jcHAKKyAgICBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCiAgICAgYjMvYWlyL0FpckZpeFBh
cnRpYWxSZWdpc3RlclN0YWxscy5jcHAKICAgICBiMy9haXIvQWlyR2VuZXJhdGUuY3BwCiAgICAg
YjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKQEAgLTgyLDYgKzg1LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAogICAgIGIzL2Fpci9B
aXJJbnN0LmNwcAogICAgIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAK
KyAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAorICAgIGIzL2Fpci9BaXJMb3dl
ck1hY3Jvcy5jcHAKICAgICBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAogICAgIGIz
L2Fpci9BaXJQaGFzZVNjb3BlLmNwcAogICAgIGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTA2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9
ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY2MTgzNDcxQzQ1RjY3QTAwNzI0
NTBCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEY5MzI3NUQxQzIwQkYzQTAwQ0Y2
NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBG
Rjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIz
MURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00MDAsNiArNDAxLDIxIEBACiAJCTBG
NUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8q
IEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRU
aHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkg
LyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4
MzIwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9Owor
CQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYxODMyMTFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggKi87IH07CisJCTBGNjE4MzJC
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1
c3RvbS5jcHAgKi87IH07CisJCTBGNjE4MzJDMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1
ZmZsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwICovOyB9OworCQkw
RjYxODMyRDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI0MUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJFbWl0U2h1ZmZsZS5oICovOyB9OworCQkwRjYxODMyRTFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI1MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwICovOyB9OworCQkwRjYxODMyRjFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
TG93ZXJBZnRlclJlZ0FsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmggKi87IH07CisJCTBGNjE4MzMwMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jv
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYx
ODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICovOyB9OworCQkwRjYx
ODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAv
KiBBaXJMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjYxODMzMzFDNDVGMzVDMDA3MjQ1MEIgLyog
QWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi87IH07CisJCTBGNjE4
MzM2MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzM0MUM0NUYzQjYwMDcyNDUw
QiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJMEY2MTgzMzcxQzQ1RjNCNjAwNzI0
NTBCIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMu
aCAqLzsgfTsKKwkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8qIEZvdW5kYXRpb24uZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
MEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkw
RjYxODMzRDFDNDVGNjJBMDA3MjQ1MEIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIy
QTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEY2MTgz
NDUxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzNDQxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3Rh
aXIuY3BwICovOyB9OwogCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi87
IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyB9OwogCQkwRjYyMDE3NzE0M0ZDRDNGMDA2
OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
VmFsdWUuaCAqLzsgfTsKQEAgLTIwNzksNiArMjA5NSwxMyBAQAogLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICov
CisJCTBGNjE4MzQ2MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwg
PSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94
eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRjYxODMzODFDNDVGNjJBMDA3
MjQ1MEI7CisJCQlyZW1vdGVJbmZvID0gdGVzdGFpcjsKKwkJfTsKIAkJMEY5MzI3NUMxQzIwQkYz
QTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1NDIsNiArMjU2NSwyMCBAQAogCQkw
RjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMjAxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBwYXRoID0gYjMv
YWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjE4MzIxMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ0NhbGxpbmdDb252ZW50aW9uLmg7
IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjE4MzIyMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ3VzdG9tLmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYx
ODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRW1pdFNodWZmbGUuY3BwOyBwYXRoID0gYjMvYWly
L0FpckVtaXRTaHVmZmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgz
MjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckVtaXRTaHVmZmxlLmg7IHBhdGggPSBiMy9haXIvQWlyRW1pdFNo
dWZmbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzMjUxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwOyBwYXRoID0gYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmg7IHBh
dGggPSBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlck1hY3Jvcy5jcHA7
IHBhdGggPSBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJNYWNyb3MuaDsgcGF0aCA9IGIz
L2Fpci9BaXJMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYx
ODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyogQWlyT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFpck9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYxODMzNDFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFpck9wY29kZUdlbmVyYXRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2Rl
VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWlyT3Bjb2RlVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MTgzNDMxQzQ1RjYyQTAwNzI0NTBC
IC8qIHRlc3RhaXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IHRlc3RhaXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGNjE4
MzQ0MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IHRlc3RhaXIuY3BwOyBwYXRoID0gYjMvYWlyL3Rlc3RhaXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyog
REZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
YnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrLmg7
IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBw
YXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzM3Miw4ICszNDA5LDggQEAKIAkJNzAxM0NBOEExQjQ5MUE5NDAwQ0FFNjEzIC8q
IEpTSm9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSm9iLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQ
cm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNYXBQ
cm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMzU1ODdEMUM0MTg0
MTkwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBTZXRQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUubHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hcFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IE1h
cFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzAzNTU4N0Yx
QzQxODQ1ODAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU2V0UHJvdG90eXBlLmx1dC5oOyBwYXRoID0gU2V0UHJvdG90eXBlLmx1
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3
QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYXBQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMzU1
ODdGMUM0MTg0NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9vbGVh
bk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTcw
NUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQzMDYsNiArNDM0MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGNjE4MzNC
MUM0NUY2MkEwMDcyNDUwQiAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJMEY2MTgzM0MxQzQ1RjYyQTAwNzI0NTBCIC8qIEZvdW5kYXRpb24uZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY2MTgzM0QxQzQ1RjYyQTAwNzI0NTBCIC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRjkzMjc1MTFDMjBC
Q0JBMDBDRjY1NjQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTQ0MDMsNiAr
NDQ0OSw3IEBACiAJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJ
CQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKIAkJCQkwRjkzMjc1
OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCisJCQkJMEY2MTgzNDMxQzQ1RjYyQTAw
NzI0NTBCIC8qIHRlc3RhaXIgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3OTMsMTMgKzQ4NDAsMTggQEAKIAkJCQkwRkVDODU0
QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8sCiAJCQkJMEZFQzg1NEQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywKIAkJCQkwRkIzODc4QjFCRkJD
NDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGNjE4MzIwMUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAorCQkJCTBGNjE4MzIx
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAqLywKIAkJCQkwRkVD
ODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLywKIAkJCQkwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8sCiAJCQkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAogCQkJCTBGRUM4NTUxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEY2MTgzMjIxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckN1c3RvbS5jcHAgKi8sCiAJCQkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFp
ckN1c3RvbS5oICovLAogCQkJCTBGNDU3MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5h
dGVEZWFkQ29kZS5jcHAgKi8sCiAJCQkJMEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVs
aW1pbmF0ZURlYWRDb2RlLmggKi8sCisJCQkJMEY2MTgzMjMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFp
ckVtaXRTaHVmZmxlLmNwcCAqLywKKwkJCQkwRjYxODMyNDFDNDVCRjA3MDA3MjQ1MEIgLyogQWly
RW1pdFNodWZmbGUuaCAqLywKIAkJCQkyNjJEODVCNDFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4
UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcCAqLywKIAkJCQkyNjJEODVCNTFDMEQ2NTBGMDA2QUNC
NjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggKi8sCiAJCQkJMEY0QzkxNjcxQzJC
M0Q2ODAwNDM0MUE2IC8qIEFpckZpeFNwaWxsU2xvdFpEZWYuaCAqLywKQEAgLTQ4MTgsNiArNDg3
MCwxMCBAQAogCQkJCTI2NzE4QkEyMUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAgKi8sCiAJCQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCiAJCQkJMjY4NEQ0MzcxQzAwMTYxQzAw
ODFENjYzIC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAgKi8sCisJCQkJMEY2MTgzMjYxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovLAorCQkJCTBGNjE4MzI3MUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8sCisJCQkJMEY2MTgzMjgxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAw
Njg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovLAogCQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovLAogCQkJCTBGQjM4NzhEMUJGQkM0
NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLywKQEAgLTQ4NDMsNiArNDg5
OSw3IEBACiAJCQkJMEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oICov
LAogCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCiAJ
CQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggKi8sCisJCQkJMEY2
MTgzNDQxQzQ1RjY2MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICovLAogCQkJKTsKIAkJCW5hbWUg
PSBhaXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTMwMCw2ICs1MzU3LDkgQEAK
IAkJNjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY2MTgzMzIxQzQ1RjM1QzAw
NzI0NTBCIC8qIEFpck9wY29kZS5oICovLAorCQkJCTBGNjE4MzM0MUM0NUYzQjYwMDcyNDUwQiAv
KiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLywKKwkJCQkwRjYxODMzNTFDNDVGM0I2MDA3MjQ1MEIg
LyogQWlyT3Bjb2RlVXRpbHMuaCAqLywKIAkJCQk5OTZCNzMxNTFCREEwNUFBMDAzMzFCODQgLyog
QXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMxNjFCREEwNUFBMDAzMzFCODQg
LyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCAqLywKIAkJCQk5OTZCNzMwNzFCRDlGQTJD
MDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCAqLywKQEAgLTY4OTksNiArNjk1OSw3
IEBACiAJCQkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8q
IFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4MzMxMUM0NUJGMDcw
MDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1Nzcx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjk2MSw2ICs3MDIyLDcgQEAKIAkJCQkwRkVDODUx
NDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NUMxMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjYxODMyRjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyog
QjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxQTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywK
QEAgLTcxNTQsNiArNzIxNiw3IEBACiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDhEMUMwQkQyOTEwMDA1MkJG
QSAvKiBCM1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZE
MDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MTgzMkQx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZH
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNTgsNiArNzMyMSw3IEBACiAJCQkJMEYyQjlD
RUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVy
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYxODMzNjFDNDVGM0I2MDA3MjQ1MEIgLyog
QWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MTFDMENENzBD
MDAwNTJCRkEgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtNzI3NCw2ICs3MzM4LDcgQEAKIAkJCQkw
RkMyMENCQTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MTgzMzcxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzIwQ0I2MTg1MkUyQzYwMEM5RTk1NCAv
KiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ3
ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03NjI4LDYgKzc2OTMsNyBAQAogCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2QzUxNzYxMTgyNzQ4RDAw
NzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4MTFC
ODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjE4MzJBMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJv
bWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0
MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTgsNiArODA4NCw3IEBACiAJCQkJMTQyRTMxM0Mx
MzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RjlGMTRF
RTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkZDRTY5
MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjE4
MzMzMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
ODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBp
biBIZWFkZXJzICovLApAQCAtODA1MCw2ICs4MTE3LDIyIEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAq
LworCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLyA9IHsKKwkJCWlzYSA9
IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRjYxODMzRTFD
NDVGNjJBMDA3MjQ1MEIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgInRlc3RhaXIiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEY2MTgzMzkxQzQ1
RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzM0IxQzQ1RjYyQTAwNzI0NTBC
IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RhaXI7CisJCQlwcm9kdWN0TmFt
ZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY2MTgzNDMxQzQ1RjYyQTAwNzI0
NTBCIC8qIHRlc3RhaXIgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10
eXBlLnRvb2wiOworCQl9OwogCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2gg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi87CkBAIC04MjU3LDYgKzgzNDAsNyBA
QAogCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJNUQ2QjJB
NDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJCQkJMEY5MzI3NEUxQzIwQkNC
QTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovLAorCQkJCTBGNjE4MzM4MUM0NUY2MkEwMDcyNDUwQiAv
KiB0ZXN0YWlyICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8K
QEAgLTg0OTMsNiArODU3NywxNCBAQAogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJ
MEY2MTgzMzkxQzQ1RjYyQTAwNzI0NTBCIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlm
aWxlcyA9ICgKKwkJCQkwRjYxODM0NTFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKKwkJfTsKIAkJMEY5MzI3NEYxQzIwQkNCQTAwQ0Y2NTY0IC8qIFNvdXJjZXMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CkBAIC04Njk3LDYgKzg3ODksNyBAQAogCQkJCTUyQjcxN0I1MUEwNTk3RTEwMDdB
RjRGMyAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkFE
RjU0MUJEMUY0QjgwMEUwNzNDMSAvKiBDb3BpZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2MTgzMzAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTExMTI0NTE5MkZDRTc5MDA1RUUxOEQgLyogQ3Vz
dG9tR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRTNENUYwMUI4RDBCNzMw
MEI4NjhCQiAvKiBEYXRhRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODc0NSw2ICs4ODM4
LDcgQEAKIAkJCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRp
bWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4
MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYw
MEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3MjE2
RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
MzhFMTIxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTg3NjEsNiArODg1NSw3IEBACiAJCQkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3NjE3
OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNjE4MzJDMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1
OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDcyLDYgKzkxNjcs
NyBAQAogCQkJCUUzM0Y1MDg0MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4NDIxQzAwMDQxMzg1NiAv
KiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAz
RkExQjE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjE4MzJFMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVn
QWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMUQxODhFMEZCMDAwMTEwRjE0IC8q
IEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MDEzQ0E4QjFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQwQjdEMUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTIxNCw2ICs5MzEwLDcgQEAKIAkJCQkwRjlENEMwQzFDM0UxQzExMDA2
Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEw
NThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MTgzMkIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJv
ZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwRDFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTkzNjYsNiArOTQ2MywxMSBAQAogLyogRW5kIFBCWFNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9u
ICovCisJCTBGNjE4MzQ3MUM0NUY2N0EwMDcyNDUwQiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICov
ID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGNjE4MzM4
MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovOworCQkJdGFyZ2V0UHJveHkgPSAwRjYxODM0
NjFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OwogCQkw
RjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSAwRjkzMjc0RTFDMjBCQ0JB
MDBDRjY1NjQgLyogZHluYmVuY2ggKi87CkBAIC05NDc3LDYgKzk1NzksNDIgQEAKIAkJCX07CiAJ
CQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY2MTgzM0YxQzQ1RjYyQTAwNzI0NTBCIC8q
IERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhl
Y3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09ERV9TSUdO
X0VOVElUTEVNRU5UU19pb3NfdGVzdGFpciA9IGVudGl0bGVtZW50cy5wbGlzdDsKKwkJCQlQUk9E
VUNUX05BTUUgPSB0ZXN0YWlyOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEY2
MTgzNDAxQzQ1RjYyQTAwNzI0NTBCIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YWlyID0gZW50
aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGNjE4MzQxMUM0NUY2MkEwMDcyNDUwQiAvKiBQcm9m
aWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVj
dXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05f
RU5USVRMRU1FTlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RV
Q1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJ
MEY2MTgzNDIxQzQ1RjYyQTAwNzI0NTBCIC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT0RFX1NJR05fRU5USVRMRU1FTlRTX2lvc190ZXN0YWly
ID0gZW50aXRsZW1lbnRzLnBsaXN0OworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RhaXI7CisJCQl9
OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2
NCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC05OTA2LDYgKzEwMDQ0LDE3IEBACiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5h
bWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjYxODMzRTFDNDVGNjJBMDA3MjQ1MEIgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RhaXIiICovID0g
eworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMg
PSAoCisJCQkJMEY2MTgzM0YxQzQ1RjYyQTAwNzI0NTBCIC8qIERlYnVnICovLAorCQkJCTBGNjE4
MzQwMUM0NUY2MkEwMDcyNDUwQiAvKiBSZWxlYXNlICovLAorCQkJCTBGNjE4MzQxMUM0NUY2MkEw
MDcyNDUwQiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY2MTgzNDIxQzQ1RjYyQTAwNzI0NTBCIC8q
IFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUg
PSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJ
MEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRp
b25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
CShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03Niw2ICs3NiwxNSBAQCBpbmxpbmUgYm9vbCBpc1g4Nl82NCgpCiAjZW5kaWYK
IH0KIAoraW5saW5lIGJvb2wgaXNJT1MoKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBi
b29sIG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKCkKIHsKICAgICByZXR1cm4gaXNBUk12
N0lESVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VBcmNoaXRlY3R1cmVTcGVjaWZpY09wdGlt
aXphdGlvbnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE5NTA2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMTQxMSw2ICsxNDExLDE2IEBAIHB1YmxpYzoKICAgICB9CiAj
ZW5kaWYKIAorICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ycihzcmMsIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgc3dhcDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci54Y2hnbF9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Up
OworICAgIH0KKwogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIo
cmlnaHQsIGxlZnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1NSw2ICs2NTUsMTYgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCisgICAg
dm9pZCBzd2FwNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnhjaGdxX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBz
d2FwNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnhjaGdxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCiAg
ICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDMxLDYgKzE0MzEsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX1hDSEdfRXZHdiwg
c3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZvaWQgeGNoZ2xfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKICNpZiBD
UFUoWDg2XzY0KQogICAgIHZvaWQgeGNoZ3FfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKQEAgLTE0NDEsNiArMTQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBk
c3QpOwogICAgIH0KKworICAgIHZvaWQgeGNoZ3Ffcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cDY0KE9QX1hDSEdfRXZHdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KICNlbmRpZgogCiAg
ICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJldmlzaW9uIDE5NTA2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
OSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVlKCk7CiAKLSAgICBFZmZlY3Rz
IGVmZmVjdHM7CisgICAgRWZmZWN0cyBlZmZlY3RzIHsgRWZmZWN0czo6Zm9yQ2FsbCgpIH07CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKQEAgLTQ3LDcgKzQ3LDYgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgQ0NhbGxW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDQ2Fs
bCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCi0gICAgICAgICwgZWZmZWN0cyhFZmZlY3Rz
Ojpmb3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigp
ID49IDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxh
dGlvbi5jcHAJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1MiwxMiBAQCBDb21waWxhdGlv
bjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1CiAgICAgbV9ieXByb2R1Y3RzID0gcHJvYy5y
ZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCitDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Rz
PiBieXByb2R1Y3RzKQorICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCisgICAgLCBtX2J5cHJvZHVj
dHMoV1RGTW92ZShieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGlsYXRpb246On5Db21waWxhdGlv
bigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJ
KHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsMTEgQEAgY2xhc3MgQ29tcGlsYXRpb24gewog
CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1
cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworCisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBh
bGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0ZSBhIENvbXBpbGF0aW9uLiBJdCdzIGN1cnJlbnRs
eSBvbmx5IHVzZWQgYnkgdGVzdAorICAgIC8vIGNvZGUuIFByb2JhYmx5IGJlc3QgdG8ga2VlcCBp
dCB0aGF0IHdheS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPik7CisgICAgCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2RlKCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTUw
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2lu
Y2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFs
dWUuaCIKICNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgogI2luY2x1ZGUgIkIzQ29tbXV0YXRp
dml0eS5oIgpAQCAtOTksNiArMTAwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggYmxvY2tzIGFyZSBub3QgcmFyZS4K
KyAgICAgICAgbV9mYXN0V29ya2xpc3QucHVzaChtX3Byb2NlZHVyZVswXSk7CisgICAgICAgIHdo
aWxlIChCMzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2Zhc3RXb3JrbGlzdC5wb3AoKSkgeworICAg
ICAgICAgICAgZm9yIChCMzo6RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3IuaXNSYXJlKCkpCisg
ICAgICAgICAgICAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRW
YWx1ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAg
ICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEg
Z29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKQEAgLTEwOCw2ICsxMTgsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgogICAgICAgICAgICAgbV9pbnN0cy5y
ZXNpemUoMCk7CiAKKyAgICAgICAgICAgIG1faXNSYXJlID0gIW1fZmFzdFdvcmtsaXN0LnNhdyhi
bG9jayk7CisKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCkBAIC0x
NTUyLDM3ICsxNTY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludmVydGVkKTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBBcmcgbWFyc2hhbGxDQ2Fs
bEFyZ3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQs
IFZhbHVlKiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBh
cmd1bWVudENvdW50Kys7Ci0gICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgQmFua0luZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKLSAgICAgICAgICAgIFRtcCByZXN1bHQgPSBUbXAo
QmFua0luZm86OnRvQXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudEluZGV4KSk7Ci0gICAgICAgICAg
ICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoaWxkLT50eXBlKCkpLCBpbW1PclRtcChjaGls
ZCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSNp
ZiBDUFUoQVJNNjQpICYmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8gaU9TIGRvZXMgbm90IGZv
bGxvdyB0aGUgQVJNNjQgQUJJIHJlZ2FyZGluZyBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgLy8g
QXJndW1lbnRzIG11c3QgYmUgcGFja2VkLgotICAgICAgICB1bnNpZ25lZCBzbG90U2l6ZSA9IHNp
emVvZlR5cGUoY2hpbGQtPnR5cGUoKSk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0jZWxzZQotICAgICAgICB1
bnNpZ25lZCBzbG90U2l6ZSA9IHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAgICAgQXJnIHJl
c3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ICs9
IHNsb3RTaXplOwotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHRoZSBjb2RlIGZvciBzdG9yaW5n
IHRoZSBhcmd1bWVudCBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBzaWduaWZpY2FudGx5IGVh
c2VzIHRoZQotICAgICAgICAvLyBidXJkZW4gb24gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gSWYg
d2UgY291bGQsIHdlJ2QgaG9pc3QgdGhlc2Ugc3RvcmVzIGFzIGZhciBhcwotICAgICAgICAvLyBw
b3NzaWJsZS4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBoYXNlIHRvIGhvaXN0IHN0b3JlcyBh
cyBoaWdoIGFzIHBvc3NpYmxlIHRvIHJlbGlldmUgcmVnaXN0ZXIgcHJlc3N1cmUuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwNjMKLSAgICAg
ICAgbV9pbnN0cy5sYXN0KCkuaW5zZXJ0KDAsIGNyZWF0ZVN0b3JlKGNoaWxkLCByZXN1bHQpKTsK
LSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgdm9pZCBsb3dl
cigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC0xOTM0
LDE0ICsxOTE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBjYXNlIENDYWxsOiB7CisgICAgICAgIGNhc2UgQjM6OkNDYWxsOiB7CiAgICAg
ICAgICAgICBDQ2FsbFZhbHVlKiBjQ2FsbCA9IG1fdmFsdWUtPmFzPENDYWxsVmFsdWU+KCk7Ci0g
ICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIGNDYWxsLCBBcmc6OnNwZWNpYWwobV9jb2RlLmND
YWxsU3BlY2lhbCgpKSk7CiAKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgLSB3
ZSBoYXZlIGEgc3VwZXIgaW50ZW5zZSBjb250cmFjdCB3aXRoIEFyZzo6Q0NhbGxTcGVjaWFsLiBJ
dCBtaWdodAotICAgICAgICAgICAgLy8gYmUgYmV0dGVyIGlmIHdlIGZhY3RvcmVkIEFpcjo6Q0Nh
bGxTcGVjaWFsIG91dCBvZiB0aGUgQWlyIG5hbWVzcGFjZSBhbmQgbWFkZSBpdCBhIEIzCi0gICAg
ICAgICAgICAvLyB0aGluZy4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDQ1CisgICAgICAgICAgICBJbnN0IGluc3QobV9p
c1JhcmUgPyBBaXI6OkNvbGRDQ2FsbCA6IEFpcjo6Q0NhbGwsIGNDYWxsKTsKIAogICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBhIHRvbiBvZiBmbGV4aWJpbGl0eSByZWdhcmRpbmcgdGhlIGNhbGxlZSBh
cmd1bWVudCwgYnV0IGN1cnJlbnRseSwgd2UgZG9uJ3QKICAgICAgICAgICAgIC8vIHVzZSBpdCB5
ZXQuIEl0IGdldHMgd2VpcmQgZm9yIHJlYXNvbnM6CkBAIC0xOTU0LDQ4ICsxOTMxLDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MTA1MgogICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0Nh
bGwtPmNoaWxkKDApKSk7CiAKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdGVsbCBBaXIgd2hh
dCByZWdpc3RlcnMgdGhpcyBkZWZpbmVzLgotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICAgICAgICAgIGluc3QuYXJncy5hcHBl
bmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMikpOwotICAgICAgICAgICAgaW5zdC5hcmdz
LmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKLQotICAgICAgICAgICAgLy8g
Tm93IG1hcnNoYWxsIHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgd2hlcmUgd2UgaW1wbGVtZW50IHRo
ZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQWZ0ZXIKLSAgICAgICAgICAgIC8vIHRoaXMsIEFpciBk
b2VzIG5vdCBrbm93IHdoYXQgdGhlIGNvbnZlbnRpb24gaXM7IGl0IGp1c3QgdGFrZXMgb3VyIHdv
cmQgZm9yIGl0LgotICAgICAgICAgICAgdW5zaWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGZwQXJndW1lbnRDb3VudCA9IDA7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzdGFja09mZnNldCA9IDA7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgY0NhbGwtPm51bUNoaWxkcmVuKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBh
cmdDaGlsZCA9IGNDYWxsLT5jaGlsZChpKTsKLSAgICAgICAgICAgICAgICBBcmcgYXJnOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoQXJnOjp0eXBlRm9yQjNUeXBl
KGFyZ0NoaWxkLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcmc6OkdQOgotICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBtYXJzaGFsbENDYWxsQXJndW1lbnQ8R1BSSW5mbz4oZ3BB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCwgYXJnQ2hpbGQpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChjQ2FsbC0+dHlwZSgpICE9IFZvaWQpCisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAoY0NhbGwpKTsKIAotICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpGUDoKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gbWFyc2hhbGxDQ2FsbEFy
Z3VtZW50PEZQUkluZm8+KGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIGFyZ0NoaWxkKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNDYWxsLT5udW1DaGlsZHJlbigpOyArK2kpCisg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkp
KTsKIAotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGTW92ZShpbnN0KSk7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoY0NhbGwtPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAg
ICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIHRtcChjQ2FsbCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBGbG9hdDoKLSAgICAgICAgICAgIGNhc2UgRG91YmxlOgotICAgICAg
ICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
LCB0bXAoY0NhbGwpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjg3LDExICsyMjI5LDEzIEBAIHBy
aXZhdGU6CiAKICAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgUGhpQ2hpbGRyZW4gbV9w
aGlDaGlsZHJlbjsKKyAgICBCbG9ja1dvcmtsaXN0IG1fZmFzdFdvcmtsaXN0OwogCiAgICAgVmVj
dG9yPFZlY3RvcjxJbnN0LCA0Pj4gbV9pbnN0czsKICAgICBWZWN0b3I8SW5zdD4gbV9wcm9sb2d1
ZTsKIAogICAgIEIzOjpCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIGJvb2wgbV9pc1JhcmU7CiAg
ICAgdW5zaWduZWQgbV9pbmRleDsKICAgICBWYWx1ZSogbV92YWx1ZTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAkocmV2aXNpb24gMTk1
MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlwcm9kdWN0cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgT3BhcXVlQnlwcm9kdWN0cyB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT3BhcXVlQnlwcm9kdWN0cygp
OwotICAgIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk9wYXF1
ZUJ5cHJvZHVjdHMoKTsKIAogICAgIHNpemVfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYnlw
cm9kdWN0cy5zaXplKCk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDIxICsyMDAsMTQgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1
ZQogICAgIGNhc2UgQXJnOjpUbXA6CiAgICAgY2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6
SW1tNjQ6Ci0gICAgY2FzZSBBcmc6OlN0YWNrOgotICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAg
ICAgICBicmVhazsgLy8gT0sKLSAgICBjYXNlIEFyZzo6QWRkcjoKLSAgICAgICAgaWYgKGFyZy5i
YXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQotICAgICAgICAgICAgJiYg
YXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWFyZy5pc1N0YWNrTWVtb3J5KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAK
LSAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsK
IAotICAgIHJldHVybiBhcmcuaXNUeXBlKHR5cGUpOworICAgIHJldHVybiBhcmcuY2FuUmVwcmVz
ZW50KHZhbHVlKTsKIH0KIAogYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAo
QWlyOjpDb2RlJiBjb2RlLCBjb25zdCBBaXI6OkFyZyYgYXJnLCBjb25zdCBWYWx1ZVJlcCYgcmVw
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5NTA2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nzc1LDYgKzc3NzUsNjUgQEAgdm9pZCB0ZXN0Q2FsbFNpbXBsZShpbnQgYSwgaW50IGIpCiAg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKIH0KIAor
dm9pZCB0ZXN0Q2FsbFJhcmUoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
Y29tbW9uID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHJhcmUgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAg
ICBGcmVxdWVudGVkQmxvY2socmFyZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAgICBG
cmVxdWVudGVkQmxvY2soY29tbW9uKSk7CisKKyAgICBjb21tb24tPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb21tb24tPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisgICAgCisgICAgcmFyZS0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJhcmUtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5jdGlvbikpLAor
ICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
KSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdHJ1ZSwgYSwgYikgPT0g
YSArIGIpOworfQorCit2b2lkIHRlc3RDYWxsUmFyZUxpdmUoaW50IGEsIGludCBiLCBpbnQgYykK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbW1vbiA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiByYXJlID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHJhcmUsIEZyZXF1ZW5j
eUNsYXNzOjpSYXJlKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGNvbW1vbikpOworCisgICAg
Y29tbW9uLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgY29tbW9uLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOworICAgIAorICAgIHJhcmUtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByYXJlLT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJhcmUtPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uKSksCisgICAgICAgICAg
ICAgICAgcmFyZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSks
CisgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMykpKSk7
CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdHJ1ZSwgYSwgYiwgYykgPT0g
YSArIGIgKyBjKTsKK30KKwogdm9pZCB0ZXN0Q2FsbFNpbXBsZVB1cmUoaW50IGEsIGludCBiKQog
ewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTAwNjksNiArMTAxMjgsOCBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RJbnQzMlRvRG91YmxlUGFydGlhbFJlZ2lz
dGVyV2l0aG91dFN0YWxsKCkpOwogCiAgICAgUlVOKHRlc3RDYWxsU2ltcGxlKDEsIDIpKTsKKyAg
ICBSVU4odGVzdENhbGxSYXJlKDEsIDIpKTsKKyAgICBSVU4odGVzdENhbGxSYXJlTGl2ZSgxLCAy
LCAzKSk7CiAgICAgUlVOKHRlc3RDYWxsU2ltcGxlUHVyZSgxLCAyKSk7CiAgICAgUlVOKHRlc3RD
YWxsRnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
OSBAQAogCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAi
R1BSSW5mby5oIgogCiAjaWYgQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKICNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgcHVzaApAQCAtMzgsNiArNDEsMjAgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitib29sIEFyZzo6aXNTdGFja01l
bW9yeSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEFkZHI6Cisg
ICAgICAgIHJldHVybiBiYXNlKCkgPT0gQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpCisgICAgICAgICAgICB8fCBiYXNlKCkgPT0gQWlyOjpUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjYXNlIFN0YWNrOgorICAgIGNhc2UgQ2FsbEFyZzoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwogYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLCBT
aWduZWRuZXNzIHNpZ25lZG5lc3MpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChzaWduZWRuZXNzKSB7
CkBAIC02Nyw2ICs4NCwzMSBAQCBib29sIEFyZzo6aXNSZXByZXNlbnRhYmxlQXMoV2lkdGggd2lk
dGgsCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK2Jvb2wgQXJnOjp1c2VzVG1wKEFp
cjo6VG1wIHRtcCkgY29uc3QKK3sKKyAgICBib29sIHVzZXMgPSBmYWxzZTsKKyAgICBjb25zdF9j
YXN0PEFyZyo+KHRoaXMpLT5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgWyZdIChBaXI6OlRtcCBv
dGhlclRtcCkgeworICAgICAgICAgICAgaWYgKG90aGVyVG1wID09IHRtcCkKKyAgICAgICAgICAg
ICAgICB1c2VzID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHVzZXM7Cit9CisKK2Jv
b2wgQXJnOjpjYW5SZXByZXNlbnQoVmFsdWUqIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBp
c1R5cGUodHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Cit9CisKK2Jvb2wgQXJnOjppc0Nv
bXBhdGlibGVUeXBlKGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGhhc1R5cGUo
KSkKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzVHlwZSh0eXBlKCkpOworICAgIGlmIChvdGhlci5o
YXNUeXBlKCkpCisgICAgICAgIHJldHVybiBpc1R5cGUob3RoZXIudHlwZSgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTE3LDYgKzE1OSw5IEBAIHZvaWQgQXJnOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFdpZHRoQXJnOgorICAgICAgICBvdXQucHJpbnQod2lkdGgoKSk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTY3LDYgKzIx
Miw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNl
IEFyZzo6U3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGhBcmc6CisgICAgICAgIG91dC5wcmludCgiV2lkdGhB
cmciKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yMzEsMTYgKzI3OSwxNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgQXJnCiB7CiAgICAgc3dpdGNoICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpX
aWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIG91dC5wcmludCgi
OCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91
dC5wcmludCgiV2lkdGgxNiIpOworICAgICAgICBvdXQucHJpbnQoIjE2Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKLSAgICAgICAgb3V0LnByaW50KCJXaWR0aDMy
Iik7CisgICAgICAgIG91dC5wcmludCgiMzIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
QXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJpbnQoIldpZHRoNjQiKTsKKyAgICAgICAgb3V0
LnByaW50KCI2NCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDEx
IEBACiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcmV0dXJuLXR5cGUiCiAjZW5k
aWYgLy8gQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKIAotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgU3BlY2lh
bDsKIGNsYXNzIFN0YWNrU2xvdDsKQEAgLTc0LDcgKzc4LDggQEAgcHVibGljOgogICAgICAgICBS
ZWxDb25kLAogICAgICAgICBSZXNDb25kLAogICAgICAgICBEb3VibGVDb25kLAotICAgICAgICBT
cGVjaWFsCisgICAgICAgIFNwZWNpYWwsCisgICAgICAgIFdpZHRoQXJnCiAgICAgfTsKIAogICAg
IGVudW0gUm9sZSA6IGludDhfdCB7CkBAIC0xNjEsNiArMTY2LDEzIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hUeXBlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBmdW5jdG9yKEdQKTsKKyAgICAgICAgZnVuY3RvcihG
UCk7CisgICAgfQorCiAgICAgZW51bSBXaWR0aCA6IGludDhfdCB7CiAgICAgICAgIFdpZHRoOCwK
ICAgICAgICAgV2lkdGgxNiwKQEAgLTIyNyw2ICsyMzksMjYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaXNBbnlVc2Uocm9sZSkgJiYgIWlzQ29sZFVzZShyb2xlKTsKICAgICB9CiAKKyAgICBz
dGF0aWMgUm9sZSBjb29sZWQoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBj
YXNlIFNjcmF0Y2g6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4g
cm9sZTsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gQ29sZFVzZTsKKyAg
ICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJuIExhdGVDb2xkVXNlOworICAg
ICAgICB9CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMg
dGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNl
LgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQogICAgIHsKQEAgLTQ0OSw2
ICs0ODEsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAg
IHN0YXRpYyBBcmcgaW1tUHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PihhZGRyZXNzKSk7CisgICAgfQorCiAg
ICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CkBAIC01NjMsNiArNjAwLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIHdp
ZHRoQXJnKFdpZHRoIHdpZHRoKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IFdpZHRoQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB3aWR0
aDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQXJnJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX29mZnNldCA9
PSBvdGhlci5tX29mZnNldApAQCAtNTk5LDYgKzY0NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gSW1tNjQ7CiAgICAgfQogCisgICAgYm9vbCBpc1NvbWVJbW0oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1tKCkgfHwgaXNJbW02NCgpOworICAgIH0KKwog
ICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0g
QWRkcjsKQEAgLTYxOSw2ICs2NjksMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgp
ID09IEluZGV4OwogICAgIH0KIAorICAgIGJvb2wgaXNNZW1vcnkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNl
IFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNTdGFja01lbW9yeSgpIGNv
bnN0OworCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNjUxLDYgKzcxNiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKICAgICB9CiAKKyAgICBib29sIGlzV2lkdGhBcmco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBXaWR0aEFyZzsKKyAgICB9
CisKICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1w
KCkgfHwgaXNTdGFjaygpOwpAQCAtNjk0LDE4ICs3NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAgICAgY2FzZSBBZGRyOgotICAgICAgICBj
YXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6Ci0gICAgICAgIGNhc2UgSW5kZXg6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIGlzTWVtb3J5KCk7IH0KICAgICAKICAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0
CiAgICAgewpAQCAtNzQ0LDYgKzgwMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOwogICAgIH0KIAorICAgIFdpZHRoIHdp
ZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gV2lkdGhBcmcpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lkdGg+KG1fb2Zmc2V0KTsKKyAgICB9CisKICAg
ICBib29sIGlzR1BUbXAoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNHUCgpOwpAQCAtNzY4LDYgKzgzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBS
ZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBjYXNlIFRtcDoKICAgICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CkBAIC03ODYsNiArODUy
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91Ymxl
Q29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFdpZHRoQXJnOgogICAg
ICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNh
c2UgQWRkcjoKQEAgLTgyOSw2ICs4OTYsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICBib29sIGNhblJlcHJlc2VudChWYWx1ZSogdmFsdWUp
IGNvbnN0OworCisgICAgYm9vbCBpc0NvbXBhdGlibGVUeXBlKGNvbnN0IEFyZyYgb3RoZXIpIGNv
bnN0OworCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtOTcwLDYgKzEwNDEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTk5Miw2ICsx
MDY0LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCB1c2VzVG1wKEFp
cjo6VG1wIHRtcCkgY29uc3Q7CisKICAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93
IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRz
CiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgogICAg
IC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
aAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNyBAQCBwdWJsaWM6CiAg
ICAgSW5zdExpc3QmIGluc3RzKCkgeyByZXR1cm4gbV9pbnN0czsgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW5zdD4KLSAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgSW5z
dCYgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKICAgICB7CiAgICAgICAgIG1faW5zdHMuYXBwZW5k
KHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgICAgIHJldHVybiBtX2luc3RzLmxhc3Qo
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9p
ZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIEluc3QmIGFwcGVuZChBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICAgICAgcmV0dXJu
IG1faW5zdHMubGFzdCgpOwogICAgIH0KIAogICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2Fz
ZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIg
Y2FzZSBpcyB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxp
bmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29u
dmVudGlvbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3Bl
Y2lhbC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhbmtJbmZvPgorQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3Vt
ZW50Q291bnQsIHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQoreworICAgIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXggPSBhcmd1bWVudENvdW50Kys7CisgICAgaWYgKGFyZ3VtZW50
SW5kZXggPCBCYW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKKyAgICAgICAgcmV0
dXJuIFRtcChCYW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKKwor
ICAgIHVuc2lnbmVkIHNsb3RTaXplOworICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgewor
ICAgICAgICAvLyBBcmd1bWVudHMgYXJlIHBhY2tlZC4KKyAgICAgICAgc2xvdFNpemUgPSBzaXpl
b2ZUeXBlKGNoaWxkLT50eXBlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFyZ3VtZW50
cyBhcmUgYWxpZ25lZC4KKyAgICAgICAgc2xvdFNpemUgPSA4OworICAgIH0KKworICAgIHN0YWNr
T2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7
CisgICAgQXJnIHJlc3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7CisgICAgc3RhY2tP
ZmZzZXQgKz0gc2xvdFNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJnIG1hcnNoYWxs
Q0NhbGxBcmd1bWVudCgKKyAgICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYg
ZnBBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKK3sK
KyAgICBzd2l0Y2ggKEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgeworICAgIGNh
c2UgQXJnOjpHUDoKKyAgICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BS
SW5mbz4oZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgY2hpbGQpOworICAgIGNhc2UgQXJn
OjpGUDoKKyAgICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8RlBSSW5mbz4o
ZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgY2hpbGQpOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBBcmcoKTsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK1ZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24o
Q29kZSYgY29kZSwgQ0NhbGxWYWx1ZSogdmFsdWUpCit7CisgICAgVmVjdG9yPEFyZz4gcmVzdWx0
OworICAgIHJlc3VsdC5hcHBlbmQoVG1wKENDYWxsU3BlY2lhbDo6c2NyYXRjaFJlZ2lzdGVyKSk7
CisgICAgdW5zaWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBmcEFyZ3Vt
ZW50Q291bnQgPSAwOworICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KGdwQXJndW1l
bnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgdmFsdWUtPmNoaWxkKGkpKSk7
CisgICAgfQorICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1RtcCBjQ2FsbFJlc3VsdChUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICBjYXNlIEZsb2F0OgorICAgIGNhc2UgRG91YmxlOgorICAgICAg
ICByZXR1cm4gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUbXAoKTsKK30KKworSW5zdCBi
dWlsZENDYWxsKENvZGUmIGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+JiBh
cmd1bWVudHMpCit7CisgICAgSW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChj
b2RlLmNDYWxsU3BlY2lhbCgpKSk7CisgICAgaW5zdC5hcmdzLmFwcGVuZChhcmd1bWVudHNbMF0p
OworICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgaW5zdC5hcmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7CisgICAg
aW5zdC5hcmdzLmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFy
ZyBhcmcgPSBhcmd1bWVudHNbaV07CisgICAgICAgIGlmIChhcmcuaXNUbXAoKSkKKyAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKKyAgICB9CisgICAgcmV0dXJuIGluc3Q7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckNDYWxsaW5nQ29udmVudGlvbl9oCisjZGVmaW5lIEFpckNDYWxsaW5nQ29udmVu
dGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5j
bHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENDYWxsVmFs
dWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitWZWN0b3I8QXJnPiBjb21w
dXRlQ0NhbGxpbmdDb252ZW50aW9uKENvZGUmLCBDQ2FsbFZhbHVlKik7CisKK1RtcCBjQ2FsbFJl
c3VsdChUeXBlKTsKKworSW5zdCBidWlsZENDYWxsKENvZGUmLCBWYWx1ZSogb3JpZ2luLCBjb25z
dCBWZWN0b3I8QXJnPiYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxpbmdDb252ZW50aW9u
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9u
IDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTYwLDEyICs2MCwxMyBAQCBwdWJsaWM6CiAKICAgICBQcm9jZWR1cmUmIHByb2Mo
KSB7IHJldHVybiBtX3Byb2M7IH0KIAotICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBm
cmVxdWVuY3kgPSAxKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9j
ayhkb3VibGUgZnJlcXVlbmN5ID0gMSk7CiAKICAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiByZWx5
IG9uIHN0YWNrIHNsb3RzIGFsd2F5cyBnZXR0aW5nIGluZGljZXMgdGhhdCBhcmUgbGFyZ2VyIHRo
YW4gdGhlIGluZGV4CiAgICAgLy8gb2YgYW55IHByaW9yIHN0YWNrIHNsb3QuIEluIGZhY3QsIGFs
bCBzdGFjayBzbG90cyB5b3UgY3JlYXRlIGluIHRoZSBmdXR1cmUgd2lsbCBoYXZlIGFuIGluZGV4
CiAgICAgLy8gdGhhdCBpcyA+PSBzdGFja1Nsb3RzKCkuc2l6ZSgpLgotICAgIFN0YWNrU2xvdCog
YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RW
YWx1ZSogPSBudWxscHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0
YWNrU2xvdCgKKyAgICAgICAgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNr
U2xvdFZhbHVlKiA9IG51bGxwdHIpOwogICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0YWNr
U2xvdFZhbHVlKik7CiAKICAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxT
cGVjaWFsPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJDdXN0b20uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Jvb2wgQ0NhbGxDdXN0b206Omlz
VmFsaWRGb3JtKEluc3QmIGluc3QpCit7CisgICAgQ0NhbGxWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSAodmFsdWUtPnR5cGUoKSA9PSBW
b2lkID8gMCA6IDEpICsgdmFsdWUtPm51bUNoaWxkcmVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFRoZSBhcmd1bWVudHMgY2FuIG9ubHkgcmVmZXIgdG8gdGhlIHN0YWNrLCB0
bXBzLCBvciBpbW1lZGlhdGVzLgorICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAg
ICAgICAgaWYgKCFhcmcuaXNUbXAoKSAmJiAhYXJnLmlzU3RhY2tNZW1vcnkoKSAmJiAhYXJnLmlz
U29tZUltbSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2ln
bmVkIG9mZnNldCA9IDA7CisKKyAgICBpZiAoIWluc3QuYXJnc1swXS5pc0dQKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzdWx0IHRoZW4gaXQgY2Fu
bm90IGJlIGFuIGltbWVkaWF0ZS4KKyAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKSB7Cisg
ICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNTb21lSW1tKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghaW5zdC5hcmdzWzFdLmNhblJlcHJlc2VudCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5udW1DaGlsZHJlbigpOyBpLS0gPiAxOykgeworICAg
ICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgIEFyZyBhcmcgPSBp
bnN0LmFyZ3Nbb2Zmc2V0ICsgaV07CisgICAgICAgIGlmICghYXJnLmNhblJlcHJlc2VudChjaGls
ZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbEN1c3RvbTo6Z2VuZXJhdGUoSW5zdCYgaW5z
dCwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIGRhdGFMb2coIkZB
VEFMOiBVbmxvd2VyZWQgQyBjYWxsOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2Jv
b2wgU2h1ZmZsZUN1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5z
dC5hcmdzLnNpemUoKSAlIDMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEEgZGVz
dGluYXRpb24gbWF5IG9ubHkgYXBwZWFyIG9uY2UuIFRoaXMgcmVxdWlyZW1lbnQgYWxsb3dzIHVz
IHRvIGF2b2lkIHRoZSB1bmRlZmluZWQgYmVoYXZpb3IKKyAgICAvLyBvZiBoYXZpbmcgYSBkZXN0
aW5hdGlvbiB0aGF0IGlzIHN1cHBvc2VkIHRvIGdldCBtdWx0aXBsZSBpbnB1dHMgc2ltdWx0YW5l
b3VzbHkuIEl0IGFsc28KKyAgICAvLyBpbXBvc2VzIHNvbWUgaW50ZXJlc3RpbmcgY29uc3RyYWlu
dHMgb24gdGhlICJzaGFwZSIgb2YgdGhlIHNodWZmbGUuIElmIHdlIHRyZWF0IGEgc2h1ZmZsZSBw
YWlyCisgICAgLy8gYXMgYW4gZWRnZSBhbmQgdGhlIEFyZ3MgYXMgbm9kZXMsIHRoZW4gdGhlIHNp
bmdsZS1kZXN0aW5hdGlvbiByZXF1aXJlbWVudCBtZWFucyB0aGF0IHRoZQorICAgIC8vIHNodWZm
bGUgZ3JhcGggY29uc2lzdHMgb2YgdHdvIGtpbmRzIG9mIHN1YmdyYXBoczoKKyAgICAvLworICAg
IC8vIC0gU3Bhbm5pbmcgdHJlZXMuIFdlIGNhbGwgdGhlc2Ugc2hpZnRzLiBUaGV5IGNhbiBiZSBl
eGVjdXRlZCBhcyBhIHNlcXVlbmNlIG9mIE1vdmUKKyAgICAvLyAgIGluc3RydWN0aW9ucyBhbmQg
ZG9uJ3QgdXN1YWxseSByZXF1aXJlIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIC8vCisgICAgLy8g
LSBDbG9zZWQgbG9vcHMuIFRoZXNlIGxvb3BzIGNvbnNpc3Qgb2Ygbm9kZXMgdGhhdCBoYXZlIG9u
ZSBzdWNjZXNzb3IgYW5kIG9uZSBwcmVkZWNlc3Nvciwgc28KKyAgICAvLyAgIHRoZXJlIGlzIG5v
IHdheSB0byAiZ2V0IGludG8iIHRoZSBsb29wIGZyb20gb3V0c2lkZSBvZiBpdC4gVGhlc2UgY2Fu
IGJlIGV4ZWN1dGVkIHVzaW5nIHN3YXBzCisgICAgLy8gICBvciBieSBzYXZpbmcgb25lIG9mIHRo
ZSBBcmdzIHRvIGEgc2NyYXRjaCByZWdpc3RlciBhbmQgZXhlY3V0aW5nIGl0IGFzIGEgc2hpZnQu
CisgICAgSGFzaFNldDxBcmc+IGRzdHM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbaV07
CisgICAgICAgIHVuc2lnbmVkIG1vZGUgPSBpICUgMzsKKworICAgICAgICBpZiAobW9kZSA9PSAy
KSB7CisgICAgICAgICAgICAvLyBJdCdzIHRoZSB3aWR0aC4KKyAgICAgICAgICAgIGlmICghYXJn
LmlzV2lkdGhBcmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBzb3VyY2UgY2FuIGJlIGFu
IGltbWVkaWF0ZS4KKyAgICAgICAgaWYgKCFtb2RlKSB7CisgICAgICAgICAgICBpZiAoYXJnLmlz
U29tZUltbSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAo
IWFyZy5pc0NvbXBhdGlibGVUeXBlKGluc3QuYXJnc1tpICsgMV0pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtb2Rl
ID09IDEpOworICAgICAgICAgICAgaWYgKCFkc3RzLmFkZChhcmcpLmlzTmV3RW50cnkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZy5p
c1RtcCgpIHx8IGFyZy5pc01lbW9yeSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVy
IG1heSBhcHBlYXIgaW4gYW55IGFkZHJlc3MgZXhwcmVzc2lvbnMuIFRoZSBsb3dlcmluZyBjYW4n
dCBoYW5kbGUgaXQKKyAgICAvLyBhbmQgaXQncyBub3QgdXNlZnVsIGZvciB0aGUgd2F5IHdlIGVu
ZCB1cCB1c2luZyBTaHVmZmxlcy4gTm9ybWFsbHksIFNodWZmbGVzIG9ubHkgdXNlZCBmb3IKKyAg
ICAvLyBzdGFjayBhZGRyZXNzZXMgYW5kIG5vbi1zdGFjayByZWdpc3RlcnMuCisgICAgZm9yIChB
cmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICBpZiAoIWFyZy5pc01lbW9yeSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBhcmcu
Zm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZHN0cy5jb250YWlucyh0bXApKQorICAgICAgICAgICAgICAgICAgICBvayA9IGZh
bHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NDYWxsSGVscGVyczo6
SnVtcCBTaHVmZmxlQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmLCBH
ZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgZGF0YUxvZygiRkFUQUw6IFVubG93ZXJlZCBzaHVm
ZmxlOiAiLCBpbnN0LCAiXG4iKTsKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAg
ICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgogI2luY2x1ZGUgIkFpclNwZWNp
YWwuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIApAQCAtNTEsNiArNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAvLyB5b3UgbmVlZCB0byBjYXJyeSBleHRyYSBzdGF0
ZSBhcm91bmQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uIEFsc28sIFNwZWNpYWxzIG1lYW4gdGhhdCB5
b3UKIC8vIGFsd2F5cyBoYXZlIGFjY2VzcyB0byBDb2RlJiBldmVuIGluIG1ldGhvZHMgdGhhdCBk
b24ndCB0YWtlIGEgR2VuZXJhdGlvbkNvbnRleHQuCiAKKy8vIERlZmluaXRpb24gb2YgUGF0Y2gg
aW5zdHJ1Y3Rpb24uIFBhdGNoIGlzIHVzZWQgdG8gZGVsZWdhdGUgdGhlIGJlaGF2aW9yIG9mIHRo
ZSBpbnN0cnVjdGlvbiB0byB0aGUKKy8vIFNwZWNpYWwgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHRo
ZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUGF0Y2hDdXN0b20g
ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFj
aEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQpAQCAtOTYsNiArOTksMTE0
IEBAIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAgICAgfQogfTsKIAorLy8gRGVmaW5pdGlvbiBvZiBD
Q2FsbCBpbnN0cnVjdGlvbi4gQ0NhbGwgaXMgdXNlZCBmb3IgaG90IHBhdGggQyBmdW5jdGlvbiBj
YWxscy4gSXQncyBsb3dlcmVkIHRvIGEKKy8vIFBhdGNoIHdpdGggYW4gQWlyIENDYWxsU3BlY2lh
bCBhbG9uZyB3aXRoIGNvZGUgdG8gbWFyc2hhbCBpbnN0cnVjdGlvbnMuIFRoZSBsb3dlcmluZyBo
YXBwZW5zCisvLyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhhdCB0aGUgcmVnaXN0
ZXIgYWxsb2NhdG9yIHNlZXMgdGhlIGNsb2JiZXJzLgorc3RydWN0IENDYWxsQ3VzdG9tIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmco
SW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKwor
ICAgICAgICBmdW5jdG9yKGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpVc2UsIEFyZzo6R1AsIEFy
Zzo6cG9pbnRlcldpZHRoKCkpOyAvLyBjYWxsZWUKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1
ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IoCisgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OkRlZiwKKyAgICAgICAgICAgICAgICBBcmc6OnR5
cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgQXJnOjp3aWR0aEZv
ckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgeworICAgICAgICAgICAg
VmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICAgICAgZnVuY3RvcigKKyAg
ICAgICAgICAgICAgICBpbnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6VXNlLAorICAgICAgICAgICAg
ICAgIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBB
cmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkRm9ybVN0YXRpYyhBcmd1bWVudHMuLi4pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEZvcm0oSW5zdCYpOworCisgICAgc3Rh
dGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVm
ZmVjdHMoSW5zdCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBUaGlzIGp1c3QgY3Jhc2hlcywgc2luY2Ugd2UgZXhwZWN0IEMgY2FsbHMgdG8gYmUgbG93ZXJl
ZCBiZWZvcmUgZ2VuZXJhdGlvbi4KKyAgICBzdGF0aWMgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworfTsKKworc3Ry
dWN0IENvbGRDQ2FsbEN1c3RvbSA6IENDYWxsQ3VzdG9tIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMganVzdCBsaWtlIGEg
Y2FsbCwgYnV0IHVzZXMgYmVjb21lIGNvbGQuCisgICAgICAgIENDYWxsQ3VzdG9tOjpmb3JFYWNo
QXJnKAorICAgICAgICAgICAgaW5zdCwKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCkgeworICAgICAgICAg
ICAgICAgIGZ1bmN0b3IoYXJnLCBBcmc6OmNvb2xlZChyb2xlKSwgdHlwZSwgd2lkdGgpOworICAg
ICAgICAgICAgfSk7CisgICAgfQorfTsKKworc3RydWN0IFNodWZmbGVDdXN0b20geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
bGltaXQgPSBpbnN0LmFyZ3Muc2l6ZSgpIC8gMyAqIDM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaW1pdDsgaSArPSAzKSB7CisgICAgICAgICAgICBBcmcmIHNyYyA9IGluc3Qu
YXJnc1tpICsgMF07CisgICAgICAgICAgICBBcmcmIGRzdCA9IGluc3QuYXJnc1tpICsgMV07Cisg
ICAgICAgICAgICBBcmcmIHdpZHRoQXJnID0gaW5zdC5hcmdzW2kgKyAyXTsKKyAgICAgICAgICAg
IEFyZzo6V2lkdGggd2lkdGggPSB3aWR0aEFyZy53aWR0aCgpOworICAgICAgICAgICAgQXJnOjpU
eXBlIHR5cGUgPSBzcmMuaXNHUCgpICYmIGRzdC5pc0dQKCkgPyBBcmc6OkdQIDogQXJnOjpGUDsK
KyAgICAgICAgICAgIGZ1bmN0b3Ioc3JjLCBBcmc6OlVzZSwgdHlwZSwgd2lkdGgpOworICAgICAg
ICAgICAgZnVuY3Rvcihkc3QsIEFyZzo6RGVmLCB0eXBlLCB3aWR0aCk7CisgICAgICAgICAgICBm
dW5jdG9yKHdpZHRoQXJnLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpXaWR0aDgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRGb3JtU3RhdGljKEFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0
Jik7CisgICAgCisgICAgc3RhdGljIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleCAlIDMpIHsKKyAgICAgICAgY2FzZSAw
OgorICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKEluc3QmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cit9
OworCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0
U2h1ZmZsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckVtaXRTaHVmZmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyRW1pdFNodWZmbGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJp
b3JpdHkuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0
eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7CisgICAgZm9yIChSZWcgcmVnIDogcmVnc0lu
UHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgIGlm
IChmdW5jdG9yKHRtcCkpCisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKyAgICByZXR1
cm4gVG1wKCk7Cit9CisKK1RtcCBmaW5kUG9zc2libGVTY3JhdGNoKEFyZzo6VHlwZSB0eXBlLCBj
b25zdCBBcmcmIGFyZzEsIGNvbnN0IEFyZyYgYXJnMikgeworICAgIHJldHVybiBmaW5kUG9zc2li
bGVTY3JhdGNoKAorICAgICAgICB0eXBlLAorICAgICAgICBbJl0gKFRtcCB0bXApIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuICFhcmcxLnVzZXNUbXAodG1wKSAmJiAhYXJnMi51c2VzVG1w
KHRtcCk7CisgICAgICAgIH0pOworfQorCisvLyBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGEsIGEg
PT4gYywgYiA9PiBkKQorc3RydWN0IFJvdGF0ZSB7CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBs
b29wOyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhpcyBpcyB0aGUgbG9vcDogKGEgPT4gYiwgYiA9PiBh
KQorICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gZnJpbmdlOyAvLyBpbiB0aGUgZXhhbXBsZSwgdGhl
c2UgYXJlIHRoZSBhc3NvY2lhdGVkIHNoaWZ0czogKGEgPT4gYywgYiA9PiBkKQorfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQod2lkdGgoKSwgIjoiLCBzcmMoKSwgIj0+
IiwgZHN0KCkpOworfQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgVmVjdG9yPFNo
dWZmbGVQYWlyPiBwYWlycywgc3RkOjphcnJheTxBcmcsIDI+IHNjcmF0Y2hlcywgQXJnOjpUeXBl
IHR5cGUsIFZhbHVlKiBvcmlnaW4pCit7CisgICAgcGFpcnMucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgIFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuIHBhaXIuc3JjKCkgPT0gcGFpci5kc3QoKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhhdCB0aGlzIGlzIHRoZSBraW5kIG9mIHNodWZmbGUgdGhh
dCB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGguCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGZv
ciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgeworICAgICAgICBBU1NFUlQocGFp
ci5zcmMoKS5pc1R5cGUodHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1R5cGUo
dHlwZSkpOworICAgICAgICBBU1NFUlQocGFpci5kc3QoKS5pc1RtcCgpIHx8IHBhaXIuZHN0KCku
aXNNZW1vcnkoKSk7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworICAgIC8v
IFRoZXJlIGFyZSB0d28gcG9zc2libGUga2luZHMgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlIHdpbGwg
ZG86CisgICAgLy8KKyAgICAvLyAtIFNoaWZ0LiBFeGFtcGxlOiAoYSA9PiBiLCBiID0+IGMpLiBX
ZSBlbWl0IHRoaXMgYXMgIk1vdmUgYiwgYzsgTW92ZSBhLCBiIi4gVGhpcyBvbmx5IHJlcXVpcmVz
CisgICAgLy8gICBzY3JhdGNoIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbWVtb3J5LT5tZW1vcnkg
bW92ZXMuIFdlIHdhbnQgdG8gZmluZCBhcyBtYW55IG9mIHRoZXNlIGFzCisgICAgLy8gICBwb3Nz
aWJsZSBiZWNhdXNlIHRoZXkgYXJlIGNoZWFwZXIuIE5vdGUgdGhhdCBzaGlmdHMgY2FuIGludm9s
dmUgdGhlIHNhbWUgc291cmNlIG1lbnRpb25lZAorICAgIC8vICAgbXVsdGlwbGUgdGltZXMuIEV4
YW1wbGU6IChhID0+IGIsIGEgPT4gYywgYiA9PiBkLCBiID0+IGUpLgorICAgIC8vCisgICAgLy8g
LSBSb3RhdGUuIEV4YW1wbGU6IChhID0+IGIsIGIgPT4gYSkuIFdlIHdhbnQgdG8gZW1pdCB0aGlz
IGFzICJTd2FwIGEsIGIiLCBidXQgdGhhdCBpbnN0cnVjdGlvbgorICAgIC8vICAgbWF5IG5vdCBi
ZSBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2Ugd2UgbWF5IG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVy
IG9yIGEgc2NyYXRjaCBtZW1vcnkKKyAgICAvLyAgIGxvY2F0aW9uLiBBIGduYXJsaWVyIGV4YW1w
bGUgaXMgKGEgPT4gYiwgYiA9PiBjLCBjID0+IGEpLiBXZSBjYW4gZW1pdCB0aGlzIGFzICJTd2Fw
IGIsIGM7CisgICAgLy8gICBTd2FwIGEsIGIiLiBOb3RlIHRoYXQgc3dhcHBpbmcgaGFzIHRvIGJl
IGNhcmVmdWwgYWJvdXQgZGlmZmVyaW5nIHdpZHRocy4KKyAgICAvLworICAgIC8vIE5vdGUgdGhh
dCBhIHJvdGF0ZSBjYW4gaGF2ZSAiZnJpbmdlIi4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGhhdmUg
KGEgPT4gYiwgYiA9PiBhLCBhID0+YywKKyAgICAvLyBiID0+IGQpLiBUaGlzIGhhcyBhIHJvdGF0
ZSBsb29wIChhID0+IGIsIGIgPT4gYSkgYW5kIHNvbWUgZnJpbmdlIChhID0+IGMsIGIgPT4gZCku
IFdlIHRyZWF0CisgICAgLy8gdGhlIHdob2xlIHRoaW5nIGFzIGEgc2luZ2xlIHJvdGF0ZS4KKyAg
ICAvLworICAgIC8vIFdlIHdpbGwgZmluZCBtdWx0aXBsZSBkaXNqb2ludCBzdWNoIG9wZXJhdGlv
bnMuIFdlIGNhbiBleGVjdXRlIHRoZW0gaW4gYW55IG9yZGVyLgorCisgICAgLy8gV2UgaW50ZXJw
cmV0IHRoZXNlIGFzIE1vdmVzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcy4gQWxs
IHNoaWZ0cyBhcmUga2V5ZWQgYnkgdGhlaXIKKyAgICAvLyBzdGFydGluZyBzb3VyY2UuCisgICAg
SGFzaE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IHNoaWZ0czsKKworICAgIC8vIFdlIGlu
dGVycHJldCB0aGVzZSBhcyBTd2FwcyBvdmVyIHNyYygpJ3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0
ZWQgYmFja3dhcmRzLCBpLmUuIGZvciBhIGxpc3QKKyAgICAvLyBvZiBzaXplIDMgd2Ugd291bGQg
ZG8gIlN3YXAgbGlzdFsxXS5zcmMoKSwgbGlzdFsyXS5zcmMoKTsgU3dhcCBsaXN0WzBdLnNyYygp
LCBsaXN0WzFdLnNyYygpIi4KKyAgICAvLyBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgY2FuJ3QgZG8g
dGhhdCBpZiB0aGUgd2lkdGhzIGRvbid0IG1hdGNoIG9yIG90aGVyIGJhZCB0aGluZ3MgaGFwcGVu
LgorICAgIC8vIEJ1dCwgcHJpb3IgdG8gZXhlY3V0aW5nIGFsbCBvZiB0aGF0LCB3ZSBuZWVkIHRv
IGV4ZWN1dGUgdGhlIGZyaW5nZTogdGhlIHNoaWZ0cyBjb21taW5nIG9mZiB0aGUKKyAgICAvLyBy
b3RhdGUuCisgICAgVmVjdG9yPFJvdGF0ZT4gcm90YXRlczsKKworICAgIHsKKyAgICAgICAgSGFz
aE1hcDxBcmcsIFZlY3RvcjxTaHVmZmxlUGFpcj4+IG1hcHBpbmc7CisgICAgICAgIGZvciAoY29u
c3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykKKyAgICAgICAgICAgIG1hcHBpbmcuYWRkKHBh
aXIuc3JjKCksIFZlY3RvcjxTaHVmZmxlUGFpcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChw
YWlyKTsKKworICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGN1cnJlbnRQYWlyczsKKworICAg
ICAgICB3aGlsZSAoIW1hcHBpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3Vy
cmVudFBhaXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBcmcgb3JpZ2luYWxTcmMgPSBtYXBw
aW5nLmJlZ2luKCktPmtleTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hpZnRzLmNvbnRhaW5zKG9y
aWdpbmFsU3JjKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJQcm9jZXNzaW5nIGZyb20gIiwgb3JpZ2luYWxTcmMsICJcbiIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxBcmc+IHdvcmtsaXN0OworICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChvcmlnaW5hbFNyYyk7CisgICAgICAgICAgICB3aGlsZSAoQXJn
IHNyYyA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxBcmcsIFZl
Y3RvcjxTaHVmZmxlUGFpcj4+OjppdGVyYXRvciBpdGVyID0gbWFwcGluZy5maW5kKHNyYyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbWFwcGluZy5lbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXaXRoIGEgc2hpZnQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIHByZXZpb3VzbHkg
YnVpbHQgdGhlIHRhaWwgb2YgdGhpcyBzaGlmdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU2Vl
IGlmIHRoYXQncyB0aGUgY2FzZSBub3cuCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiVHJ5aW5nIHRvIGFwcGVuZCBzaGlm
dCBhdCAiLCBzcmMsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBw
ZW5kVmVjdG9yKHNoaWZ0cy50YWtlKHNyYykpOworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVmVjdG9yPFNodWZmbGVQYWly
PiBwYWlycyA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIG1hcHBpbmcu
cmVtb3ZlKGl0ZXIpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYg
cGFpciA6IHBhaXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlycy5hcHBlbmQo
cGFpcik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpID09IHNyYyk7Cisg
ICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gocGFpci5kc3QoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJz
LnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBhaXJzWzBdLnNyYygpID09IG9y
aWdpbmFsU3JjKTsKKworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiY3VycmVudFBhaXJzID0gIiwgbGlzdER1bXAoY3VycmVudFBhaXJzKSwgIlxuIik7
CisKKyAgICAgICAgICAgIGJvb2wgaXNSb3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocGFpci5kc3QoKSA9PSBvcmlnaW5hbFNyYykgeworICAgICAgICAgICAgICAgICAgICBp
c1JvdGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzUm90YXRlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkl0
J3MgYSByb3RhdGUuXG4iKTsKKyAgICAgICAgICAgICAgICBSb3RhdGUgcm90YXRlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoZSBjb21tb24gY2FzZSBpcyB0aGF0IHRo
ZSByb3RhdGUgZG9lcyBub3QgaGF2ZSBmcmluZ2UuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBsYXN0IGRlc3RpbmF0aW9uIGlzIHRoZSBmaXJzdCBzb3VyY2UuCisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWlycy5sYXN0KCkuZHN0KCkgPT0gb3JpZ2luYWxT
cmMpCisgICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wID0gV1RGTW92ZShjdXJyZW50UGFp
cnMpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBzbG93IHBhdGguIFRoZSByb3RhdGUgaGFzIGZyaW5nZS4KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8QXJnLCBTaHVmZmxlUGFpcj4gZHN0
TWFwcGluZzsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxlUGFpciYgcGFp
ciA6IGN1cnJlbnRQYWlycykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1hcHBpbmcuYWRk
KHBhaXIuZHN0KCksIHBhaXIpOworCisgICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBh
aXIgPSBkc3RNYXBwaW5nLnRha2Uob3JpZ2luYWxTcmMpOworICAgICAgICAgICAgICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUubG9vcC5hcHBlbmQocGFp
cik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGRzdE1hcHBpbmcuZmlu
ZChwYWlyLnNyYygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IGRzdE1h
cHBpbmcuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYWlyID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkc3RNYXBwaW5nLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHJvdGF0ZS5sb29wLnJldmVyc2UoKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnJpbmdlIGFwcGVhcnMgaW4gdGhlIHNhbWUg
b3JkZXIgYXMgaG93IGl0IGFwcGVhcmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBj
dXJyZW50UGFpcnMsIHNpbmNlIHRoYXQncyB0aGUgREZTIG9yZGVyLgorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogY3VycmVudFBhaXJzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBCdXQgb2YgY291cnNlIHdlIG9ubHkgaW5jbHVkZSBpdCBp
ZiBpdCdzIG5vdCBpbiB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc3RN
YXBwaW5nLmNvbnRhaW5zKHBhaXIuZHN0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvdGF0ZS5mcmluZ2UuYXBwZW5kKHBhaXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBncmFwaCBzZWFyY2ggdGVybWluYXRlcyBiZWNhdXNlIHdlIHJldHVybmVkIHRvIHRoZSBmaXJz
dCBzb3VyY2UsIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gcGFpciBsaXN0IGhhcyB0byBo
YXZlIGEgdmVyeSBwYXJ0aWN1bGFyIHNoYXBlLgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKSAtIDE7IGktLTspCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChyb3RhdGUubG9vcFtpXS5kc3QoKSA9PSByb3RhdGUubG9vcFtpICsgMV0uc3JjKCkp
OworICAgICAgICAgICAgICAgIHJvdGF0ZXMuYXBwZW5kKFdURk1vdmUocm90YXRlKSk7CisgICAg
ICAgICAgICAgICAgY3VycmVudFBhaXJzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkl0J3MgYSBzaGlmdC5cbiIpOworICAgICAgICAgICAgICAgIHNoaWZ0cy5hZGQob3JpZ2lu
YWxTcmMsIFdURk1vdmUoY3VycmVudFBhaXJzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkYXRhTG9nKCJTaGlmdHM6XG4i
KTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNoaWZ0cykKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICAiLCBlbnRyeS5rZXksICI6ICIsIGxpc3REdW1wKGVudHJ5LnZhbHVlKSwgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIlJvdGF0ZXM6XG4iKTsKKyAgICAgICAgZm9yIChhdXRvJiByb3Rh
dGUgOiByb3RhdGVzKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIGxvb3AgPSAiLCBsaXN0RHVt
cChyb3RhdGUubG9vcCksICIsIGZyaW5nZSA9ICIsIGxpc3REdW1wKHJvdGF0ZS5mcmluZ2UpLCAi
XG4iKTsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSwgd2UgbmVlZCB0d28gc2Ny
YXRjaCByZWdpc3RlcnMuIFRoZSB3YXkgd2UgZG8gdGhpcyBpcyB0aGF0IHRoZSBjbGllbnQgcGFz
c2VzCisgICAgLy8gdXMgd2hhdCBzY3JhdGNoIHJlZ2lzdGVycyBoZSBoYXBwZW5zIHRvIGhhdmUg
bGF5aW5nIGFyb3VuZC4gV2Ugd2lsbCBuZWVkIHNjcmF0Y2ggcmVnaXN0ZXJzIGluCisgICAgLy8g
dGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAvLworICAgIC8vIC0gU2h1ZmZsZSBwYWlycyB3aGVy
ZSBib3RoIHNyYyBhbmQgZHN0IHJlZmVyIHRvIG1lbW9yeS4KKyAgICAvLyAtIFJvdGF0ZSB3aGVu
IG5vIFN3YXAgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLgorICAgIC8vCisgICAgLy8gTHVja3kg
Zm9yIHVzLCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGV4dHJhIHNjcmF0Y2ggcmVnaXN0ZXJz
IGFueXRpbWUgd2UgaGF2ZSBhIFNoaWZ0IHRoYXQKKyAgICAvLyBlbmRzIHdpdGggYSByZWdpc3Rl
ci4gV2Ugc2VhcmNoIGZvciBzdWNoIGEgcmVnaXN0ZXIgcmlnaHQgbm93LgorCisgICAgYXV0byBt
b3ZlRm9yV2lkdGggPSBbJl0gKEFyZzo6V2lkdGggd2lkdGgpIC0+IE9wY29kZSB7CisgICAgICAg
IHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAg
ICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZTMyIDogTW92ZUZsb2F0OworICAgICAgICBj
YXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IEFyZzo6R1AgPyBN
b3ZlIDogTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgT3Bjb2RlIGNv
bnNlcnZhdGl2ZU1vdmUgPSBtb3ZlRm9yV2lkdGgoQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBl
KSk7CisKKyAgICAvLyBXZSB3aWxsIGVtaXQgdGhpbmdzIGluIHJldmVyc2UuIFdlIG1haW50YWlu
IGEgbGlzdCBvZiBwYWNrcyBvZiBpbnN0cnVjdGlvbnMsIGFuZCB0aGVuIHdlIGVtaXQKKyAgICAv
LyBhcHBlbmQgdGhlbSB0b2dldGhlciBpbiByZXZlcnNlIChmb3IgZXhhbXBsZSB0aGUgdGhpbmcg
YXQgdGhlIGVuZCBvZiByZXN1bHRQYWNrcyBpcyBwbGFjZWQKKyAgICAvLyBmaXJzdCkuIFRoaXMg
aXMgdXNlZnVsIGJlY2F1c2UgdGhlIGxhc3QgdGhpbmcgd2UgZW1pdCBmcmVlcyB1cCBpdHMgZGVz
dGluYXRpb24gcmVnaXN0ZXJzLCBzbworICAgIC8vIGl0IGFmZmVjdHMgaG93IHdlIGVtaXQgdGhp
bmdzIGJlZm9yZSBpdC4KKyAgICBWZWN0b3I8VmVjdG9yPEluc3Q+PiByZXN1bHRQYWNrczsKKyAg
ICBWZWN0b3I8SW5zdD4gcmVzdWx0OworCisgICAgYXV0byBjb21taXRSZXN1bHQgPSBbJl0gKCkg
eworICAgICAgICByZXN1bHRQYWNrcy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9Owor
CisgICAgYXV0byBnZXRTY3JhdGNoID0gWyZdICh1bnNpZ25lZCBpbmRleCwgVG1wIHBvc3NpYmxl
U2NyYXRjaCkgLT4gVG1wIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hlc1tpbmRleF0uaXNUbXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoZXNbaW5kZXhdLnRtcCgpOworCisgICAgICAgIGlm
ICghcG9zc2libGVTY3JhdGNoKQorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBwb3NzaWJsZVNjcmF0
Y2gsIHNjcmF0Y2hlc1tpbmRleF0pKTsKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxlU2NyYXRjaDsK
KyAgICB9OworCisgICAgYXV0byByZXR1cm5TY3JhdGNoID0gWyZdICh1bnNpZ25lZCBpbmRleCwg
VG1wIHRtcCkgeworICAgICAgICBpZiAoQXJnKHRtcCkgIT0gc2NyYXRjaGVzW2luZGV4XSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChjb25zZXJ2YXRpdmVNb3ZlLCBvcmlnaW4sIHNj
cmF0Y2hlc1tpbmRleF0sIHRtcCkpOworICAgIH07CisKKyAgICBhdXRvIGhhbmRsZVNoaWZ0UGFp
ciA9IFsmXSAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIsIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCkg
eworICAgICAgICBPcGNvZGUgbW92ZSA9IG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShtb3ZlLCBwYWlyLnNyYygpLmtpbmQoKSwg
cGFpci5kc3QoKS5raW5kKCkpKSB7CisgICAgICAgICAgICBUbXAgc2NyYXRjaCA9CisgICAgICAg
ICAgICAgICAgZ2V0U2NyYXRjaChzY3JhdGNoSW5kZXgsIGZpbmRQb3NzaWJsZVNjcmF0Y2godHlw
ZSwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c2NyYXRjaCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5r
aW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92
ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwgcGFpci5zcmMoKSwgc2NyYXRjaCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNT
b21lSW1tKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtb3ZlID09IE1vdmUzMik7CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUsIG9yaWdpbiwgQXJnOjppbW02NChw
YWlyLnNyYygpLnZhbHVlKCkpLCBzY3JhdGNoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHBhaXIud2lkdGgoKSksIG9yaWdpbiwg
c2NyYXRjaCwgcGFpci5kc3QoKSkpOworICAgICAgICAgICAgcmV0dXJuU2NyYXRjaChzY3JhdGNo
SW5kZXgsIHNjcmF0Y2gpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXN1bHQuYXBwZW5kKEluc3QobW92ZSwgb3JpZ2luLCBwYWlyLnNyYygpLCBw
YWlyLmRzdCgpKSk7CisgICAgfTsKKworICAgIGF1dG8gaGFuZGxlU2hpZnQgPSBbJl0gKFZlY3Rv
cjxTaHVmZmxlUGFpcj4mIHNoaWZ0KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBvcHRp
bWl6ZSB0aGUgc3BpbGwgYmVoYXZpb3Igb2YgdGhlIHNoaWZ0ZXIgYnkgY2hlY2tpbmcgaWYgYW55
IG9mIHRoZQorICAgICAgICAvLyBzaGlmdHMgbmVlZCBzcGlsbHMuIElmIHRoZXkgZG8sIHRoZW4g
d2UgY291bGQgdHJ5IHRvIGdldCBhIHJlZ2lzdGVyIG91dCBoZXJlLiBOb3RlIHRoYXQKKyAgICAg
ICAgLy8gdGhpcyBtYXkgZmFpbCB3aGVyZSB0aGUgY3VycmVudCBzdHJhdGVneSBzdWNjZWVkczog
b3V0IGhlcmUgd2UgbmVlZCBhIHJlZ2lzdGVyIHRoYXQgZG9lcworICAgICAgICAvLyBub3QgaW50
ZXJmZXJlIHdpdGggYW55IG9mIHRoZSBzaGlmdHMsIHdoaWxlIHRoZSBjdXJyZW50IHN0cmF0ZWd5
IG9ubHkgbmVlZHMgdG8gZmluZCBhCisgICAgICAgIC8vIHNjcmF0Y2ggcmVnaXN0ZXIgdGhhdCBk
b2VzIG5vdCBpbnRlcmZlciB3aXRoIGEgcGFydGljdWxhciBzaGlmdC4gU28sIHRoaXMgb3B0aW1p
emF0aW9uCisgICAgICAgIC8vIHdpbGwgYmUgb3Bwb3J0dW5pc3RpYzogaWYgaXQgc3VjY2VlZHMs
IHRoZW4gdGhlIGluZGl2aWR1YWwgc2hpZnRzIGNhbiB1c2UgdGhhdCBzY3JhdGNoLAorICAgICAg
ICAvLyBvdGhlcndpc2UgdGhleSB3aWxsIGRvIHdoYXQgdGhleSBkbyBub3cuCisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaGlmdC5zaXplKCk7IGktLTspCisgICAgICAgICAg
ICBoYW5kbGVTaGlmdFBhaXIoc2hpZnRbaV0sIDApOworCisgICAgICAgIEFyZyBsYXN0RHN0ID0g
c2hpZnQubGFzdCgpLmRzdCgpOworICAgICAgICBpZiAobGFzdERzdC5pc1RtcCgpKSB7CisgICAg
ICAgICAgICBmb3IgKEFyZyYgc2NyYXRjaCA6IHNjcmF0Y2hlcykgeworICAgICAgICAgICAgICAg
IEFTU0VSVChzY3JhdGNoICE9IGxhc3REc3QpOworICAgICAgICAgICAgICAgIGlmICghc2NyYXRj
aC5pc1RtcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBsYXN0RHN0OworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gRmlyc3QgaGFuZGxlIHNoaWZ0cyB3aG9zZSBs
YXN0IGRlc3RpbmF0aW9uIGlzIGEgdG1wIGJlY2F1c2UgdGhlc2UgZnJlZSB1cCBzY3JhdGNoIHJl
Z2lzdGVycy4KKyAgICAvLyBUaGVzZSBlbmQgdXAgbGFzdCBpbiB0aGUgZmluYWwgc2VxdWVuY2Us
IHNvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBvZiB0aGVzZSBzaGlmdHMgd2lsbCBiZQorICAgIC8v
IGF2YWlsYWJsZSBhcyBhIHNjcmF0Y2ggbG9jYXRpb24gZm9yIGFueXRoaW5nIGVtaXR0ZWQgcHJp
b3IgKHNvLCBhZnRlciwgc2luY2Ugd2UncmUgZW1pdHRpbmcgaW4KKyAgICAvLyByZXZlcnNlKS4K
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogc2hpZnRzKSB7CisgICAgICAgIFZlY3RvcjxTaHVmZmxl
UGFpcj4mIHNoaWZ0ID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmIChzaGlmdC5sYXN0KCkuZHN0
KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAgICAgICAgY29t
bWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRsZSB0aGUgcmVzdCBvZiB0aGUg
c2hpZnRzLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBzaGlmdHMpIHsKKyAgICAgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiYgc2hpZnQgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYgKCFzaGlmdC5s
YXN0KCkuZHN0KCkuaXNUbXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVNoaWZ0KHNoaWZ0KTsKKyAg
ICAgICAgY29tbWl0UmVzdWx0KCk7CisgICAgfQorCisgICAgZm9yIChSb3RhdGUmIHJvdGF0ZSA6
IHJvdGF0ZXMpIHsKKyAgICAgICAgaWYgKCFyb3RhdGUuZnJpbmdlLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIHRoZSBmcmluZ2UgZmlyc3QhIFRoaXMgd29uJ3Qg
Y2xvYmJlciBhbnkgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGFyZQorICAgICAgICAgICAgLy8gcGFy
dCBvZiB0aGUgcm90YXRpb24uCisgICAgICAgICAgICBoYW5kbGVTaGlmdChyb3RhdGUuZnJpbmdl
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5Td2FwID0gZmFsc2U7Cisg
ICAgICAgIE9wY29kZSBzd2FwID0gT29wczsKKyAgICAgICAgQXJnOjpXaWR0aCBzd2FwV2lkdGgg
PSBBcmc6OldpZHRoODsgLy8gYm9ndXMgdmFsdWUKKworICAgICAgICAvLyBDdXJyZW50bHksIHRo
ZSBzd2FwIGluc3RydWN0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIGZsb2F0aW5nIHBvaW50IG9u
IGFueSBhcmNoaXRlY3R1cmUgd2UKKyAgICAgICAgLy8gc3VwcG9ydC4KKyAgICAgICAgaWYgKHR5
cGUgPT0gQXJnOjpHUCkgeworICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0aGVyIHdlIHdp
bGwgYmUgZG9pbmcgNjQtYml0IHN3YXBzIG9yIDMyLWJpdCBzd2Fwcy4gSWYgd2UgaGF2ZSBhIG1p
eCBvZgorICAgICAgICAgICAgLy8gd2lkdGhzIHdlIGhhbmRsZSB0aGF0IGJ5IGZpeGluZyB1cCB0
aGUgcmVsZXZhbnQgcmVnaXN0ZXIgd2l0aCB6ZXJvLWV4dGVuZHMuCisgICAgICAgICAgICBzd2Fw
ID0gU3dhcDMyOworICAgICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDMyOworICAgICAg
ICAgICAgYm9vbCBoYXNNZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgaGFzSW5kZXgg
PSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXImIHBhaXIgOiByb3RhdGUubG9v
cCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFpci53aWR0aCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBzd2Fw
ID0gU3dhcDY0OworICAgICAgICAgICAgICAgICAgICBzd2FwV2lkdGggPSBBcmc6OldpZHRoNjQ7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGhhc01lbW9yeSB8PSBwYWlyLnNyYygpLmlzTWVtb3J5KCkgfHwgcGFpci5kc3QoKS5pc01lbW9y
eSgpOworICAgICAgICAgICAgICAgIGhhc0luZGV4IHw9IHBhaXIuc3JjKCkuaXNJbmRleCgpIHx8
IHBhaXIuZHN0KCkuaXNJbmRleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYW5Td2FwID0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFyZzo6VG1wKTsK
KworICAgICAgICAgICAgLy8gV2UgY2FuIHRvdGFsbHkgdXNlIHN3YXBzIGV2ZW4gaWYgdGhlcmUg
YXJlIHNodWZmbGVzIGludm9sdmluZyBtZW1vcnkuIEJ1dCwgd2UgcGxheSBpdAorICAgICAgICAg
ICAgLy8gc2FmZSBpbiB0aGF0IGNhc2UuIFRoZXJlIGFyZSBjb3JuZXIgY2FzZXMgd2UgZG9uJ3Qg
aGFuZGxlLCBhbmQgb3VyIGFiaWxpdHkgdG8gZG8gaXQgaXMKKyAgICAgICAgICAgIC8vIGNvbnRp
bmdlbnQgdXBvbiBzd2FwIGZvcm0gYXZhaWxhYmlsaXR5LgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaGFzTWVtb3J5KSB7CisgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBpc1ZhbGlk
Rm9ybShzd2FwLCBBcmc6OlRtcCwgQXJnOjpBZGRyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzd2FwcGluZyBwYXRoIGlmIHRoZXJlIGlz
IGEgbWl4IG9mIHdpZHRocyBhbmQgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBzaHVm
ZmxlcyBpbnZvbHZlIG1lbW9yeS4gVGhhdCBnZXRzIHRvbyBjb25mdXNpbmcuIFdlIG1pZ2h0IGJl
IGFibGUgdG8gcmVsYXggdGhpcworICAgICAgICAgICAgICAgIC8vIHRvIG9ubHkgYmFpbCBpZiB0
aGVyZSBhcmUgc3Vid2lkdGggcGFpcnMgaW52b2x2aW5nIG1lbW9yeSwgYnV0IEkgaGF2ZW4ndCB0
aG91Z2h0CisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaXQgdmVyeSBoYXJkLiBBbnl3YXksIHRo
aXMgY2FzZSBpcyBub3QgY29tbW9uOiByb3RhdGVzIGludm9sdmluZyBtZW1vcnkKKyAgICAgICAg
ICAgICAgICAvLyBkb24ndCBhcmlzZSBmb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGV5IHdpbGwg
b25seSBoYXBwZW4gZm9yIHJvdGF0ZXMgaW4gdXNlciBjb2RlCisgICAgICAgICAgICAgICAgLy8g
aWYgc29tZSBvZiB0aGUgdmFyaWFibGVzIGdldCBzcGlsbGVkLiBJdCdzIGhhcmQgdG8gaW1hZ2lu
ZSBhIHByb2dyYW0gdGhhdCByb3RhdGVzCisgICAgICAgICAgICAgICAgLy8gZGF0YSBhcm91bmQg
aW4gdmFyaWFibGVzIHdoaWxlIGFsc28gZG9pbmcgYSBjb21iaW5hdGlvbiBvZiB1aW50MzItPnVp
bnQ2NCBhbmQKKyAgICAgICAgICAgICAgICAvLyBpbnQ2NC0+aW50MzIgY2FzdHMuCisgICAgICAg
ICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHJvdGF0ZS5sb29wKQorICAgICAgICAg
ICAgICAgICAgICBjYW5Td2FwICY9IHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYXNJbmRleCkKKyAgICAgICAgICAgICAgICBjYW5T
d2FwICY9IGlzVmFsaWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OkluZGV4KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjYW5Td2FwKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSByb3RhdGUubG9vcC5zaXplKCkgLSAxOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQXJnIGxl
ZnQgPSByb3RhdGUubG9vcFtpXS5zcmMoKTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHQgPSBy
b3RhdGUubG9vcFtpICsgMV0uc3JjKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc01l
bW9yeSgpICYmIHJpZ2h0LmlzTWVtb3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBzdXBlciByYXJlIG91dGNvbWUuIFJvdGF0ZXMgYXJlIHJhcmUuIFNw
aWxscyBhcmUgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gTW92aW5nIGRhdGEgYmV0d2Vl
biB0d28gc3BpbGxzIGlzIHJhcmUuIFRvIGdldCBoZXJlIGEgbG90IG9mIHJhcmUgc3R1ZmYgaGFz
IHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBoYXBwZW4gYXQgb25jZS4KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRtcCBzY3JhdGNoID0gZ2V0U2NyYXRj
aCgwLCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgbGVmdCwg
c2NyYXRjaCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwg
b3JpZ2luLCBzY3JhdGNoLCByaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKEluc3QobW92ZUZvcldpZHRoKHN3YXBXaWR0aCksIG9yaWdpbiwgc2NyYXRjaCwgbGVmdCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm5TY3JhdGNoKDAsIHNjcmF0Y2gpOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAobGVmdC5pc01lbW9yeSgpKQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAo
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoSW5zdChzd2FwLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBhaXIud2lkdGgoKSA9PSBzd2FwV2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGFpci53
aWR0aCgpID09IEFyZzo6V2lkdGgzMik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3dhcFdpZHRoID09IEFyZzo6V2lkdGg2NCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocGFpci5kc3QoKS5pc1RtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZG8g
YW4gZXh0cmEgemVybyBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KE1vdmUzMiwgb3JpZ2luLCBwYWlyLmRzdCgpLCBwYWlyLmRzdCgpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdHJlYXQgdGhpcyBh
cyBhIHNoaWZ0IHNvIGxvbmcgYXMgd2UgdGFrZSB0aGUgbGFzdCBkZXN0aW5hdGlvbiAoaS5lLiBm
aXJzdAorICAgICAgICAgICAgLy8gc291cmNlKSBhbmQgc2F2ZSBpdCBmaXJzdC4gVGhlbiB3ZSBo
YW5kbGUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYWlyIGluIHRoZSByb3RhdGUKKyAgICAgICAg
ICAgIC8vIHNwZWNpYWxseSwgYWZ0ZXIgd2UgcmVzdG9yZSB0aGUgbGFzdCBkZXN0aW5hdGlvbi4g
VGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FyZSB0bworICAgICAgICAgICAgLy8gZmluZCBh
IHNjcmF0Y2ggcmVnaXN0ZXIuIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBoYXZlIGEgcm90YXRlIHRo
YXQgdXNlcyB0aGUgZW50aXJlCisgICAgICAgICAgICAvLyBhdmFpbGFibGUgcmVnaXN0ZXIgZmls
ZS4KKworICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPSBmaW5kUG9zc2libGVTY3JhdGNoKAorICAg
ICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciBwYWlyIDogcm90YXRlLmxv
b3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnNyYygpLnVzZXNUbXAodG1w
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFpci5kc3QoKS51c2VzVG1wKHRtcCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBtb3N0IGxpa2VseSB1c2Ugb2Ygc2NyYXRjaCBy
ZWdpc3RlcnMuCisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0U2NyYXRjaCgwLCBzY3JhdGNoKTsK
KworICAgICAgICAgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGZvdW5kIGEgc2NyYXRjaCByZWdpc3Rl
ci4gV2hlbiB0aGlzIGhhcHBlbnMsIHdlIGNhbiBqdXN0IHVzZSB0aGUgc3BpbGwKKyAgICAgICAg
ICAgIC8vIHNsb3QgZGlyZWN0bHkuCisgICAgICAgICAgICBBcmcgcm90YXRlU2F2ZSA9IHNjcmF0
Y2ggPyBBcmcoc2NyYXRjaCkgOiBzY3JhdGNoZXNbMF07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGhhbmRsZVNoaWZ0UGFpcigKKyAgICAgICAgICAgICAgICBTaHVmZmxlUGFpcihyb3RhdGUu
bG9vcC5sYXN0KCkuZHN0KCksIHJvdGF0ZVNhdmUsIHJvdGF0ZS5sb29wWzBdLndpZHRoKCkpLCAx
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpOyBp
LS0gPiAxOykKKyAgICAgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIocm90YXRlLmxvb3BbaV0s
IDEpOworCisgICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoCisgICAgICAgICAgICAgICAgU2h1
ZmZsZVBhaXIocm90YXRlU2F2ZSwgcm90YXRlLmxvb3BbMF0uZHN0KCksIHJvdGF0ZS5sb29wWzBd
LndpZHRoKCkpLCAxKTsKKworICAgICAgICAgICAgaWYgKHNjcmF0Y2gpCisgICAgICAgICAgICAg
ICAgcmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbW1p
dFJlc3VsdCgpOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQuaXNFbXB0eSgpKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IHJlc3VsdFBhY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVz
dWx0LmFwcGVuZFZlY3RvcihyZXN1bHRQYWNrc1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitWZWN0b3I8SW5zdD4gZW1pdFNodWZmbGUoCisgICAgY29uc3QgVmVjdG9yPFNodWZmbGVQ
YWlyPiYgcGFpcnMsCisgICAgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBncFNjcmF0Y2gsIGNv
bnN0IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZnBTY3JhdGNoLAorICAgIFZhbHVlKiBvcmlnaW4pCit7
CisgICAgVmVjdG9yPFNodWZmbGVQYWlyPiBncFBhaXJzOworICAgIFZlY3RvcjxTaHVmZmxlUGFp
cj4gZnBQYWlyczsKKyAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDogcGFpcnMpIHsK
KyAgICAgICAgaWYgKHBhaXIuc3JjKCkuaXNNZW1vcnkoKSAmJiBwYWlyLmRzdCgpLmlzTWVtb3J5
KCkgJiYgcGFpci53aWR0aCgpID4gQXJnOjpwb2ludGVyV2lkdGgoKSkgeworICAgICAgICAgICAg
Ly8gOC1ieXRlIG1lbW9yeS10by1tZW1vcnkgbW92ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0gYXJl
IGJlc3QgaGFuZGxlZCBhcyBmbG9hdCBtb3Zlcy4KKyAgICAgICAgICAgIGZwUGFpcnMuYXBwZW5k
KHBhaXIpOworICAgICAgICB9IGVsc2UgaWYgKHBhaXIuc3JjKCkuaXNHUCgpICYmIHBhaXIuZHN0
KCkuaXNHUCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ3BQYWlycyBnZXRz
IG1lbW9yeS10by1tZW1vcnkgc2h1ZmZsZXMuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UKKyAg
ICAgICAgICAgIC8vIGNhbiBkbyB0aGF0IG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgR1BScywgZXhj
ZXB0IGluIHRoZSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBncFBhaXJzLmFwcGVu
ZChwYWlyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWly
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW5zdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3IoZW1pdFNodWZmbGUoZ3BQYWlycywgZ3BTY3JhdGNoLCBBcmc6OkdQLCBvcmlnaW4pKTsK
KyAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGZwUGFpcnMsIGZwU2NyYXRjaCwg
QXJnOjpGUCwgb3JpZ2luKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckVtaXRTaHVmZmxlX2gKKyNkZWZpbmUg
QWlyRW1pdFNodWZmbGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIFNodWZmbGVQYWlyIHsKK3B1YmxpYzoKKyAgICBTaHVmZmxlUGFpcigp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBTaHVmZmxlUGFpcihjb25zdCBBcmcmIHNyYywgY29u
c3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lkdGgpCisgICAgICAgIDogbV9zcmMoc3JjKQorICAg
ICAgICAsIG1fZHN0KGRzdCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgIHsKKyAgICB9
CisKKyAgICBjb25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29u
c3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQorCisgICAgLy8gVGhlIHdpZHRo
IGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNhbiBvbmx5IGNob29zZSBX
aWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93LgorICAgIC8vIEZvciBHUCwgaXQgcGlja3MgYmV0
d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlRmxvYXQg
YW5kIE1vdmVEb3VibGUuCisgICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2lkdGg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICBBcmcgbV9zcmM7CisgICAgQXJnIG1fZHN0OworICAgIEFyZzo6V2lkdGggbV93
aWR0aCB7IEFyZzo6V2lkdGg4IH07Cit9OworCisvLyBQZXJmb3JtIGEgc2h1ZmZsZSBvZiBhIGdp
dmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9yeS4gWW91IHNob3VsZCBw
YXNzIGl0IGFzCisvLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHNjcmF0Y2gg
cmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQgaXMsIHRoZXkncmUKKy8v
IHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBzaHVmZmxlLCBoYXZlIHRo
ZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90CisvLyBsaXZlIGF0IHRoZSBz
aHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRvbid0IGhhdmUgc2NyYXRj
aCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCisvLyB5b3UgZG9uJ3QgZmVlbCBsaWtlIGxvb2tp
bmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25zLiBJdCdzIGFsd2F5cyBz
YWZlIHRvIHBhc3MgYQorLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25zLCBhbmQgcmVwbGFjaW5n
IGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNhbiBiZSB2aWV3ZWQgYXMg
YW4KKy8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRhbnQgb3B0aW1pemF0aW9u
LiBTb21lIG1vcmUgbm90ZXM6CisvLworLy8gLSBXZSBkZWZpbmUgc2NyYXRjaCByZWdpc3RlcnMg
YXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1ZmZsZSBhbmQgYXJlIG5v
dCBvbmUgb2YKKy8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1ZmZsZS4gTm90IGJlaW5n
IGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbm5vdAorLy8g
ICBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIHNvdXJjZXMgb2YgdGhlIHNodWZmbGUuCisvLworLy8g
LSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdoZW4geW91IGhhdmUg
c2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3RoCisvLyAgIGFzIHNvdXJjZSBh
bmQgZGVzdGluYXRpb24uCisvLworLy8gLSBZb3UncmUgZ3VhcmFudGVlZCBub3QgdG8gbmVlZCBh
bnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2FwIGluc3RydWN0aW9uIGF2YWls
YWJsZSBmb3IKKy8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBoYXZlIGFueSBtZW1vcnkgbG9j
YXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIG9mCisv
LyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2IHdoaWxlIEZQIG5ldmVyIHN1
cHBvcnRzIFN3YXAuCisvLworLy8gLSBQYXNzaW5nIG1lbW9yeSBsb2NhdGlvbnMgYXMgc2NyYXRj
aCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9u
IGlzCisvLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2UgZW1pdFNodWZmbGUoKSB0byBw
aWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9lcyBuZWVkCisvLyAgIHNjcmF0
Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2FtZW50IGlzIHRvIGVuc3VyZSB0
aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKKy8vICAgcmVnaXN0ZXIgYWxsb2NhdGlv
bi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZmbGUgaW5zdHJ1Y3Rpb24gc28g
dGhhdCB3ZSBjYW4gZGVmZXIKKy8vICAgc2h1ZmZsaW5ncyB1bnRpbCBhZnRlciByZWdhbGxvYy4K
Ky8vCisvLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkgcGFpcnMgYXJlIG5vdCB2ZXJ5
IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5b3Ugd2FudAorLy8gICBwZXJm
b3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBtYWtpbmcgc3VyZSB0aGF0IHlv
dSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KKy8vICAgZ2V0IGFjY2VwdGFibGUg
cGVyZm9ybWFuY2UuCisvLworLy8gTk9URTogVXNlIHRoaXMgbWV0aG9kIChhbmQgaXRzIGZyaWVu
ZCBiZWxvdykgdG8gZW1pdCBzaHVmZmxlcyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLiBCZWZv
cmUKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXQgaXMgbXVjaCBiZXR0ZXIgdG8gc2ltcGx5IHVz
ZSB0aGUgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KK1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAg
ICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4gc2NyYXRjaCwgQXJnOjpU
eXBlLCBWYWx1ZSogb3JpZ2luKTsKKworLy8gUGVyZm9ybSBhIHNodWZmbGUgdGhhdCBpbnZvbHZl
cyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIG1lbW9yeSBs
b2NhdGlvbnMKKy8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBhYm92ZS4K
K1ZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKKyAgICBjb25zdCBWZWN0b3I8U2h1ZmZsZVBhaXI+
JiwKKyAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRjaCwgY29uc3Qgc3RkOjph
cnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCisgICAgVmFsdWUqIG9yaWdpbik7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICsz
NSw4IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgiCisjaW5jbHVkZSAiQWly
TG93ZXJNYWNyb3MuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUgIkFp
ck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3RlcnMu
aCIKQEAgLTY1LDYgKzY3LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2Rl
KQogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIGxvd2VyTWFjcm9zKGNvZGUp
OworCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRy
YW5zZm9ybWF0aW9ucy4KICAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKQEAgLTgw
LDYgKzg0LDggQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIGVs
c2UKICAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29kZSk7CiAKKyAgICBsb3dl
ckFmdGVyUmVnQWxsb2MoY29kZSk7CisKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBw
cm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQu
IEl0IGFsc28KICAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1z
YXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KICAgICBoYW5kbGVDYWxsZWVTYXZlcyhj
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJ
KHJldmlzaW9uIDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSArMzgsMTEgQEAgY2xhc3MgQ29kZTsKIAogLy8g
VGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0
aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBhbGxvY2F0aW9u
IGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENv
ZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuIENDYWxs
SGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAvLyBp
biB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgotdm9pZCBnZW5lcmF0ZShD
b2RlJiwgQ0NhbGxIZWxwZXJzJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKENv
ZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuY3BwCShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsMTggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCit2b2lkIEluc2Vy
dGlvblNldDo6aW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4LCBjb25zdCBWZWN0b3I8SW5zdD4mIGlu
c3RzKQoreworICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6IGluc3RzKQorICAgICAgICBpbnNl
cnRJbnN0KGluZGV4LCBpbnN0KTsKK30KKwordm9pZCBJbnNlcnRpb25TZXQ6Omluc2VydEluc3Rz
KHNpemVfdCBpbmRleCwgVmVjdG9yPEluc3Q+JiYgaW5zdHMpCit7CisgICAgZm9yIChJbnN0JiBp
bnN0IDogaW5zdHMpCisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIFdURk1vdmUoaW5zdCkpOwor
fQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAg
ICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5o
CShyZXZpc2lvbiAxOTUwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDkgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPElu
c3Q+KGluc3QpKSk7CiAgICAgfQorCisgICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgs
IGNvbnN0IFZlY3RvcjxJbnN0PiYpOworICAgIHZvaWQgaW5zZXJ0SW5zdHMoc2l6ZV90IGluZGV4
LCBWZWN0b3I8SW5zdD4mJik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9u
IDE5NTA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw2ICs4NSwxNSBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29kZSAhPSBOb3AgfHwgYXJn
cy5zaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZyBhcmcsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAg
ICBhcHBlbmQoYXJndW1lbnRzLi4uKTsKKyAgICB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2Ug
ZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0
aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVk
aXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3Un
cmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJFbWl0U2h1ZmZsZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3Mu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlv
cml0eS5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25h
bWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCit7CisgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlckFmdGVyUmVnQWxsb2MiKTsKKworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBsb3dlckFmdGVyUmVn
QWxsb2M6XG4iLCBjb2RlKTsKKworICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2Vk
UmVnaXN0ZXJzOworCisgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2Fs
YyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBSZWdpc3RlclNldCBzZXQ7CisKKyAgICAgICAgICAgIGJvb2wgaXNSZWxldmFudCA9IGluc3Qu
b3Bjb2RlID09IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoaXNSZWxldmFudCkgeworICAgICAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
cmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgaWYgKGlzUmVsZXZhbnQpCisgICAg
ICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoJmluc3QsIHNldCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJTZXQgc2V0LCBBcmc6
OlR5cGUgdHlwZSkgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKKyAgICAgICAgc3RkOjphcnJheTxB
cmcsIDI+IHJlc3VsdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkg
eworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmICgh
c2V0LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IFRtcChyZWcp
OworICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAg
ICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soCisgICAgICAgICAgICAgICAgICAgIGNvZGUu
YWRkU3RhY2tTbG90KAorICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpieXRlcyhBcmc6OmNv
bnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91cykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIC8vIE5vdyB0cmFuc2Zvcm0gdGhlIGNvZGUuCisg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0
JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5z
dC5vcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2h1ZmZsZTogeworICAgICAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAg
ICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyBpICs9IDMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQXJnIHNyYyA9IGluc3QuYXJnc1tpICsgMF07CisgICAgICAgICAgICAgICAgICAg
IEFyZyBkc3QgPSBpbnN0LmFyZ3NbaSArIDFdOworICAgICAgICAgICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoID0gaW5zdC5hcmdzW2kgKyAyXS53aWR0aCgpOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSB1c2VkIHJlZ2lzdGVyIHNldCBjb250YWlucyB0aGluZ3MgbGl2ZSBhZnRlciB0
aGUgc2h1ZmZsZS4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIGVtaXRTaHVmZmxlKCkgd2Fu
dHMgYSBzY3JhdGNoIHJlZ2lzdGVyIHRoYXQgaXMgbm90IGp1c3QgZGVhZCBidXQgYWxzbyBkb2Vz
IG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcmZlcmUgd2l0aCBlaXRoZXIgc291cmNl
cyBvciBkZXN0aW5hdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXhjbHVkZVJlZ2lz
dGVycyA9IFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmZvckVhY2hU
bXBGYXN0KGV4Y2x1ZGVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICBkc3QuZm9yRWFj
aFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBn
cFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBz
dGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHNldCwgQXJnOjpGUCk7
CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAorICAgICAgICAgICAg
ICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRj
aCwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENvbGRD
Q2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4t
PmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBsaXZlUmVn
cyA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCByZWdzVG9TYXZlID0gbGl2ZVJlZ3M7CisgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAg
IHJlZ3NUb1NhdmUuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAg
ICAgICAgICAgICAgcmVnc1RvU2F2ZS5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3
YXJlUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlVXNlZCA9
IHJlZ3NUb1NhdmU7CisgICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0g
Y29tcHV0ZUNDYWxsaW5nQ29udmVudGlvbihjb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
VG1wIHJlc3VsdCA9IGNDYWxsUmVzdWx0KHZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAg
IEFyZyBvcmlnaW5hbFJlc3VsdCA9IHJlc3VsdCA/IGluc3QuYXJnc1sxXSA6IEFyZygpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+
Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIEFyZyBzcmMgPSBpbnN0LmFyZ3NbcmVzdWx0
ID8gKGkgPj0gMSA/IGkgKyAxIDogaSkgOiBpIF07CisgICAgICAgICAgICAgICAgICAgIEFyZyBk
c3QgPSBkZXN0aW5hdGlvbnNbaV07CisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lk
dGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworICAgICAgICAgICAgICAg
ICAgICBwYWlycy5hcHBlbmQoU2h1ZmZsZVBhaXIoc3JjLCBkc3QsIHdpZHRoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBleGNsdWRlUmVnaXN0ZXJzID0gWyZdIChUbXAgdG1wKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlVXNlZC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmZvckVhY2hUbXBGYXN0KGV4Y2x1ZGVSZWdpc3Rl
cnMpOworICAgICAgICAgICAgICAgICAgICBkc3QuZm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lz
dGVycyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RkOjphcnJheTxB
cmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhwcmVVc2VkLCBBcmc6OkdQKTsKKyAgICAg
ICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZnBTY3JhdGNoID0gZ2V0U2NyYXRjaGVzKHBy
ZVVzZWQsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEFs
c28gbmVlZCB0byBzYXZlIGFsbCBsaXZlIHJlZ2lzdGVycy4gRG9uJ3QgbmVlZCB0byB3b3JyeSBh
Ym91dCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIuCisgICAgICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsUmVzdWx0LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
Z3NUb1NhdmUuY2xlYXIob3JpZ2luYWxSZXN1bHQucmVnKCkpOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOworICAgICAgICAgICAgICAgIHJlZ3NUb1NhdmUu
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmcg
YXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJn
Ojpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc3RhY2tTbG90ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
LmFkZFN0YWNrU2xvdChBcmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcs
IEFyZzo6c3RhY2soc3RhY2tTbG90KSwgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrU2xvdHMuYXBwZW5kKHN0YWNrU2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIlByZS1jYWxsIHBhaXJzIGZvciAiLCBpbnN0LCAiOiAiLCBsaXN0RHVtcChwYWlycyksICJc
biIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBlbWl0U2h1ZmZsZShwYWly
cywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7CisKKyAgICAgICAgICAgICAg
ICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKwor
ICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJl
Z2lzdGVycy4KKyAgICAgICAgICAgICAgICBwYWlycy5yZXNpemUoMCk7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc3RhY2tTbG90SW5kZXggPSAwOworICAgICAgICAgICAgICAgIHJlZ3NUb1Nh
dmUuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAgdG1wKHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBB
cmcgYXJnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0g
QXJnOjpjb25zZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gc3RhY2tTbG90c1tzdGFja1Nsb3RJbmRleCsrXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihBcmc6OnN0
YWNrKHN0YWNrU2xvdCksIGFyZywgd2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBTaHVmZmxl
UGFpciBwYWlyKHJlc3VsdCwgb3JpZ2luYWxSZXN1bHQsIEFyZzo6d2lkdGhGb3JCM1R5cGUodmFs
dWUtPnR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQocGFpcik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ3BTY3JhdGNoID0gZ2V0U2NyYXRj
aGVzKGxpdmVSZWdzLCBBcmc6OkdQKTsKKyAgICAgICAgICAgICAgICBmcFNjcmF0Y2ggPSBnZXRT
Y3JhdGNoZXMobGl2ZVJlZ3MsIEFyZzo6RlApOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0cygKKyAgICAgICAgICAgICAgICAgICAgaW5z
dEluZGV4ICsgMSwgZW1pdFNodWZmbGUocGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0
Lm9yaWdpbikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworCisgICAg
ICAgIGJsb2NrLT5pbnN0cygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChJ
bnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
Q29kZSBhZnRlciBsb3dlckFmdGVyUmVnQWxsb2M6XG4iLCBjb2RlKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJS
ZWdBbGxvYy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMb3dlckFmdGVyUmVnQWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
TG93ZXJBZnRlclJlZ0FsbG9jX2gKKyNkZWZpbmUgQWlyTG93ZXJBZnRlclJlZ0FsbG9jX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBsb3dlcnMgU2h1ZmZsZSBhbmQg
Q29sZENDYWxsIGluc3RydWN0aW9ucy4gVGhpcyBwaGFzZSBpcyBkZXNpZ25lZCB0byBiZSBydW4g
YWZ0ZXIgcmVnaXN0ZXIKKy8vIGFsbG9jYXRpb24uCisKK3ZvaWQgbG93ZXJBZnRlclJlZ0FsbG9j
KENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNy
b3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJMb3dlck1hY3Jvcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckNDYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFz
ZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImxvd2VyTWFjcm9zIik7CisKKyAgICBJbnNlcnRpb25T
ZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9j
ay0+YXQoaW5zdEluZGV4KTsKKworICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBDQ2FsbDogeworICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7CisKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUs
IHZhbHVlKTsKKworICAgICAgICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxl
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUo
KSA9PSBWb2lkID8gMCA6IDE7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IGRlc3RpbmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVB
cmd1bWVudHMuYXJncy5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOwor
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lk
dGhBcmcoQXJnOjp3aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgs
IFdURk1vdmUoc2h1ZmZsZUFyZ3VtZW50cykpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNh
dGUgdGhhdCB3ZSdyZSB1c2luZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgorICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uc1swXSA9IGluc3QuYXJnc1swXTsKKworICAgICAgICAgICAg
ICAgIC8vIFNhdmUgd2hlcmUgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0
LgorICAgICAgICAgICAgICAgIEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQg
PyBBcmcoKSA6IGluc3QuYXJnc1sxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKKwor
ICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgRmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5z
dEluZGV4ICsgMSwgTW92ZUZsb2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91
YmxlLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJlc3VsdCwgcmVz
dWx0RHN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5k
ZXggKyAxLCBNb3ZlLCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyTG93ZXJNYWNyb3NfaAorI2RlZmluZSBBaXJMb3dlck1hY3Jvc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFpciBoYXMgc29tZSBvcGNvZGVzIHRoYXQg
YXJlIHZlcnkgaGlnaC1sZXZlbCBhbmQgYXJlIG1lYW50IHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGxvdy1sZXZlbAorLy8ga25vd2xlZGdlIGluIHRoZSBCMy0+QWlyIGxvd2VyaW5nLiBUaGUgY3Vy
cmVudCBleGFtcGxlIGlzIENDYWxsLgorCit2b2lkIGxvd2VyTWFjcm9zKENvZGUmKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckxvd2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTUwNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNv
cHkpCkBAIC00MTcsNiArNDE3LDE0IEBAIE1vdmUgVTpHOlB0ciwgRDpHOlB0cgogICAgIFRtcCwg
SW5kZXggYXMgc3RvcmVQdHIKICAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0cgogCit4ODY6
IFN3YXAzMiBVRDpHOjMyLCBVRDpHOjMyCisgICAgVG1wLCBUbXAKKyAgICBUbXAsIEFkZHIKKwor
eDg2XzY0OiBTd2FwNjQgVUQ6Rzo2NCwgVUQ6Rzo2NAorICAgIFRtcCwgVG1wCisgICAgVG1wLCBB
ZGRyCisKIE1vdmUzMiBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5k
MzJUb1B0cgogICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKQEAgLTY4Miw3ICs2OTAsMTkgQEAgUmV0
RG91YmxlIFU6Rjo2NCAvcmV0dXJuCiAKIE9vcHMgL3Rlcm1pbmFsCiAKKyMgQSBTaHVmZmxlIGlz
IGEgbXVsdGktc291cmNlLCBtdWx0aS1kZXN0aW5hdGlvbiBtb3ZlLiBJdCBzaW11bHRhbmVvdXNs
eSBkb2VzIG11bHRpcGxlIG1vdmVzIGF0IG9uY2UuCisjIFRoZSBtb3ZlcyBhcmUgc3BlY2lmaWVk
IGFzIHRyaXBsZXRzIG9mIHNyYywgZHN0LCBhbmQgd2lkdGguIEZvciBleGFtcGxlIHlvdSBjYW4g
cmVxdWVzdCBhIHN3YXAgdGhpcworIyB3YXk6CisjICAgICBTaHVmZmxlICV0bXAxLCAldG1wMiwg
NjQsICV0bXAyLCAldG1wMSwgNjQKK2N1c3RvbSBTaHVmZmxlCisKICMgQWlyIGFsbG93cyBmb3Ig
ZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVs
eSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAogIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVy
YW5kLgogY3VzdG9tIFBhdGNoCiAKKyMgSW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIGxvd2VyaW5nIEMg
Y2FsbHMuIFRoZXNlIGRvbid0IG1ha2UgaXQgdG8gQWlyIGdlbmVyYXRpb24uIFRoZXkgZ2V0IGxv
d2VyZWQgdG8KKyMgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFRoZSBvcmlnaW4gVmFsdWUgbXVzdCBi
ZSBhIENDYWxsVmFsdWUuCitjdXN0b20gQ0NhbGwKK2N1c3RvbSBDb2xkQ0NhbGwKKworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3Jp
dHkuaAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBjb25zdCBW
ZWN0b3I8dHlwZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBlCiAgICAgcmV0dXJuIFJlZ2lzdGVyc0lu
UHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7CiB9CiAKLWNvbnN0IFZlY3Rv
cjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CitKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOwogCiB9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzA3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0
ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQ
cmlvcml0eS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgor
I2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1
ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNs
dWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwor
Ly8gV2UgZG9uJ3QgaGF2ZSBhIE5PX1JFVFVSTl9EVUVfVE9fRVhJVCwgbm9yIHNob3VsZCB3ZS4g
VGhhdCdzIHJpZGljdWxvdXMuCitzdGF0aWMgYm9vbCBoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVy
bklzU3R1cGlkKCkgeyByZXR1cm4gdHJ1ZTsgfQorCitzdGF0aWMgdm9pZCB1c2FnZSgpCit7Cisg
ICAgZGF0YUxvZygiVXNhZ2U6IHRlc3RiMyBbPGZpbHRlcj5dXG4iKTsKKyAgICBpZiAoaGlkZGVu
VHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpKQorICAgICAgICBleGl0KDEpOworfQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXI7CisKK25hbWVzcGFjZSB7CisKK1N0YXRpY0xvY2sgY3Jhc2hMb2NrOwor
CisvLyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYg
YXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEhKHgp
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2soKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1RGUmVwb3J0QXNz
ZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICN4
KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitWTSogdm07CisK
K3N0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUoQjM6OlByb2NlZHVyZSYg
cHJvYykKK3sKKyAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLmNvZGUoKSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvYy5jb2RlKCksIGppdCk7CisgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgKCJ0ZXN0YWlyIGNvbXBpbGF0aW9uIikpLCBwcm9jLnJlbGVhc2VCeXByb2R1
Y3RzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CitUIGludm9rZShjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0
PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihCMzo6UHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIGludm9r
ZTxUPigqY29tcGlsZShwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3RT
aW1wbGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJv
Yy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSg0MiksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4o
cHJvYykgPT0gNDIpOworfQorCisvLyBVc2UgdGhpcyB0byBwdXQgYSBjb25zdGFudCBpbnRvIGEg
cmVnaXN0ZXIgd2l0aG91dCBBaXIgYmVpbmcgYWJsZSB0byBzZWUgdGhlIGNvbnN0YW50LgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgbG9hZENvbnN0YW50SW1wbChCYXNpY0Jsb2NrKiBibG9j
aywgVCB2YWx1ZSwgQjM6OkFpcjo6T3Bjb2RlIG1vdmUsIFRtcCB0bXAsIFRtcCBzY3JhdGNoKQor
eworICAgIHN0YXRpYyBTdGF0aWNMb2NrIGxvY2s7CisgICAgc3RhdGljIHN0ZDo6bWFwPFQsIFQq
PiogbWFwOyAvLyBJJ20gbm90IG1lc3Npbmcgd2l0aCBIYXNoTWFwJ3MgcHJvYmxlbXMgd2l0aCBp
bnRlZ2Vycy4KKworICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgIGlmICghbWFwKQor
ICAgICAgICBtYXAgPSBuZXcgc3RkOjptYXA8VCwgVCo+KCk7CisKKyAgICBpZiAoIW1hcC0+Y291
bnQodmFsdWUpKQorICAgICAgICAoKm1hcClbdmFsdWVdID0gbmV3IFQodmFsdWUpOworCisgICAg
VCogcHRyID0gKCptYXApW3ZhbHVlXTsKKyAgICBibG9jay0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PihwdHIpKSwgc2NyYXRjaCk7CisgICAg
YmxvY2stPmFwcGVuZChtb3ZlLCBudWxscHRyLCBBcmc6OmFkZHIoc2NyYXRjaCksIHRtcCk7Cit9
CisKK3ZvaWQgbG9hZENvbnN0YW50KEJhc2ljQmxvY2sqIGJsb2NrLCBpbnRwdHJfdCB2YWx1ZSwg
VG1wIHRtcCkKK3sKKyAgICBsb2FkQ29uc3RhbnRJbXBsPGludHB0cl90PihibG9jaywgdmFsdWUs
IE1vdmUsIHRtcCwgdG1wKTsKK30KKwordm9pZCBsb2FkRG91YmxlQ29uc3RhbnQoQmFzaWNCbG9j
ayogYmxvY2ssIGRvdWJsZSB2YWx1ZSwgVG1wIHRtcCwgVG1wIHNjcmF0Y2gpCit7CisgICAgbG9h
ZENvbnN0YW50SW1wbDxkb3VibGU+KGJsb2NrLCB2YWx1ZSwgTW92ZURvdWJsZSwgdG1wLCBzY3Jh
dGNoKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKQoreworICAgIEIzOjpQcm9j
ZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUklu
Zm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdU
MikpOworICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRd
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyKTsKKyAgICBD
SEVDSyh0aGluZ3NbMl0gPT0gNCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMpOworfQorCit2
b2lkIHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsK
KyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxv
YWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICByb290LT5hcHBl
bmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzVdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFy
Zzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDIpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzKTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworfQorCit2b2lk
IHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAg
Q29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUu
YWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAg
IGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBU
bXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUklu
Zm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdU
NykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDQp
LCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUklu
Zm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3Qg
dGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwg
QXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAg
CisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGlu
Z3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5n
c1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3Nb
Nl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVm
ZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAg
Q29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUu
YWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAg
IGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBU
bXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUklu
Zm86OnJlZ1Q2KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdU
NykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5m
bzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJ
bmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAg
ICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUklu
Zm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3Qg
dGhpbmdzWzhdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwg
QXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwg
QXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwg
QXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAg
CisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGlu
Z3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5n
c1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzRdID09IDQpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSA1KTsKKyAgICBDSEVDSyh0aGluZ3Nb
Nl0gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzddID09IDcpOworfQorCit2b2lkIHRlc3RTaHVm
ZmxlU2ltcGxlUm90YXRlKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRD
b25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQo
cm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAg
ICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMyX3QgdGhpbmdzWzRd
OworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihp
bnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBD
SEVDSyh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDQpOworfQorCit2
b2lkIHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHBy
b2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9jayogcm9v
dCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdU
MSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGlu
dDMyX3QgdGhpbmdzWzRdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFz
ZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMy
X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDEpOworfQorCit2b2lkIHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygpCit7CisgICAg
QjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAg
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsK
KworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDM1KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgdW5zaWduZWQgY291bnQgPSAxOworICAgIGZvciAoUmVnIHJlZyA6IHJlZ3MpIHsKKyAgICAg
ICAgaWYgKHJlZyAhPSBSZWcoR1BSSW5mbzo6cmVnVDApKQorICAgICAgICAgICAgbG9hZENvbnN0
YW50KHJvb3QsIGNvdW50KyssIFRtcChyZWcpKTsKKyAgICB9CisgICAgSW5zdCYgc2h1ZmZsZSA9
IHJvb3QtPmFwcGVuZChTaHVmZmxlLCBudWxscHRyKTsKKyAgICBmb3IgKFJlZyByZWcgOiByZWdz
KSB7CisgICAgICAgIGlmIChyZWcgIT0gUmVnKEdQUkluZm86OnJlZ1QwKSkKKyAgICAgICAgICAg
IHNodWZmbGUuYXBwZW5kKFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOworICAgIH0KKworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUu
YWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90
S2luZDo6TG9ja2VkKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7
ICsraSkKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0p
LCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKworICAgIFZlY3Rvcjxp
bnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3Qp
KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGlu
dDMyX3QpKSk7CisgICAgfQorICAgIAorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgZm9yIChpbnQzMl90IHRo
aW5nIDogdGhpbmdzKQorICAgICAgICBDSEVDSyh0aGluZyA9PSAzNSk7Cit9CisKK3ZvaWQgdGVz
dFNodWZmbGVUcmVlU2hpZnQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFu
dChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwg
NSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChH
UFJJbmZvOjpyZWdUNSkpOworICAgIGxvYWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6
cmVnVDYpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7
CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRt
cChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6
cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGlu
Z3NbOF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0
aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6
OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6
ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQ
UkluZm86OnJlZ1Q2KSwgQXJnOjphZGRyKGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6
OmFkZHIoYmFzZSwgNyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJd
ID09IDEpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0g
PT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s2XSA9
PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbN10gPT0gNCk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVU
cmVlU2hpZnRCYWNrd2FyZCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUm
IGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJs
b2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1
LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpy
ZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsK
KyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJl
Z1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
CisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpy
ZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5n
c1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6
YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXpl
b2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6
YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOworICAgIAorICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdzWzBd
ID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0g
PT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDIpOworICAgIENIRUNLKHRoaW5nc1s0XSA9
PSAyKTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdzWzZdID09
IDMpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA0KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVRy
ZWVTaGlmdE90aGVyQmFja3dhcmQoKQoreworICAgIC8vIE5PVEU6IFRoaXMgdGVzdCB3YXMgbXkg
b3JpZ2luYWwgYXR0ZW1wdCBhdCBUcmVlU2hpZnRCYWNrd2FyZCBidXQgbWlzdGFrZXMgd2VyZSBt
YWRlLiBTbywgdGhpcworICAgIC8vIGVuZHMgdXAgYmVpbmcganVzdCBhIHdlaXJkIHRlc3QuIEJ1
dCB3ZWlyZCB0ZXN0cyBhcmUgdXNlZnVsLCBzbyBJIGtlcHQgaXQuCisgICAgCisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEs
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BS
SW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwor
ICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOworICAgIGxvYWRDb25zdGFudChyb290LCA4
LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpy
ZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIp
LAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNiksIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDcpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUNyksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s4XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFzZSwgNiAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6
ZW9mKHRoaW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworCisgICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSA4
KTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gOCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDcp
OworICAgIENIRUNLKHRoaW5nc1s0XSA9PSA3KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNik7
CisgICAgQ0hFQ0sodGhpbmdzWzZdID09IDYpOworICAgIENIRUNLKHRoaW5nc1s3XSA9PSA1KTsK
K30KKwordm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlU2hpZnRzKCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAgICByb290LT5hcHBlbmQoCisg
ICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAg
VG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhB
cmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6
cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1w
KEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwg
QXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwg
QXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQo
TW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAg
CisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGlu
Z3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5n
c1syXSA9PSAzKTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7CisgICAgQ0hFQ0sodGhpbmdz
WzRdID09IDMpOworICAgIENIRUNLKHRoaW5nc1s1XSA9PSAxKTsKK30KKwordm9pZCB0ZXN0U2h1
ZmZsZVJvdGF0ZVdpdGhGcmluZ2UoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5h
ZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25z
dGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRt
cChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwg
bnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQ
UkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdU
NSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRoaW5nc1s2
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRk
cihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2Yo
aW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCks
IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhp
bmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hFQ0sodGhp
bmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVDSyh0aGlu
Z3NbM10gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOworICAgIENIRUNLKHRoaW5n
c1s1XSA9PSAzKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkK
K3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBU
bXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUklu
Zm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdU
NCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbNl07CisgICAgVG1wIGJhc2UgPSBjb2Rl
Lm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJh
c2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQz
Ml90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykp
OworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hF
Q0sodGhpbmdzWzBdID09IDMpOworICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKKyAgICBDSEVD
Syh0aGluZ3NbMl0gPT0gMik7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDEpOworICAgIENIRUNL
KHRoaW5nc1s0XSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVNdWx0aXBsZVJvdGF0ZXMoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsK
KyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxv
YWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQzMl90IHRo
aW5nc1s2XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFy
Zzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7CisgICAgQ0hF
Q0sodGhpbmdzWzFdID09IDEpOworICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gNik7CisgICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOworICAgIENIRUNL
KHRoaW5nc1s1XSA9PSA1KTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0QW5kUm90YXRlKCkK
K3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJv
b3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIGxvYWRDb25zdGFudChyb290LCAzLCBU
bXAoR1BSSW5mbzo6cmVnVDIpKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUklu
Zm86OnJlZ1QzKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdU
NCkpOworICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKKyAg
ICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisg
ICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDMyKSwKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQ
UkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMy
X3QgdGhpbmdzWzZdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0
KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwg
NSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzKTsKKyAg
ICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOworICAg
IENIRUNLKHRoaW5nc1szXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7CisgICAg
Q0hFQ0sodGhpbmdzWzVdID09IDUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdz
KCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29k
ZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJlZ3NbaV0pKTsKKyAgICBJbnN0JiBzaHVmZmxl
ID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVn
c1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisK
KyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkg
KiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJvb3QtPmFwcGVuZChN
b3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9m
KGludDMyX3QpKSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2
NjYpOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzWzBdKSksIGJhc2UpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIEFyZzo6c3Rh
Y2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAg
ICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBB
cmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIH0KKyAgICAKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHBy
b2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSAz
NSArIHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIC0gMSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVS
b3RhdGVBbGxSZWdzKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSByZWdzSW5Q
cmlvcml0eU9yZGVyKEFyZzo6R1ApOworCisgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRk
QmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
KyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIDM1ICsgaSwgVG1wKHJlZ3NbaV0pKTsKKyAgICBJ
bnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxwdHIpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFw
cGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSk7CisgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3MubGFzdCgpKSwgVG1wKHJlZ3Nb
MF0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgU3RhY2tTbG90KiBzbG90
ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpT
dGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdz
LnNpemUoKTsgKytpKQorICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
cmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkpOworCisgICAg
VmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICBUbXAgYmFzZSA9
IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICBy
b290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2Yo
aW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBz
aXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgCisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0
aGluZ3NbMF0gPT0gMzUgKyBzdGF0aWNfY2FzdDxpbnQzMl90PihyZWdzLnNpemUoKSkgLSAxKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAg
Q0hFQ0sodGhpbmdzW2ldID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgLSAxKTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVN3YXA2NCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBw
cm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAwMDAw
MDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAy
MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAg
bG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdU
MykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAg
ICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRfdCB0
aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6
YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUs
IG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9m
KGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5n
cykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAg
Q0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5n
c1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0gNDAw
MDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAw
MDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU2hpZnQ2NCgpCit7CisgICAgQjM6
OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25z
dGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QyKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUMykpOworICAgIGxvYWRDb25zdGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAw
MGxsLCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNo
dWZmbGUsIG51bGxwdHIsCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
NjQpKTsKKworICAgIGludDY0X3QgdGhpbmdzWzVdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGlu
Z3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAg
IENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDMw
MDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAw
MDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNDAwMDAwMDAwMDAwMDAwMDBsbCk7Cit9
CisKK3ZvaWQgdGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEwMDAwMDAw
MDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290
LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QyKSk7Cisg
ICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpy
ZWdUMykpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgaW50NjRf
dCB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRt
cChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7
CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6
ZW9mKGludDY0X3QpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOworICAgIAorICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisg
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKHRo
aW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMl0gPT0g
NDAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzNdID09IHN0YXRpY19jYXN0
PHVpbnQzMl90PigzMDAwMDAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVT
aGlmdE1peGVkV2lkdGgoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBj
b2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9j
aygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BS
SW5mbzo6cmVnVDApKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMDAwMDBs
bCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDMwMDAwMDAw
MDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIGxvYWRDb25zdGFudChyb290
LCA0MDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKKyAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7Cisg
ICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGg2NCksCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdU
NCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1s1
XTsKKyAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJh
c2UsIDEgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRf
dCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qz
KSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQg
KiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAw
MDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwp
OworICAgIENIRUNLKHRoaW5nc1syXSA9PSAzMDAwMDAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sodGhpbmdzWzRd
ID09IHN0YXRpY19jYXN0PHVpbnQzMl90Pig0MDAwMDAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3Zv
aWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeSgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOwor
ICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3QgbWVtb3J5WzJdOwor
ICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZv
OjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigm
bWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAg
ICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BS
SW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6
OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOworCisgICAgaW50MzJfdCB0aGluZ3NbMl07CisgICAg
VG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAg
ICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDM1KTsKKyAg
ICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1v
cnlMb25nKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHBy
b2MuY29kZSgpOworCisgICAgaW50MzJfdCBtZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzU7
CisgICAgbWVtb3J5WzFdID0gMzY7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgbG9h
ZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7CisgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAg
ICAKKyAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDAgKiBzaXplb2YoaW50MzJf
dCkpLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QzKSwgMCAqIHNpemVvZihpbnQzMl90KSks
CisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDMpLCAxICogc2l6ZW9mKGludDMy
X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihU
bXAoR1BSSW5mbzo6cmVnVDMpLCAxICogc2l6ZW9mKGludDMyX3QpKSwgVG1wKEdQUkluZm86OnJl
Z1QyKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGludDMy
X3QgdGhpbmdzWzNdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3Qp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwg
MiAqIHNpemVvZihpbnQzMl90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAg
IG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKKyAg
ICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzJdID09IDM2KTsKKyAg
ICBDSEVDSyhtZW1vcnlbMF0gPT0gMik7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30K
Kwordm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpCit7CisgICAgQjM6OlByb2Nl
ZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDMyX3Qg
bWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1OworICAgIG1lbW9yeVsxXSA9IDM2OworCisg
ICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAg
cmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Z3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCBpICsgMSwgVG1wKHJl
Z3NbaV0pKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1l
bW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5h
cHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAo
cmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDMy
X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50MzJfdCkp
LAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQz
Ml90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAgICAgICBBcmc6OmFkZHIo
VG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChyZWdzWzFdKSwK
KyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChU
bXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQo
CisgICAgICAgICAgICBNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRt
cChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICB9CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9j
KSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09
IDM2KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAg
ICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICBD
SEVDSyhtZW1vcnlbMF0gPT0gMSk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1KTsKK30KKwor
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnczY0KCkKK3sKKyAgICBCMzo6UHJvY2Vk
dXJlIHByb2M7CisgICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBt
ZW1vcnlbMl07CisgICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlb
MV0gPSAzNjAwMDAwMDAwMDAwMGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblBy
aW9yaXR5T3JkZXIoQXJnOjpHUCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6
cmVnVDApKTsKKworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRD
b25zdGFudChyb290LCAoaSArIDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAg
ICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAgICBBcmc6
OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAg
IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBB
cmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsg
aSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kg
LSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAg
IFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAg
ICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpy
ZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kKE1v
dmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
KyAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisKKyAgICBD
SEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0g
PT0gMzYwMDAwMDAwMDAwMDBsbCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQ2
NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzBdID09IDEwMDAw
MDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOwor
fQorCitpbnQ2NF90IGNvbWJpbmVIaUxvKGludDY0X3QgaGlnaCwgaW50NjRfdCBsb3cpCit7Cisg
ICAgdW5pb24geworICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICBpbnQzMl90IGhhbHZl
c1syXTsKKyAgICB9IHU7CisgICAgdS52YWx1ZSA9IGhpZ2g7CisgICAgdS5oYWx2ZXNbMF0gPSBz
dGF0aWNfY2FzdDxpbnQzMl90Pihsb3cpOworICAgIHJldHVybiB1LnZhbHVlOworfQorCit2b2lk
IHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpCit7CisgICAgQjM6OlBy
b2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIGludDY0
X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7CisgICAgbWVt
b3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIFZlY3RvcjxSZWc+IHJlZ3MgPSByZWdz
SW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOworICAgIHJlZ3MucmVtb3ZlRmlyc3QoUmVnKEdQUklu
Zm86OnJlZ1QwKSk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBs
b2FkQ29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1wKHJlZ3NbaV0p
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1lbW9yeSks
IFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQo
CisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisgICAgICAgIAorICAgICAgICBUbXAocmVnc1sw
XSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwK
KyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorICAgICAgICAKKyAgICAgICAg
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAg
ICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFdKSwKKyAgICAg
ICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNodWZmbGUuYXBwZW5kKAorICAg
ICAgICAgICAgVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLAorICAgICAgICAgICAgKGkg
JiAxKSA/IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSA6IEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSk7CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdzLnNpemUo
KSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
cm9vdC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOworICAg
IH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwbGwp
OworICAgIENIRUNLKHRoaW5nc1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMzYwMDAwMDAw
MDAwMDBsbCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEw
MDAwMDAwMDAwMDBsbDsKKyAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09ICgoaSAmIDEpID8gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSA6IHZhbHVlKSk7CisgICAgfQorICAgIENIRUNLKG1l
bW9yeVswXSA9PSBjb21iaW5lSGlMbygzNTAwMDAwMDAwMDAwMGxsLCAxMDAwMDAwMDAwMDAwbGwp
KTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Cit9CisKK3ZvaWQg
dGVzdFNodWZmbGVSb3RhdGVNZW1vcnkoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAg
ICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQzMl90IG1lbW9yeVsyXTsKKyAg
ICBtZW1vcnlbMF0gPSAzNTsKKyAgICBtZW1vcnlbMV0gPSAzNjsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChH
UFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIoJm1l
bW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOworICAgIHJvb3QtPmFwcGVuZCgKKyAgICAgICAg
U2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCks
IFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKKworICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwg
MCAqIHNpemVvZihpbnQzMl90KSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICog
c2l6ZW9mKGludDMyX3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiks
IDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAg
ICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2YoaW50MzJfdCkp
LCBUbXAoR1BSSW5mbzo6cmVnVDApLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOworCisgICAgaW50MzJfdCB0aGluZ3NbMl07CisgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAg
KiBzaXplb2YoaW50MzJfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkp
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNp
emVvZih0aGluZ3MpKTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
KTsKKworICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNik7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09
IDEpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAyKTsKKyAgICBDSEVDSyhtZW1vcnlbMV0gPT0g
MzUpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5NjQoKQoreworICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKKyAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2
NF90IG1lbW9yeVsyXTsKKyAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1l
bW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29k
ZS5hZGRCbG9jaygpOworICAgIGxvYWRDb25zdGFudChyb290LCAxMDAwMDAwMDAwMDAwbGwsIFRt
cChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWRDb25zdGFudChyb290LCAyMDAwMDAwMDAwMDAw
bGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7CisgICAgcm9vdC0+
YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAorCisgICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoNjQpLAorICAgICAgICAKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OmFkZHIoVG1w
KEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSwKKworICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAq
IHNpemVvZihpbnQ2NF90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCisgICAgICAgIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBpbnQ2NF90IHRoaW5nc1syXTsKKyAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXpl
b2YoaW50NjRfdCkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQo
dGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRS
dW48aW50Pihwcm9jKSk7CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMzYwMDAwMDAwMDAwMDBs
bCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0so
bWVtb3J5WzBdID09IDIwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1
MDAwMDAwMDAwMDAwbGwpOworfQorCit2b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5TWl4ZWRX
aWR0aCgpCit7CisgICAgQjM6OlByb2NlZHVyZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9j
LmNvZGUoKTsKKworICAgIGludDY0X3QgbWVtb3J5WzJdOworICAgIG1lbW9yeVswXSA9IDM1MDAw
MDAwMDAwMDAwbGw7CisgICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZENvbnN0YW50
KHJvb3QsIDIwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6
cmVnVDIpKTsKKyAgICByb290LT5hcHBlbmQoCisgICAgICAgIFNodWZmbGUsIG51bGxwdHIsCisg
ICAgICAgIAorICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCisKKyAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50NjRfdCkp
LAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCisgICAgICAgIAorICAgICAg
ICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisg
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3Qp
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAo
R1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwKKyAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGludDY0X3Qg
dGhpbmdzWzJdOworICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6
OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Cisg
ICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKKyAgICAKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSAzNjAwMDAwMDAwMDAwMGxsKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KDEwMDAwMDAwMDAwMDBsbCkpOworICAgIENIRUNLKG1lbW9yeVswXSA9PSAy
MDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsxXSA9PSBjb21iaW5lSGlMbygzNjAw
MDAwMDAwMDAwMGxsLCAzNTAwMDAwMDAwMDAwMGxsKSk7Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVS
b3RhdGVNZW1vcnlBbGxSZWdzNjQoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBD
b2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBpbnQ2NF90IG1lbW9yeVsyXTsKKyAgICBt
ZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOworICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAw
MDAwbGw7CisKKyAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6
OkdQKTsKKyAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOworCisgICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChp
ICsgMSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKKyAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBu
dWxscHRyLAorICAgICAgICAKKyAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQ
UkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDY0KSwKKyAgICAgICAgCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5m
bzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3QpKSwKKyAgICAgICAgQXJnOjphZGRyKFRtcChH
UFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGg2NCksCisKKyAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBz
aXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSksCisgICAgICAgIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSwKKworICAgICAgICByZWdzLmxhc3QoKSwgcmVnc1swXSwgQXJnOjp3aWR0aEFy
ZyhBcmc6OldpZHRoNjQpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNp
emUoKTsgKytpKQorICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAo
cmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBWZWN0b3I8aW50
NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5z
aXplKCk7ICsraSkgeworICAgICAgICByb290LT5hcHBlbmQoCisgICAgICAgICAgICBNb3ZlLCBu
dWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICog
c2l6ZW9mKGludDY0X3QpKSk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKwor
ICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworCisgICAgQ0hFQ0sodGhpbmdz
WzBdID09IHN0YXRpY19jYXN0PGludDY0X3Q+KHJlZ3Muc2l6ZSgpKSAqIDEwMDAwMDAwMDAwMDBs
bCk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDM2MDAwMDAwMDAwMDAwbGwpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQorICAgICAgICBDSEVDSyh0aGlu
Z3NbaV0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSkgKiAxMDAwMDAwMDAwMDAwbGwpOworICAg
IENIRUNLKG1lbW9yeVswXSA9PSAxMDAwMDAwMDAwMDAwbGwpOworICAgIENIRUNLKG1lbW9yeVsx
XSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9y
eUFsbFJlZ3NNaXhlZFdpZHRoKCkKK3sKKyAgICBCMzo6UHJvY2VkdXJlIHByb2M7CisgICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOworCisgICAgaW50NjRfdCBtZW1vcnlbMl07CisgICAgbWVt
b3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKKyAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAw
MGxsOworCisgICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpH
UCk7CisgICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKKworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIGxvYWRDb25zdGFudChyb290LCAoaSAr
IDEpICogMTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
CisgICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKKyAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKKyAgICAgICAgCisgICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAorICAgICAgICBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCisgICAgICAgIAorICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86
OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpLAorCisgICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6
ZW9mKGludDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAorICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCisKKyAgICAgICAgcmVncy5sYXN0KCksIHJlZ3NbMF0sIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJl
Z3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOworCisgICAgVmVjdG9yPGludDY0
X3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1w
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+YXBwZW5kKAorICAgICAgICAgICAgTW92ZSwgbnVs
bHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNp
emVvZihpbnQ2NF90KSkpOworICAgIH0KKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFw
cGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENIRUNLKHRoaW5nc1sw
XSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVncy5zaXpl
KCkpICogMTAwMDAwMDAwMDAwMGxsKSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0YXRpY19j
YXN0PHVpbnQzMl90PigzNjAwMDAwMDAwMDAwMGxsKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7CisgICAgQ0hFQ0sobWVtb3J5
WzBdID09IGNvbWJpbmVIaUxvKDM1MDAwMDAwMDAwMDAwbGwsIDEwMDAwMDAwMDAwMDBsbCkpOwor
ICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNTAwMDAwMDAwMDAwMGxsKTsKK30KKwordm9pZCB0ZXN0
U2h1ZmZsZVN3YXBEb3VibGUoKQoreworICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKKyAgICBDb2Rl
JiBjb2RlID0gcHJvYy5jb2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCAxLCBUbXAoRlBSSW5mbzo6ZnBS
ZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290
LCAyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIGxv
YWREb3VibGVDb25zdGFudChyb290LCAzLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOworICAgIGxvYWREb3VibGVDb25zdGFudChyb290LCA0LCBUbXAoRlBSSW5m
bzo6ZnBSZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZCgKKyAg
ICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKKyAgICAgICAgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBU
bXAoRlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKKyAgICAg
ICAgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6d2lk
dGhBcmcoQXJnOjpXaWR0aDY0KSk7CisKKyAgICBkb3VibGUgdGhpbmdzWzRdOworICAgIFRtcCBi
YXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwor
ICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdU
MCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBl
bmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihkb3VibGUpKSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUs
IG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXpl
b2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAo
RlBSSW5mbzo6ZnBSZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGRvdWJsZSkpKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisKKyAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXpl
b2YodGhpbmdzKSk7CisgICAgCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7
CisKKyAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7CisgICAgQ0hFQ0sodGhpbmdzWzFdID09IDIp
OworICAgIENIRUNLKHRoaW5nc1syXSA9PSA0KTsKKyAgICBDSEVDSyh0aGluZ3NbM10gPT0gMyk7
Cit9CisKK3ZvaWQgdGVzdFNodWZmbGVTaGlmdERvdWJsZSgpCit7CisgICAgQjM6OlByb2NlZHVy
ZSBwcm9jOworICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDEs
IFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERv
dWJsZUNvbnN0YW50KHJvb3QsIDIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwgVG1wKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDMsIFRtcChGUFJJbmZvOjpm
cFJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgbG9hZERvdWJsZUNvbnN0YW50KHJv
b3QsIDQsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAg
cm9vdC0+YXBwZW5kKAorICAgICAgICBTaHVmZmxlLCBudWxscHRyLAorICAgICAgICBUbXAoRlBS
SW5mbzo6ZnBSZWdUMiksIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpKTsKKworICAgIGRvdWJsZSB0aGluZ3NbNF07CisgICAgVG1wIGJhc2UgPSBjb2Rl
Lm5ld1RtcChBcmc6OkdQKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+
YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIDAgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91
YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICog
c2l6ZW9mKGRvdWJsZSkpKTsKKyAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwg
VG1wKEZQUkluZm86OmZwUmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihkb3VibGUp
KSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpm
cFJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoZG91YmxlKSkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7CisgICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKworICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3Mp
KTsKKyAgICAKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKworICAgIENI
RUNLKHRoaW5nc1swXSA9PSAxKTsKKyAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7CisgICAgQ0hF
Q0sodGhpbmdzWzJdID09IDMpOworICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKK30KKworI2Rl
ZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0YXNrcy5hcHBlbmQo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY3JlYXRlU2hhcmVkVGFz
azx2b2lkKCk+KCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFsmXSAoKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCN0ZXN0ICIuLi5c
biIpOyAgICAgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6IE9LIVxuIik7ICAgXAor
ICAgICAgICAgICAgICAgIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKGZhbHNlKTsKKwordm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQoreworICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFw
KS5sZWFrUmVmKCk7CisKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFz
a3M7CisKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdE5hbWUpIC0+
IGJvb2wgeworICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNhc2VzdHIodGVzdE5hbWUs
IGZpbHRlcik7CisgICAgfTsKKworICAgIFJVTih0ZXN0U2ltcGxlKCkpOworICAgIAorICAgIFJV
Tih0ZXN0U2h1ZmZsZVNpbXBsZVN3YXAoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU2hp
ZnQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0KCkpOworICAgIFJVTih0ZXN0U2h1
ZmZsZUxvbmdTaGlmdEJhY2t3YXJkcygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVSb3Rh
dGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlQnJvYWRjYXN0KCkpOworICAgIFJVTih0
ZXN0U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNo
aWZ0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkpOworICAgIFJV
Tih0ZXN0U2h1ZmZsZVRyZWVTaGlmdE90aGVyQmFja3dhcmQoKSk7CisgICAgUlVOKHRlc3RTaHVm
ZmxlTXVsdGlwbGVTaGlmdHMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5n
ZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVXaXRoTG9uZ0ZyaW5nZSgpKTsKKyAgICBS
VU4odGVzdFNodWZmbGVNdWx0aXBsZVJvdGF0ZXMoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hp
ZnRBbmRSb3RhdGUoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdzKCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVJvdGF0ZUFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2lt
cGxlU3dhcDY0KCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKSk7CisgICAg
UlVOKHRlc3RTaHVmZmxlU3dhcE1peGVkV2lkdGgoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hp
ZnRNaXhlZFdpZHRoKCkpOworICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkpOworICAg
IFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5TG9uZygpKTsKKyAgICBSVU4odGVzdFNodWZmbGVT
aGlmdE1lbW9yeUFsbFJlZ3MoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxS
ZWdzNjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0
aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnkoKSk7CisgICAgUlVOKHRlc3RT
aHVmZmxlUm90YXRlTWVtb3J5NjQoKSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5
TWl4ZWRXaWR0aCgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzNjQo
KSk7CisgICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKSk7
CisgICAgUlVOKHRlc3RTaHVmZmxlU3dhcERvdWJsZSgpKTsKKyAgICBSVU4odGVzdFNodWZmbGVT
aGlmdERvdWJsZSgpKTsKKworICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgIHVzYWdl
KCk7CisKKyAgICBMb2NrIGxvY2s7CisKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhy
ZWFkczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlBy
b2Nlc3NvckNvcmVzKCk7IGktLTspIHsKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoCisgICAgICAg
ICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAorICAg
ICAgICAgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRh
c2tzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrcy50YWtlRmlyc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+
cnVuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisgICAg
fQorCisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCisgICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgY3Jhc2hMb2NrLmxvY2soKTsK
K30KKworfSAvLyBhbm9ueW1vaXMgbmFtZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQp
CisKK3N0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFyKikKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQg
aXMgbm90IGVuYWJsZWQuXG4iKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIg
PSBudWxscHRyOworICAgIHN3aXRjaCAoYXJnYykgeworICAgIGNhc2UgMToKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAyOgorICAgICAgICBmaWx0ZXIgPSBhcmd2WzFdOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICB1c2FnZSgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgcnVuKGZpbHRlcik7CisgICAgcmV0dXJuIDA7Cit9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NDAsNyArMzU0MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX291dC5icmFuY2goCiAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAog
ICAgICAgICAgICAgICAgICAgICBwcmV2TGVuZ3RoLCBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSksCi0gICAgICAgICAgICAgICAgcmFyZWx5KHNs
b3dQYXRoKSwgdXN1YWxseShmYXN0UGF0aCkpOworICAgICAgICAgICAgICAgIHVuc3VyZShzbG93
UGF0aCksIHVuc3VyZShmYXN0UGF0aCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7CiAg
ICAgICAgICAgICBtX291dC5zdG9yZSgKQEAgLTgyMjUsNyArODIyNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaG9sZUNhc2UgPQogICAgICAgICAgICAgICAgICAg
ICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGhvbGUgY2FzZSIpKTsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT3V0T2ZCb3VuZHMs
IHVuc3VyZShvdXRPZkJvdW5kc0Nhc2UpLCB1bnN1cmUoaG9sZUNhc2UpKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5icmFuY2goaXNPdXRPZkJvdW5kcywgcmFyZWx5KG91dE9mQm91bmRzQ2FzZSks
IHVzdWFsbHkoaG9sZUNhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRz
Q2FzZSwgaG9sZUNhc2UpOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMTk1MDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6CiB7CiAg
ICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9CiAgICAgICAgIHByZXBhcmVPU1JFeGl0
SGFuZGxlKHN0YXRlLCBleGl0S2luZCwgbm9kZU9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlzRXhj
ZXB0aW9uSGFuZGxlcik7Ci0gICAgaGFuZGxlLT5lbWl0RXhpdFRodW5rKGppdCk7CisgICAgaGFu
ZGxlLT5lbWl0RXhpdFRodW5rKHN0YXRlLCBqaXQpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
QEAgLTg0LDggKzg0LDggQEAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9y
OgogICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPQogICAgICAgICBwcmVwYXJlT1NS
RXhpdEhhbmRsZShzdGF0ZSwgZXhpdEtpbmQsIG5vZGVPcmlnaW4sIHBhcmFtcywgb2Zmc2V0LCBp
c0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgW2hh
bmRsZV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICBoYW5kbGUtPmVtaXRFeGl0
VGh1bmsoaml0KTsKKyAgICAgICAgW2hhbmRsZSwgJnN0YXRlXSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGhhbmRsZS0+ZW1pdEV4aXRUaHVuayhzdGF0ZSwgaml0KTsKICAgICAg
ICAgfSk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkocmV2aXNpb24gMTk1MDY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSwyNCArMjksMzAgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKIAog
I2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
IkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQcm9maWxl
ckNvbXBpbGF0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotdm9p
ZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKENDYWxsSGVscGVycyYgaml0KQordm9pZCBP
U1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCiB7Ci0gICAgbGFiZWwgPSBqaXQubGFiZWwoKTsKKyAgICBQcm9maWxlcjo6Q29tcGlsYXRp
b24qIGNvbXBpbGF0aW9uID0gc3RhdGUuZ3JhcGguY29tcGlsYXRpb24oKTsKKyAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIG15TGFiZWwgPSBqaXQubGFiZWwoKTsKKyAgICBsYWJlbCA9IG15TGFiZWw7
CiAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5kZXgpKTsKICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNo
YWJsZUp1bXAganVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IHNlbGYgPSB0aGlzOwogICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgW3NlbGYs
IGp1bXBdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIFtzZWxmLCBqdW1wLCBt
eUxhYmVsLCBjb21waWxhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgIHNlbGYtPmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoanVtcCkpOwogCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAg
ICAgICAgICAgICAgICAganVtcC5tX2p1bXAsCiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwobGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICBpZiAoY29tcGlsYXRpb24pCisgICAgICAg
ICAgICAgICAgY29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG15TGFiZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkgfSk7CiAgICAgICAgIH0pOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAkocmV2
aXNpb24gMTk1MDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFu
ZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBTdGF0ZTsKIHN0cnVjdCBPU1JFeGl0OwogCiAvLyBU
aGlzIGlzIGFuIG9iamVjdCB0aGF0IHN0b3JlcyBzb21lIGludGVyZXN0aW5nIGRhdGEgYWJvdXQg
YW4gT1NSIGV4aXQuIEl0J3MgZXhwZWN0ZWQgdGhhdCB5b3Ugd2lsbApAQCAtNTUsNyArNTYsNyBA
QCBzdHJ1Y3QgT1NSRXhpdEhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlCiAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBsYWJlbDsKIAogICAgIC8vIFRoaXMgZW1pdHMgdGhlIGV4aXQgdGh1bmsgYW5k
IHBvcHVsYXRlcyAnbGFiZWwnLgotICAgIHZvaWQgZW1pdEV4aXRUaHVuayhDQ2FsbEhlbHBlcnMm
KTsKKyAgICB2b2lkIGVtaXRFeGl0VGh1bmsoU3RhdGUmLCBDQ2FsbEhlbHBlcnMmKTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
</data>
<flag name="review"
          id="293960"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>